• Contribute / Hire

custom rake tasks

How to Write a Custom Rake Task

Rake provides a great way to automate repetitive or complex tasks. Here's a look at creating a simple and a more complex task.

Rake is a nice, powerful tool for automating tasks in a ruby project.

We've chatted here about how to accept arguments within a rake task , and I suspect that will be of use coming out of this discussion. However, for the purposes of getting started with rake, let's consider some simple examples.

First, you need to get setup. If your project doesn't already have rake installed, then you'll need to add it to your project. I wrote an article on just that topic .

Rake Syntax

Rake tasks follow this convention:

Rake tasks have three main parts:

  • description

The description ( desc ) gives a brief description of what the task does, which comes in handy when you start adding a handful of tasks. The name is a unique way in which you identify the task. And last, the code block is the code that is executed when the task is run.

In addition, note that although rake tasks are written in ruby, their file extension is .rake , NOT .rb .

List Available Tasks

At any point you can see the available tasks by running:

Note: This ignores tasks without descriptions. To see all tasks (including tasks without description, you can add a v option:

Also note: If you are using rake from your Gemfile, it's best to use bundle exec to ensure we run the correct version of rake:

A Simple Task

Let's add the simplest of all the simple tasks ever there were. Our "Hello World" task will simply tell us "Hello."

Here's what it would look like:


Let's list out our rake tasks to find the one we just wrote.

Along with any other tasks in your project, you should see this line:

This means you can run this test from your project's root like so:

Getting More Complicated

Really, rake is just a means by which you can execute ruby scripts. Therefore, it can do almost anything you can imagine to help you be more productive.

Let's take a task I put into most Ruby on Rails projects. This task finds all of the models in your application and creates CSV files for you to fill in seed data.

First let's look at the task, then we'll break it down.


A namespace simply segments the task. The task, named create_files would otherwise sit on its own and not give you much inclination as to what it did (other than create files). One alternative would be to name it create_db_seed_files , but instead I've put it in its own namespace.

This means this task would be called as rake db:seed:create_files , which fits in nicely with other db tasks.

Loading the Environment

In Rails, if you want access to ActiveRecord models, you have to load in the environment, which is done via => :environment . The line below doesn't just initiate the task. It also loads the environment.

Requiring Files

Inside the task, we first make sure we include all the files. glob steps through each file in the specified path, which we called the file variable, while we simply require it.

Creating Directories

Next, we make a new directory to place our files in, unless it already exists.

Stepping Through Models and Creating Files

The next thing (our guts) all happens in one loop. The loop begins by stepping through each ActiveRecord model, as we do with this line:

Now the model is available via the model object. We check to see if the seed file already exists:

And if it doesn't, then we write a new file.

Within that file (with the f object), With initialize it by make that models columns the headers in the file.

And last, we let the user know we created a file.

That's just one example, but you can see how you can take time-consuming tasks and turn them into repeatable solutions via a rake task.

Let's Connect

Keep reading.

custom rake tasks

4 Ways to Pass Arguments to a Rake Task

Always googling and forgetting how to pass arguments to rake tasks? Here's a up list of the various methods.

custom rake tasks

Add Rake To Any Project

Rake is an awesome tool. You may want to use it in a non-Ruby project or a project that isn't configured for it.

custom rake tasks

Disable Rake Commands in a Rails Project

Sometimes you want to disable some of the default rake tasks in a rails project. Here's a quick way to do just that.

DEV Community

DEV Community

Vinicius Stock

Posted on Nov 29, 2018

Customizing Rails rake tasks

Rails rake tasks are commands that automate specific actions to be used either by the developers or by other mechanisms (e.g.: a deploy that will invoke rake tasks). Many tasks come configured with Rails out of the box to provide important functionality. In this post, I will explain how to override tasks and change their steps to customize them for your own application.

Here are a few examples of out of the box tasks:

However, tasks can quite easily be overridden to execute different actions. This is useful for defining steps for a build process that might include more than running the test suite or simply for changing the behavior of an existing task.

Customizing rake tasks to fit your needs can improve your productivity and help to guarantee that everyone in the project is using a standardized process (or at least that they have the tools to easily do so).

How to do it?

Overriding rake tasks is pretty straight forward. It involves two things: clearing the original task and re-defining it. Any code can go inside the new definition, however I recommend to neatly organize each step with their own rake task for simplicity.

How to create a new rake task

User defined rake tasks live inside the lib/tasks folder. Any file ending in ".rake" will be automatically picked up and loaded by Rails.

Done! You can now invoke your new rake task using the command below. In the next section, we will go through on how to invoke it from other tasks.

How to override an existing task

To override a task, clear the current behavior and re-define it in Rakefile. The example below will override the default rake to invoke our custom task.

And there you have it! The default rake task can be configured to do whatever your application needs.

In the next section, I will go through my usual set up for Rails applications.

My preferred configuration

The configuration I like to use overrides both the default and the test rake tasks, integrating them with a few tools. The steps for each are described below (check individual tool set up and configuration in their respective repos).

If any of these steps break, build process is stopped and fails.

Steps run in the following order

  • Brakeman - Code analysis for security
  • Parallel tests - Runs tests in parallel
  • Rubocop - Code quality analysis
  • Rails best practices - Best practices for Rails analysis
  • Reek - Code smells analysis

This one simply replaces running tests to use parallel

Now that we went through the high level description, let's get to business. Here is the Rakefile with the overridden tasks and the individual task definitions themselves.

The brakeman rake task

The rails best practices rake task

The reek rake task

The Gemfile

Overridden rake tasks can boost productivity and help enforce good practices among members of a team. Take advantage of them!

What other tools would you integrate with rake tasks?

What other uses can this capability have?

Top comments (1)


Templates let you quickly answer FAQs or store snippets for re-use.

ben profile image

  • Email [email protected]
  • Location NY
  • Education Mount Allison University
  • Pronouns He/him
  • Work Co-founder at Forem
  • Joined Dec 27, 2015

Fabulous post

Are you sure you want to hide this comment? It will become hidden in your post, but will still be visible via the comment's permalink .

Hide child comments as well

For further actions, you may consider blocking this person and/or reporting abuse

justanordinaryperson profile image

Containment and Specialization

Keertivaas S - Apr 28

lico profile image

Handling 404 Error in SPA Deployed on GitHub Pages

SeongKuk Han - May 2

punk-sama profile image

Gustavo H. J. - Apr 28

princessaisha profile image


PrincessAisha - May 11

DEV Community

We're a place where coders share, stay up-to-date and grow their careers.

  • Ruby on Rails

custom rake tasks

Ruby on Rails Tutorial: Understanding Rake and Task Automation

In the world of web development, efficiency is the name of the game. Developers are always on the lookout for tools and techniques that can help streamline their workflows, save time, and reduce errors. One such indispensable tool in the Ruby on Rails framework is Rake. In this tutorial, we’ll dive deep into Rake and explore how it can automate repetitive tasks and make your Ruby on Rails development experience smoother.

Ruby on Rails Tutorial: Understanding Rake and Task Automation

Table of Contents

1. Introduction to Rake

1.1. what is rake.

Rake is a build automation tool written in Ruby, primarily used in Ruby on Rails applications. It’s similar to Makefiles in Unix systems but is designed specifically for Ruby projects. Rake is a command-line tool that allows you to define and run tasks to automate various parts of your development process.

1.2. Why Use Rake?

Rake is a powerful ally for Ruby on Rails developers for several reasons:

  • Task Automation: Rake simplifies repetitive and complex tasks, making it easier to manage your application.
  • Consistency: Tasks are defined in code, ensuring that everyone on your team performs them consistently.
  • Extensibility: You can create custom tasks to fit your project’s unique needs.
  • Integration: Rake seamlessly integrates with Rails and other Ruby gems.

2. Getting Started with Rake

2.1. installation.

Rake comes pre-installed with Ruby, so there’s no need to install it separately. You can check if Rake is available on your system by running the following command:

2.2. Basic Rake Tasks

Let’s start with some basic Rake tasks. In your Rails application directory, you can run the default Rake task with:

This will list all available Rake tasks for your project. By default, Rails generates some essential tasks for database management, testing, and more.

To run a specific task, use the following command:

For instance, to migrate your database, use:

3. Writing Your Own Rake Tasks

3.1. the rakefile.

To create custom Rake tasks, you’ll need to work with the Rakefile. This file, usually located in your Rails application’s root directory, is where you define and organize your tasks. If your application doesn’t have a Rakefile, you can create one.

3.2. Defining Tasks

Defining a task in Rake is straightforward. You use the task method and provide a symbol as the task name, followed by a block of code that represents the task’s functionality. Here’s a simple example:

You can run this task using rake greet. It will output “Hello, Rake!” to the console.

3.3. Running Tasks

Rake tasks can also take arguments and options. For instance, suppose you want to pass a name to your greet task:

Now, you can run rake greet[“Alice”], and it will greet Alice. If you omit the name, it defaults to “Rake.”

4. Common Use Cases for Rake

4.1. database management.

One of the most common use cases for Rake in Ruby on Rails is database management. Rails provides several built-in tasks to help you migrate, seed, and reset your database.

To create and migrate the database:

To populate the database with seed data:

To reset the database:

These tasks help you keep your database schema up-to-date and ensure that your development and production databases are in sync.

4.2. Asset Compilation

In addition to database tasks, Rake can be used for asset compilation. When working with assets like JavaScript and CSS files, you can use Rake to precompile and manage them efficiently.

To precompile assets for production:

This task generates minified and concatenated versions of your assets, which can significantly improve your application’s performance in production.

4.3. Testing Automation

Automating tests is another area where Rake shines. Rails developers commonly use Rake tasks to run tests, generate code coverage reports, and manage testing-related tasks.

To run your test suite:

To generate a code coverage report:

By creating custom Rake tasks, you can extend and enhance your testing automation to suit your project’s specific needs.

5. Advanced Rake Techniques

5.1. namespaces.

Namespaces help organize your Rake tasks into logical groups. For example, if you have multiple database-related tasks, you can group them under a db namespace:

This allows you to run tasks like rake db:migrate and rake db:seed, keeping your Rake tasks organized and more readable.

5.2. Dependencies

You can specify task dependencies in Rake. This means that one task can depend on the successful completion of another task. For instance, you might want to run database migrations before seeding the database:

Now, when you run rake seed, Rake will first execute the migrate task and then proceed with seed.

5.3. Task Arguments

Tasks can accept arguments, making them more versatile. For example, you can create a task to generate a report based on a specific date:

You can then run this task with rake generate_report[2023-09-26] to generate a report for a specific date.

6. Rake in Real Projects

Example 1: database backup task.

Let’s consider a real-world example. You want to create a Rake task to backup your production database regularly. Here’s how you might define such a task:

You can run this task with rake backup_database, and it will create a backup of your production database with a timestamp in the filename.

Example 2: Automated Testing Suite

In a large Rails project, you might have a suite of Rake tasks for various testing scenarios. Here’s an example of how you can structure your testing tasks:

With this setup, you can run all unit tests with rake test:unit, all integration tests with rake test:integration, and generate a code coverage report for both with rake test:coverage.

7. Best Practices and Tips

7.1. organizing your rake tasks.

As your project grows, you may accumulate numerous Rake tasks. To maintain code readability and organization, consider placing tasks related to a specific area (e.g., database, testing) into their respective namespaces. Additionally, document your tasks with desc statements to provide clear descriptions for each task.

7.2. Error Handling

When writing Rake tasks, be sure to implement error handling to gracefully handle failures. You can use begin and rescue blocks to capture and handle exceptions, ensuring that tasks do not leave your application in an inconsistent state.

7.3. Documentation

Documenting your Rake tasks is essential, especially when working with a team. Include comments explaining the purpose and usage of each task in your Rakefile. This helps team members understand the tasks and use them effectively.

In the world of Ruby on Rails development, Rake is a powerful tool that can significantly improve your workflow by automating repetitive tasks and enhancing project organization. Whether you’re managing databases, compiling assets, or automating testing, Rake provides the flexibility and extensibility needed to make your development process smoother and more efficient.

By mastering Rake and incorporating it into your Rails projects, you’ll not only save time but also ensure consistency and reliability in your development tasks. So, don’t hesitate to explore Rake’s capabilities and start automating your Ruby on Rails projects today. Happy coding!

custom rake tasks

Ruby on Rails Home

Ruby on Rails Guides

What is the rails command line and what are its main commands, how to manage state in a rails application, how to handle background processing with sidekiq in rails.

  • Browse Episodes
  • RailsCasts Pro
  • Notifications

RailsCasts Pro episodes are now free!

Learn more or hide this

How to Use Rake to Manage Tasks in Rails

How to Use Rake to Manage Tasks in Rails image

What is Rake?

Rake is a build tool written in Ruby that provides a simple way to manage tasks and their dependencies. It is similar to other build tools like Make, Ant, and Maven. Rake allows you to define tasks in a Ruby DSL, making it easier to write and maintain complex build scripts.

Why Use Rake in Rails?

Rails applications come with several built-in rake tasks that help developers automate common tasks, such as database migrations, running tests, and generating code templates. Additionally, Rake allows you to create custom tasks specific to your application's needs. This makes it a powerful tool for Rails developers to streamline their development process.

Getting Started with Rake

Rake is already included in Rails, so you don't need to install it separately. To see the list of available rake tasks in your Rails application, run the following command in your terminal:

Creating Custom Rake Tasks

To create a custom rake task, you need to create a file with the extension .rake inside the lib/tasks directory of your Rails application. The naming convention for Rake files is namespace_taskname.rake .

Let's create a custom rake task to display a "Hello, Rails!" message. Create a new file called hello.rake inside the lib/tasks directory and add the following code:

In the code above, we defined a namespace called greet and a task called hello inside it. The :environment dependency ensures that the Rails environment is loaded before executing the task. The desc method provides a description for the task that will be displayed when listing the available tasks using rake -T .

To run the custom task, use the following command:

Managing Task Dependencies

Rake allows you to define task dependencies, ensuring that tasks are executed in the correct order. Let's add a new task called goodbye in the hello.rake file and make it dependent on the hello task:

Now, when you run the goodbye task, Rake will first execute the hello task and then the goodbye task:

Rake is an essential tool for Rails developers, as it allows you to automate common tasks and create custom tasks specific to your application. By understanding how to create and manage Rake tasks, you can greatly improve your productivity when working with Rails applications. If you're looking to hire Ruby developers , ensure they have a strong understanding of Rake and its capabilities.

If you're interested in enhancing this article or becoming a contributing author, we'd love to hear from you.

Please contact Sasha at [email protected] to discuss the opportunity further or to inquire about adding a direct link to your resource. We welcome your collaboration and contributions!

Rails, also known as Ruby on Rails or RoR, is a popular open-source web application framework designed for rapid application development. It follows the Model-View-Controller (MVC) architecture, which promotes separation of concerns and makes it easier for developers to build, maintain, and scale applications. Rails provide an extensive set of tools and features that help developers create web applications quickly and efficiently. It is particularly suitable for building database-backed applications.

Learn more about Rails from the official documentation or find tutorials and resources on Rails Tutorial .

Rake is a build tool written in Ruby that provides a simple way to manage tasks and their dependencies. It is similar to other build tools like Make, Ant, and Maven. Rake allows you to define tasks in a Ruby Domain Specific Language (DSL), making it easier to write and maintain complex build scripts. It is widely used in the Ruby on Rails ecosystem for task automation, including database migrations, running tests, and generating code templates. To learn more about Rake, visit the official Rake GitHub repository .

Task Dependencies

Task dependencies are a concept used in build tools and task automation systems to ensure that tasks are executed in the correct order and only when their required prerequisites are met. By defining dependencies between tasks, developers can create complex workflows where tasks automatically trigger other tasks upon completion. This helps manage complex build processes and ensures that the correct steps are taken at the right time. Task dependencies can be found in build tools such as Rake (Ruby), Make (C/C++), Ant (Java), and many others. To learn more about task dependencies and build tools, refer to the documentation of the specific build tool or task automation system you are using.

Elevate Your Engineering Capabilities with Expert Remote Ruby Developers Skilled in Swagger

Effortlessly Scale Your Tech Team with Expert Remote Ruby on Rails Developers Skilled in Pundit

Elevate Your Engineering Capabilities with Expert Remote Ruby on Rails Developers Skilled in Amazon S3 Services


RubyMine 2024.1 Help

Run rake tasks.

Rake is a popular task runner for Ruby and Rails applications. For example, Rails provides the predefined Rake tasks for creating databases, running migrations, and performing tests. You can also create custom tasks to automate specific actions - run code analysis tools, backup databases, and so on.

RubyMine provides a convenient way to run, debug , and reload Rake tasks. Moreover, you can use run/debug configurations to run tasks with specific parameters: you can pass task arguments, specify environment variables, and so on.

Before running a Rake task

Make sure the 'rake' gem is installed to the project SDK.

Check that the Rakefile is located in the project's root.

RubyMine allows you to run an arbitrary Rake task. For example, let’s see how to run the db:migrate task required for migrating a database in the Rails application:

Run a task using Run Anything

Do one of the following:

Press Ctrl twice and start typing db:migrate in the invoked popup. Select rake db:migrate from the list and press Enter .

Run Anything / rake db:migrate

Go to Tools | Run Rake Task Ctrl+Alt+R . In the invoked popup, start typing db:migrate , select db:migrate and press Enter .

In the invoked Execute 'db:migrate' dialog, select the required migration version and environment. Click OK .

Execute db:migrate

Run a task from the editor

In the *.rake file, do one of the following:

Click the Run Rake Task button on the gutter next to the required task.

Place the caret at the required task name and press Alt+Enter .

Depending on whether you want to run or debug a task, select Run '<task name>' or Debug '<task name>' . Press Enter .

After you've run a Rake task, RubyMine automatically creates a special profile - a temporary run/debug configuration . You can customize settings of this configuration, for example, you can pass task arguments, specify environment variables, and so on. Then, you can save the customized configuration to quickly run this configuration in the future.

Run a task using a run/debug configuration

RubyMine automatically creates the Rake run configurations for running the Minitest and RSpec tests in Rails applications - test and spec . You can run these tasks or any other task with the existing run/debug configurations in one of the following ways:

Press Ctrl twice to invoke the Run Anything popup. Start typing the required configuration name, select it from the list, and press Enter .

Go to Run | Run... Alt+Shift+F10 and select the desired configuration from the list and press Enter .

Reload Rake tasks

Sometimes it is necessary to reload Rake tasks. For example, this can be useful if you created a custom task and need to run it. To reload Rake tasks, do one of the following:

Press Ctrl+Shift+A and start typing Reload Rake Tasks . Select this item from the list and press Enter .

Go to Tools | Run Rake Task Ctrl+Alt+R . In the invoked popup, select rake --tasks and press Enter .

Configure parameters for running a task

When you run a Rake task for the first time , RubyMine automatically creates a corresponding Rake temporary configuration , which can be saved. If necessary, you can create the Rake run/debug configuration manually from the predefined template.

To customize the run/debug configuration, do the following:

Open the Run/Debug Configuration dialog in one of the following ways:

Select Run | Edit Configurations from the main menu.

With the Navigation bar visible ( View | Appearance | Navigation Bar ), choose Edit Configurations from the run/debug configuration selector.

Edit run configurations

Press Alt+Shift+F10 and then press 0 .

In the opened Run/Debug Configurations dialog, select the required configuration in the Rake group, and specify its settings.

Run/Debug Configurations: Rake

Run/debug configuration: Rake

Configuration tab.

Running Tasks & Consoles

Rails console.

To access an interactive Rails console, run:

Then start using the console, but be careful! You’re in a production environment.

The --pty flag tells the SSH server to run the command in a pseudo-terminal. You will generally need this only when running interactive commands, like the Rails console.

Interactive shell

To access an interactive shell as the root user, run:

To access an interactive shell as the rails user, requires a tiny bit of setup:

Accept the changes to your Dockerfile, and then rerun fly deploy .

Once this is complete, you can create an interactive shell:

Rails tasks

In order to run other Rails tasks, a small change is needed to your Rails binstubs to set the current working directory. The following command will make the adjustment for you:

Once this is complete, you can execute other commands on Fly, for example:

To list all the available tasks, run:

Custom Rake tasks

You can create Custom Rake Tasks to automate frequently used commands. As an example, add the following into lib/tasks/fly.rake to reduce the number of keystrokes it takes to launch a console:

You can run these tasks with bin/rails fly:ssh , bin/rails fly:console , and bin/rails fly:dbconsole respectively.

Take your Rails development to the next level

How to generate Rake task

Easy way to create your own Rake task

Andrei Kaleshka

TL;DR: use rails generator rails g task my_namespace my_task1 my_task2 .

Some time ago I found a generator in Ruby on Rails ’s sources to create a Rake task . There were no information about it anywhere. As a result, I decided to share my findings. This post will show you a simple and efficient method for generating them.

Several ways to create Rake tasks

There are at least two known approaches you can take:

  • Write it from scratch.
  • Copy and paste existing code and modify it as necessary.

The generator way to create Rake tasks

As it turns out, there is a third approach - utilize this Rake generator :

It generates a scaffold for the new Rake tasks located within the lib/tasks/my_namespace.rake file:

Now write some code inside the tasks’ body. This way, you save time creating the preparation code and concentrate on what matters.

Confirm that they are real and can be executed:

The command outputs the following content:

It indicates two Rake tasks ( my_task1 and my_task2 ) defined under the namespace my_namespace . However, they are empty and will do nothing until you add some code. The TODO comments remind you about that.

It has never been easier

The generator provides a skeleton for you. It’s easy to use and saves you time. You only need to focus on the task behavior.

Learning more

Rake Task Management Essentials

I’ve authored a book on the subject called Rake Task Management Essentials . To learn more about this remarkable tool, I recommend purchasing a copy . After reading, you will understand how to use Rake effectively in your daily tasks. The book guides you through easy-to-follow and practical examples.

Available Rake tasks

Help & feedback, feature availability and product trials.

For problems setting up or using this feature (depending on your GitLab subscription).

custom rake tasks

Navigation Menu

Search code, repositories, users, issues, pull requests..., provide feedback.

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly.

To see all available qualifiers, see our documentation .

  • Notifications

A set of custom rake tasks to help eradicate XML from the build scripts of the world.


Folders and files, repository files navigation, rake-dotnet.

Rake on my blog , Rake-dotnet on my blog


rake-dotnet is a library of custom tasks designed to (try to!) make your life as a build-automation author easier.

When have you ever heard of a build-script called anything other than a script? msbuild and nant both try to get you to call them projects. I'll say it up front - the idea of using XML to declaratively define the sequence of hoops one gets the computer to jump through to turn source into packaged software never sat right with me. I looked for something better one day, and found rake. I haven't touched msbuild or nant since, and I've been happier ;-)

Rake-dotnet is a bunch of things that aim at doing the work of creating a featureful build-script, so you don't have to. RDN likes convention-over-configuration. RDN tries to keep the Rakefile (the part YOU have to get involved with) short, because that means you can get on with the business of making software that YOU care about. RDN is designed to try to waste as little of your time as possible (and I'd like to know whether I succeeded, or failed, please ;-) ).

  • major.minor.build.svn-revision version number (git is handled differently) (build number is 0 when built outside of CI)
  • product-name
  • company-name
  • build configuration (Release/Debug etc)
  • Build the project files to produce said DLLs (call msbuild against the project file(s))
  • Run NUnit tests against said DLLs, and output an XML report (wrap nunit.console.exe)
  • Run XUnit.NET tests against said DLLs, and output reports (wrap xunit.console.exe)
  • Run FxCop against said DLLs, and output reports (wrap fxcopcmd.exe)
  • Run NCover against build output to generate coverage metrics
  • Run NCover against coverage to generate coverage reports
  • Run NDepend against build output to generate reports (based on an ndepend project file)
  • Harvest build output to a single directory tree for ease of working with it
  • Package build output as a zip file, naming it like {product-name}-{configuration}-v{version}.zip
  • Integrates well with TeamCity continuous integration
  • InstallPad?
  • Currently, the directories for each tool are created within {github}/presentation/DemoRoot/3rdparty and there is a readme.txt next-door with URLs to fetch from.


The tasks rely on you following some conventions. These are configurable to some extent, by calling rake to pass in values for the constants.

  • PRODUCT_ROOT defaults to .. - rake's working directory is build/ , where Rakefile.rb is used. All paths are relative to the rake working directory.
  • OUT_DIR defaults to out , hence equivalent to #{PRODUCT_ROOT}/build/out - build-output gets squirted here.
  • SRC_DIR defaults to #{PRODUCT_ROOT}/src - buildable projects should live here (this includes test projects). One directory per project, directory-name matches project-filename matches generated assembly-name.
  • TOOLS_DIR defaults to #{PRODUCT_ROOT}/../3rdparty - intentionally, tools are kept outside of the source tree. This allows for efficient xcopy deployment, or a source-control symbolic link arrangement (svn:externals works well).
  • test projects should have Tests somewhere in their project-name.
  • web-application projects should have Site somewhere in their project-name.
  • msbuild is assumed to follow its defaults and output into #{SRC_DIR}/{project-being-built}/bin/{configuration} for class libraries and so forth.

So our source structure looks like:

Example: {github}/presentation/DemoRoot

(In no particular order)

  • rdoc documentation to supplement blog'd about
  • Support other test-runners - nunit, mbunit, gallio
  • Support other source-controls to get build version number - mercurial, cvs(?), TFS. Or just read it from an environment variable that assumes we're within a CI build.
  • Support changing the conventions to allow users to specify their own source structure
  • Provide an InstallPad for the 3rdparty bits


  • ruby 1.8.6+ ruby one-click installer
  • rake 0.8.3+ (but this will be installed when you do gem install rake-dotnet )
  • Install Ruby 1.8.6 using the ruby one-click installer to (eg) c:\ruby
  • gem install rake-dotnet (prepend sudo if you're not on Windows - which doesn't seem likely considering the audience ;-) )
  • if you follow the instructions in {github}/presentation/DemoRoot/3rdparty/readme.txt you'll get default paths that rake-dotnet expects
  • if you mirror the structure as above, you won't need to pass in a value for TOOLS_DIR when calling rake
  • rake-dotnet uses tools within the paths taken from the default unzip'd location. For example, svn.exe is expected to live within #{TOOLS_DIR}/svn/bin because that's how svn zip files unzip

Build from source:

  • On Windows, you need the ruby-installer development kit (the rcov gem needs to build its native extension)
  • gem install rcov syntax hoe rspec diff-lcs --include-dependencies (again, prepend sudo if you're not on Windows)
  • Edit c:\Ruby\lib\ruby\gems\1.9.1\gems\hoe-2.4.0\lib\hoe.rb per here
  • rake clobber examples_with_report and/or rake clobber examples_with_rcov to run specifications and coverage respectively; library itself will be generated to lib/rake_dotnet.rb by cat'ing files together.

(The MIT License)

Copyright (c) 2009 Peter Mounce

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the 'Software'), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.


Contributors 2

  • JavaScript 45.8%
  • Classic ASP 0.5%

🚀 Access 100+ Ready-to-Use Templates and Get Inspired for Your Next Meeting →

9 Prioritization Frameworks + Tools to Help You Use Them

A Business Woman Sorting Spheres, a metaphor for using a framework to prioritize

Trying to choose the right prioritization tool or framework for your team is not easy. There are so many to choose from. If you’re feeling stuck or don’t know where to start, this guide is written to help you decide which prioritization system is best for your team and situation. 

We’ve rounded up several kinds of prioritization frameworks and then recommended software to prioritize projects, tools to prioritize tasks, tools to perform strategy prioritization, apps to prioritize the product roadmap, productivity tools, and more.

We hope this article helps you hit the ground running and start using these prioritization methods in your work.

What are prioritization frameworks?

A prioritization framework is a structured method or system teams or individuals use to evaluate and rank tasks, projects, or goals based on predefined criteria. It helps individuals and teams make informed decisions about what to tackle next by assigning priorities to items. Great prioritization frameworks allow us to feel good about what we choose to concentrate our efforts on the most important tasks and what work we’ve decided to delay or leave behind.

Whenever we have a list of things to do longer than our ability to execute we must prioritize. Prioritization is the act of making decisions on what to do and what to not do. There are numerous ways to prioritize. However, Deciding how to decide on a priority tool or prioritization framework can be just as difficult as making the decisions itself. 

📌 We want to keep this guide up to date. If you have a prioritization framework or prioritization tool you think we should add to this list, please write to us and we’ll consider adding your contribution to this article.

Simple Prioritization Techniques

The simplest prioritization techniques are:

  • Stack ranking – also called relative prioritization
  • Top-n prioritization 

They are simple methods of evaluating and ordering a set of items in a list from best to worst. This can be based on value, impact, or any other metric that is important to the task at hand.

1. Stack Ranking or Relative Prioritization

stack ranking prioritization framework diagram

Stack Ranking is a simple prioritization method in which you rank items according to a scale (for example 1-10). You think about the importance of each item relative to every other item and form a prioritized list in this manner. Imagine your prioritized list as a “stack” of cards, with the most important item on the top and the least important item on the bottom.  

Stack ranking involves comparing the relative importance of ideas or tasks to one another to prioritize them. That is why stack ranking is often referred to as relative prioritization.

When to Use Stack Ranking or Relative Prioritization

  • When you have a short list of items
  • When you can take any two items and easily decide which of the two should be higher on the list (either by a single metric such as revenue potential or customer satisfaction or by intuition)

How to do Stack Ranking or Relative Prioritization

  • Start by taking two items from your unordered list and create a new, prioritized list with the most import item at the top
  • Take a item from your unordered list and compare it against the top item on the ordered list
  • Ask, “is this new item more important?”
  • If it is more important, place it above this item, otherwise compare your new item to the next item on the prioritized list

If you’ve run out of items on the prioritized list to compare, put your new item at the bottom of the list.

2. Top-n Ranking

top-n ranking prioritization framework diagram

The Top-n method is a more refined version of stack ranking, which involves selecting the top items from a list. This method can be useful when you’re trying to narrow down a long list to a shorter list that can be executed on. For example, you can use Top-n Ranking to narrow down to 5 goals. Or, if your team has a history of being able to work on 12-15 tasks over a given period of time you would take your top 15 tasks from a prioritized task list.

When to use Top-n Ranking

You should consider using Top-n Ranking when you’d consider using Stack Ranking, but your list of items gets too long.

How to do Top-n Ranking

  • Decide how many items you’d like to include in your final ranking. For example, if you’re interested in coming up with your top 5 goals, you’ll have 5 items in your final list
  • Sort all of your items. To save time when you have many items, it can be helpful to take a quick pass through the list and ask, “might this item possibly make it into our top items when we’re done?” or, “should we put this item into a high-priority, medium-priority, or low-priority pile?”
  • Finalize the sort and select your Top-n items. If you find that you don’t have enough items, you can perform a finer-grained sort to any items you may have set aside in lower-priority piles.

🛠️ Prioritization Tools for Stack Ranking or Top-n Ranking

An example in-person floor sort prioritization process of index cards happening in a workshop

  • Notion Kanban Board (free plan available): Similar to Trello, a Kanban board can be created in Notion and be used to facilitate a stack ranking activity

Prioritizing using a Notion Kanban board

Prioritization Matrices

When a single prioritization metric (such as revenue potential, customer satisfaction, importance, etc.) or intuition won’t do, tasks can be prioritized by scoring them on two dimensions. You can score them by dragging them around a graphical canvas or using a spreadsheet to form a prioritization matrix.

The most common prioritization matrices are the::

  • Impact vs. Effort Matrix  
  • Eisenhower Matrix  

These methods are particularly popular for project prioritization.

3. Impact vs. Effort (aka Value vs. Effort)

impact vs effort prioritization framework diagram

An Impact vs. Effort matrix (also known as a Value vs. Effort matrix or Effort vs. Value matrix) is a simple two-by-two chart that helps folks figure out which tasks to tackle first. Picture a square divided into four smaller squares. The x-axis (horizontal line) represents a scale for “effort,” and the y-axis (vertical line) represents “impact.”

When to use an Impact vs. Effort Matrix

Impact vs. Effort matrices are helpful for cutting through the noise and bias that may result from stack ranking. They are particularly helpful when you have multiple projects or tasks competing for resources and need to decide which ones to focus on. This matrix helps you identify high-impact, low-effort tasks that should be prioritized, so whatever you prioritize should help you make the biggest impact with the lowest amount of effort.

This prioritization matrix works well for both individuals and teams. It’s super handy for figuring out where to start when everything seems important. It can also show a team where their energy is best spent, ensuring everyone is pulling in the same direction.

How to Read an Impact/Effort Matrix

  • Top Left: High impact, low effort. These are your “quick wins.”
  • Top Right: High impact, high effort. These are big projects that are worth the time and energy.
  • Bottom Left: Low impact, low effort. These tasks aren’t urgent but are easy to do.
  • Bottom Right: Low impact, high effort. These are tasks you might want to avoid or rethink.

How to Use an Impact vs. Effort Matrix

  • List Tasks : Write down all the tasks or projects you’ve got on your plate.
  • Rate Them : Give each task two scores – one for how much impact it will have (high or low) and another for how much effort it will take (high or low).
  • Plot Them : Put each task in the relevant box on the matrix.
  • Start with the “quick wins” because they’re easy and make a big difference.
  • Next, look at the high impact, high effort tasks. Plan these carefully; they’re important but will take time.
  • Low impact, low effort tasks can fill in the gaps.
  • Seriously reconsider doing the low impact, high effort tasks. They’re usually not worth it.

4. Eisenhower Matrix

eisenhower matrix prioritization framework diagram

The Eisenhower Matrix helps teams focus on prioritizing according to urgency and importance. It’s named after Dwight D. Eisenhower, the 34th President of the United States who was known for his effective management and decision-making skills, which were crucial both in military operations and later in his political career.

The concept is rooted in a principle he is often credited with formulating, goes something like:

 “What is important is seldom urgent, and what is urgent is seldom important.” 

This idea helps separate tasks based on their urgency and their importance, leading to the four quadrants of the Eisenhower Matrix.

It’s worth noting that while the concept is attributed to Eisenhower, the “Eisenhower Matrix” as a popular tool came about later and was developed by productivity experts and business thinkers who expanded on his principles. So while he didn’t invent the “matrix” per se, the fundamental idea behind it comes from his approach to decision-making and prioritization.

Here’s how the Eisenhower Matrix works: Imagine another square divided into four smaller squares. The x-axis represents “urgency,” and the y-axis represents “importance.”

When to use an Eisenhower Matrix

Use an Eisenhower Matrix when time management is an important component of your prioritization approach. For example, if you’re running up against a deadline and it will be impossible to finish all the tasks, use an Eisenhower Matrix to distinguish between what’s urgent and important to complete vs what’s non-urgent and unimportant.

For individuals , the Eisenhower Matrix helps separate the urgent from the important, so you’re not just putting out fires all day. It helps you make time for tasks that will benefit you in the long run.

For teams , this matrix can help clarify priorities for everyone. Team members can see which tasks are crucial and time-sensitive, and which can be scheduled or delegated. This way, everyone knows what they should be working on and why.How to Understand an Eisenhower Matrix

  • Top Left: Urgent and Important. These are the “do it now” tasks.
  • Top Right: Important but Not Urgent. These are the “schedule it” tasks.
  • Bottom Left: Urgent but Not Important. These are the “delegate it” tasks.
  • Bottom Right: Neither Urgent nor Important. These are the “dump it” tasks.

How to Use an Eisenhower Matrix

  • List Tasks : Write down all the tasks or projects you have.
  • Sort Them : Put each task into one of the four boxes based on how urgent and important it is.
  • Do it Now : Tasks that are both urgent and important should be done immediately.
  • Schedule it : Important but not urgent tasks should be planned for a later date. These are often bigger-picture tasks.
  • Delegate it : Urgent but not important tasks should be handed off to someone else, if possible.
  • Dump it : Tasks that are neither urgent nor important should be eliminated or postponed indefinitely.

🛠️ Prioritization Matrix Tools

custom rake tasks

Scoring Systems for Prioritization in Project Management

Prioritization systems like the RICE Method , MoSCoW Analysis , and Kano Analysis model are used to prioritize items based on a variety of factors, such as reach, impact, confidence, and effort by calculating and comparing prioritization scores. These methods are particularly useful for product teams performing product prioritization or prioritizing features or bug fixes on the product backlog .

5. The RICE Method

rice method prioritization framework diagram

The RICE method is a system used to prioritize tasks or projects by considering four key factors: 

  • Effort 

The acronym RICE stands for these four elements. Here’s what each term means:

  • Reach : How many people will this task or project affect?
  • Impact : If it does reach people, how strongly will it affect them?
  • Confidence : How sure are you that the task will succeed and achieve the estimated reach and impact?
  • Effort : How much work will the task take to complete?

When to use the RICE Method

The RICE method is useful when you have various tasks or projects you could work on but aren’t sure where to start. For teams, the RICE method offers a structured approach to making decisions. It adds some quantitative reasoning to decision-making, which can help individuals and teams be more objective in their reasoning on the best course of action.

How to use the RICE Method

  • List Your Tasks or Projects : Write down all the tasks or projects you’re considering.
  • Score Each Element : Give each task a score for reach, impact, confidence, and effort. Scores are generally relative and not absolute. For example, you might rate impact on a scale of 1 to 5, where 5 is extremely impactful.
  • Calculate the RICE Score : For each task, multiply Reach, Impact, and Confidence, and then divide by Effort. The formula is.

rice scoring prioritization framework formula

4. Rank and Prioritize : Once you have the RICE scores, rank the tasks from highest to lowest score. The higher the RICE score, the higher the priority.

5. Take Action : Start with the task that has the highest RICE score and work your way down the list.

6. The MoSCoW Method

MoSCoW method prioritization framework diagram

The MoSCoW method is a prioritization technique used to sort tasks or requirements into four categories: 

  • Should-haves
  • Could-haves
  • Won’t-haves 

The capital letters in “MoSCoW” stand for these categories:

  • Must-haves (Mo) : These are non-negotiable tasks that are critical to the project or goal. Failure to complete these means the project or task set is unsuccessful.
  • Should-haves (S) : These tasks are important but not critical. You should get to them if possible, but they are not deal-breakers.
  • Could-haves (Co) : These are nice-to-haves. If you have extra time or resources, these tasks can be done, but they don’t have a significant impact on the project’s success.
  • Won’t-haves (W) : These are tasks that are the lowest priority. They are often put off for another cycle or dropped entirely.

When to use the MoSCoW method

The MoSCoW method is a versatile prioritization tool. For personal tasks or everyday to-do lists, it helps individuals zero in on what’s essential, ensuring they don’t waste time on low-priority activities. In a team setting, such as in project management or software development, it provides a framework for stakeholders and team members to align on what tasks are crucial, especially when resources are tight. The MoSCoW method is adaptable to various timeframes – from daily planning to year-long projects.

How to use the MoSCoW method

  • List Tasks or Requirements : Write down all the tasks, projects, or requirements that you’re considering.
  • Categorize : Sort each task into one of the four MoSCoW categories. Be honest and strict, especially with the “Must-haves.”
  • Review and Adjust : Discuss the list with your team (if applicable) or review it yourself to make sure it aligns with your goals and resources.
  • Start with the Must-haves, as these are critical.
  • Move on to Should-haves if time and resources permit.
  • Add in Could-haves where you can.
  • The Won’t-haves are either postponed or dropped.
  • Execute and Monitor : Execute the tasks based on the set priorities, and adjust as needed. Sometimes a Should-have can become a Must-have depending on the situation.

7. The Kano Model

kano model prioritization framework diagram

The Kano Model is a theory for product development and customer satisfaction developed by Japanese professor and customer satisfaction consultant Noriaki Kano . The Kano Model focuses on understanding customer needs and expectations to prioritize features or improvements. It’s particularly popular in the realms of product management, marketing, and customer experience design.. The model categorizes customer preferences into five groups:

  • Basic Needs : Features that are expected by the customer. If these are missing or poorly executed, customers will be extremely dissatisfied.
  • Performance Needs : Features that customers explicitly desire. The better these features are, the more satisfied customers will be.
  • Excitement Needs : These are features that, when present, can delight customers, but their absence won’t cause dissatisfaction because customers aren’t expecting them.
  • Indifferent Needs : These features don’t significantly impact customer satisfaction whether they’re present or not.
  • Reverse Needs : These are features that can actually lead to dissatisfaction if included because they contradict what some customers want.

When to use the Kano Model

The Kano Model is helpful for understanding how to match customer expectations to product features. Try using this model when you want to make informed decisions about resource allocation, product development, and customer satisfaction. Note that the Kano Model can only be used successfully when you deeply understand the needs of your customers, so it only works in teams that have done extensive customer or user research. With that in mind the Kano Model is a helpful approach to take after polling users on their experience with your product or service.

How to use the Kano Model

  • Identify Features or Tasks : List all the possible features, improvements, or tasks that are under consideration.
  • Survey and Analyze : Use customer surveys or team brainstorming to classify each feature or task into one of the Kano categories.
  • Focus on Basic Needs first, as failing to meet these can result in dissatisfaction.
  • Optimize Performance Needs to meet or exceed expectations.
  • Consider adding Excitement Needs if resources allow, as these can delight customers or stakeholders.
  • Implement and Review : Implement the features based on the set priorities and continuously review customer feedback or performance metrics to update your understanding.

8. Opportunity Scoring

opportunity scoring prioritization framework diagram

Opportunity Scoring is a prioritization method often used in product management to evaluate the potential value of different features, improvements, or initiatives. Opportunity Scoring excels specifically in performing gap analysis – prioritizing efforts that are underserved by the marketplace. 

The idea is to assess opportunities based on two main factors: the importance of a particular problem to customers and how satisfied customers are with current solutions to that problem. The basic premise is that the bigger the problem and the less satisfied customers are with existing solutions, the wider the gap in the marketplace and the higher the opportunity score will be.

When to use Opportunity Scoring

Opportunity Scoring is best used when companies are at a crossroads and looking at bigger features they could build. In that sense, it is a market exploration prioritization method. It can help teams prioritize what problems to tackle first for users, especially when resources are limited. It brings in a more structured, data-informed approach to decision-making.

How to do Opportunity Scoring

  • Identify Problems or Features : List down the problems you aim to solve or the features you consider adding to your product.
  • Rate Importance : For each problem or feature, rate its importance to your customer base. This could be on a scale of 1 to 10, where 10 means extremely important.
  • Rate Satisfaction : Also rate how satisfied customers are with the current solutions to those problems or the existing features. Again, you might use a 1 to 10 scale, where 10 means extremely satisfied.
  • Calculate Opportunity Score : For each problem or feature, subtract the Satisfaction rating from the Importance rating. The result is your Opportunity Score.

opportunity score prioritization framework formula

5. Prioritize : The higher the Opportunity Score, the more valuable that feature or improvement is likely to be. You would generally prioritize the features or improvements with the highest Opportunity Scores.

9. Weighted Scoring Prioritization

weight scoring prioritization framework digram

Weighted Scoring Prioritization also known as the Weighted Scoring Model is a prioritization method that helps teams decide which projects or tasks to focus on by assigning weights and scores to various criteria that are important for the project’s success. 

When to use Weighted Scoring Prioritization

Weighted scoring provides a structured, custom, and quantitative approach to decision-making. It is particularly helpful for teams that want to prioritize items according to some custom indicators. In this sense teams can design their own weighted scoring method. By assigning weights to each criterion, organizations can align priorities with their own strategic goals and objectives, leading to more informed and consistent decision-making.

The weighted scoring method allows teams to take multiple factors into account and make more nuanced, data-driven decisions. It’s especially useful when there are conflicting viewpoints or when you’re dealing with complex projects that have multiple variables to consider. By giving everyone a clear, shared framework for decision-making, Weighted Scoring Prioritization can help align team members and keep everyone focused on the most impactful tasks.

How to do Weighted Scoring Prioritization

Here’s a simple way to do weighted scoring prioritization:

  • Identify Criteria : First, list out the product strategy criteria that are important for evaluating tasks or projects. These could include things like cost, impact, time-to-market, and technical feasibility.
  • Assign Weights : Give each criterion a weight based on its importance. Make sure all the weights add up to 100%. For instance, if cost is super important, you might give it a weight of 40%, and if time-to-market is less so, maybe it gets a 20% weight.
  • List Tasks or Projects : Create a list of tasks or projects you’re considering.
  • Score Each Task : For each task or project, give it a score between 1 and 10 for how well it meets each criterion. Often using a simple spreadsheet scorecard is useful for performing weighted scoring.
  • Calculate Weighted Scores : Multiply the scores by the weights for each criterion and add them up to get a total weighted score for each task or project.

weighted scoring prioritization framework formula

6. Rank and Prioritize : The tasks or projects with the highest total weighted scores should be your top priorities.

7. Review and Adjust : After you’ve executed the top-priority tasks, or if circumstances change (like a sudden drop in budget), revisit your weighted scores to see if the priorities still hold.

🛠️ 5 Scoring System Prioritization Tools

custom rake tasks

Finding the right prioritization technique for you

It might take a little experimentation to find the right prioritization technique for your particular scenario. So feel free to experiment with a few and see what feels right. Check out the prioritization frameworks and templates available in Parabol if you need further inspiration.

Jordan Husney

Jordan Husney

Jordan leads Parabol’s business development strategy and engineering practice. He was previously a Director at Undercurrent, where he advised C-Suite teams of Fortune 100 organizations on the future of work. Jordan has an engineering background, holding several patents in distributed systems and wireless technology. Jordan lives and works in Los Angeles, CA.

All your agile meetings in one place

Filter by Keywords

Product Management

What is the moscow prioritization method .

February 13, 2024

As far as mnemonics go, MoSCoW prioritization is one of the most effective acronyms in agile scrum software development. The name briefly summarizes a critical and oft-repeated practice of prioritizing items during product planning.

So, what is it? Why do you need it? How to use it? Let’s find out.

What is MoSCoW Prioritization?

Origins and history of moscow prioritization, applicability, communication, drawbacks of the moscow method, #1 must-have, #2 should-have, #3 could-have, #4 won’t-have (this time), when to use the moscow prioritization method, 1. create your product backlog, 2. add details to the product backlog, 3. set definitions for priority categories, 4. collaboratively decide the priorities, 5. set priorities, 6. validate feasibility.

Avatar of person using AI

MoSCoW prioritization is a powerful technique used in agile project management for setting priorities for tasks and initiatives. MoSCoW is an acronym that stands for 

  • Should-have

Each of these is a category of prioritization, which guides what the team will develop in upcoming sprints. MoSCoW prioritization can be applied to anything within the agile framework, including requirements, test use cases, user stories, bugs/defects, acceptance criteria, or tasks. 

Even beyond agile product development, the MoSCoW model can help prioritize work. Across industries, the MoSCoW method is included in operations management software to help project teams make better decisions.

When there are various other prioritization methods, including the most straightforward high-medium-low scale, why do we need another one? Let’s see how it originated and evolved.

The MoSCoW prioritization technique was developed by Dai Clegg of Oracle in 1994 to help his team sort project tasks into critical and non-critical ones in rapid application development (RAD) processes. He used it specifically in time-boxed projects to prioritize the project’s requirements.

Over the years, this method has become a staple in agile project management . It has been adopted and appreciated for its simplicity and direction on what a team needs to prioritize while running the entire project.

Benefits of the MoSCoW Prioritization Method

Despite being two decades old, the MoSCoW prioritization technique continues to be popular among teams using the ​​Dynamic Systems Development Method (DSDM). Here’s why.

The MoSCoW technique is ridiculously simple to understand. It helps clarify the options available in front of them to eliminate distractions. (It is not as simple to use, as there can be differences of opinion about what’s must-have and what’s should-have, for instance. We’ll get to that a bit later.) 

The categories provide clarity and reduce confusion. If it’s not a must-have, it’s not going in the next sprint. This ensures the team is stress-free and can focus on doing their best work.

The MoSCoW method helps managers and teams see what is important and needs immediate attention. By classifying a high-priority task as a “must-have,” managers can ensure they have everything they need to finish it. They can also discuss competing priorities as a team. 

The MoSCoW method is nearly universally applicable. It can be used to prioritize anything. For example, a team lead can mark ten developers as must-have and three more as could-have to let their superiors know how many people they need. 

Assigning priority levels in this method is a great starting point for conversations in project planning and sprint planning sessions. Defining something as must-have or won’t-have encourages people to agree or disagree specifically.

MoSCoW prioritization is very effective in preventing scope creep. The clear priorities ensure that any newly added feature goes through the prioritization process, helping project managers manage expectations.

Despite its benefits, the MoSCoW Prioritization method is not without its challenges. We’ll discuss them below.

Ambiguity : Must-haves and won’t-haves are easy to agree on. But should-haves and could-haves might be more ambiguous. While the framework lays out clear definitions, it can turn complex in practice. Moreover, teams often disagree on the definition of won’t-haves—are they left out of this sprint or the entire product?

Oversimplification : This method risks oversimplifying complex agile projects, where tasks cannot be easily categorized into discrete buckets and might not adequately address the interdependencies between tasks.

Subjectivity: Like all methods, MoSCoW prioritization is also subjective. The team has to come together to make task prioritization decisions. Its drawback is that it doesn’t do much to bring objectivity into the process.

Demanding : To prioritize a task in the MoSCoW framework, each must have detailed descriptions and context. For example, a ‘tagging’ feature in an agile project management tool might be a must-have for specific use cases while appearing non-critical. Product owners need to invest time and energy into definitions to categorize accurately.

Single-level : Within the four categories, there is no way to prioritize items further. This assumes equal priority for all must-have items, making it ineffective in planning.

Categories of the MoSCoW Prioritization Method

The MoSCoW prioritization method has four categories: must-have, should-have, could-have, and won’t-have.

“Must-have” tasks are critical items for the duration of the current sprint. ‘Must’ in the must-have category is sometimes defined as ‘minimum usable subset.’ This ensures that the iteration enables a minimum level of usability of the features.

A must-have feature typically is critical for the customers, a compliance requirement, or a safety/accessibility prerogative. Without these features, the product itself would be pointless to take to market.

Tasks considered to be “should-have” are second in priority. These tasks are important but not critical for the current timebox and can be deferred if necessary. 

A could-have feature is typically a minor bug fix or performance improvement, without which the product functions, even if not optimally. Teams often use some kind of temporary workaround to manage these items.

The third category is “could-have” tasks, i.e., desirable but unnecessary. The critical difference between should-have and could-have is that the former is important and can considerably impact product success (customer satisfaction, revenue, profitability, etc.), while the latter can be comfortably left out without much damage.

Teams prioritize could-have tasks only if they can be delivered without affecting the development team’s cost or effort. As the situation evolves, could-have items are often re-prioritized and developed.

“Won’t-have” tasks are recognized as not necessary for the project’s current scope. These tasks or features are of the lowest priority and omitted at the first sign of resistance. 

Won’t-have features have a very low impact on the project’s success. They neither harm outcomes nor create additional value. 

As helpful as this technique might be, it’s not universally effective. Here are the situations in which it works best.

MoSCoW prioritization is a great decision-making tool for several personal and professional scenarios. When decluttering your home, instead of asking if an item “sparks joy,” you can ask if it is a “must-have.”

For an agile project manager, it can be a lot more valuable than that. Here’s how.

Time : The primary determinant of MoSCoW analysis is time. The categorization is for the current sprint or timebox. It is highly effective for time-sensitive projects with tight deadlines.

Resources : What if you have a limited team of developers? Use MoSCoW as it helps maximize deliverables within available resources.

Product initiation : Early in the project, you must decide what to focus on first and what makes your minimum viable product (MVP). MoSCoW prioritization can be incredibly useful in guiding these conversations.

However, it’s important to note that MoSCoW may not be suitable for all projects, especially those with complex interdependencies or where all tasks are equally critical. 

How to Implement the MoSCoW Prioritization Method

Successful MoSCoW prioritization needs clear and effective processes. Here is an outline of a process and pointers on how to prioritize your work with any free project management software like ClickUp to get it right.

Before you prioritize tasks for the future release, it is essential to create a list of possibilities. Typically, this is outlined in the product backlog. Based on research and input from cross-functional teams, build a select few from the backlog.

On ClickUp, you can set these as tasks, milestones, features, defects, and more to facilitate better prioritization.

ClickUp Custom Task Types

Like we mentioned earlier, one of the non-negotiable factors of MoSCoW prioritization is adequate information about the task. Without the what, why, how, when, and who, it would be impossible to prioritize right. So, add all the information you can gather. This could be:

  • Description of the user story
  • Business impact
  • Engineering impact, such as time/effort estimate
  • Measures of success
  • Dependencies for other tasks

ClickUp tasks allow you to add sub-tasks, checklists, time estimates, users, tags, custom fields, and more. Use ClickUp’s hierarchy guide to organize information effectively.

What does must-have mean? What parameters should a task have to be considered a must-have? Does the entire team have to agree to categorize something as won’t-have?

The most commonly used methodologies are weighted scoring, the Kano model, or buy-a-feature. If that feels like another layer of frameworks/models, here are a few project prioritization templates you can use. 

Choose yours carefully. It is essential to set these definitions before getting into prioritizing tasks. This would help process standardization for proper priority management . Also, place an escalation matrix so that someone can make a decision in case of disagreements.

To ensure everyone understands and follows your priority definitions, document and publish them on ClickUp Docs . Collaborate on them to ensure the team agrees on them. You can also use ClickUp AI within Docs to summarize longer definitions for easy reference.

With all the foundational work done, it’s time to prioritize. Bring the team together to evaluate every option and set priorities.

Choose from any of ClickUp’s views to see the information that suits your needs. For instance, most agile teams typically use the Kanban board view to have all the uncategorized items in one column and then drag-and-drop them into their relevant priorities. You can also filter items on the Kanban board based on what you’d like to see.

ClickUp Kanban Board View

Discuss business requirements openly. Here are a few things to consider.

  • Set all tasks as won’t-have and then debate about why you must have it
  • For must-have requirements, ask, “Without this item, is the increment as good as canceled?”
  • If there is a workaround, even if it’s manual, don’t categorize it as a must-have
  • If a must-have has a dependency on anything other than another must-have, re-evaluate it

Remember that something you categorized as a could-have in the previous increment might become a must-have for the next. For example, while building the MVP, you might have categorized some items as could-have because they are not crucial for the current sprint. Once the MVP is launched, these features might become a must-have now.

Once you’ve agreed, set them up on your prioritization tools . ClickUp priorities give you four options: Urgent, high, normal, and low. You can make these MoSCoW priorities.

Alternatively, you can use the MoSCoW method with custom statuses . While setting task priorities on ClickUp, add a line or two in the comments about why you made the decision. This will help future prioritization sessions.

Custom statuses on ClickUp

Priorities are not just about what’s important, they’re equally about what can be built within that timebox. You don’t want to overcommit and underdeliver just because you think everything is a must-have.

Before committing to a plan, look for each team member’s current workload and capacity. Use the time estimates for each task to simulate capacity. Use the Workload view to ensure no one is over-stacked.

ClickUp Workload View for capacity planning

Prioritize The Right Things with ClickUp

Product teams must remain laser-focused on what’s good for the business and the customer. They need to eliminate distractions. So, project prioritization is a superpower. Good prioritization is as much a choice about what to do as it is about what not to. 

ClickUp’s project management tool is designed to enable exactly this. The hierarchy, task management, priorities, and custom statuses help teams effectively understand and prioritize their work.

The Workload views help ensure the prioritized tasks are deliverable, and the ClickUp Dashboards help keep the priorities on track.  Try ClickUp for free today and build the right thing.

Questions? Comments? Visit our Help Center for support.

Receive the latest WriteClick Newsletter updates.

Thanks for subscribing to our blog!

Please enter a valid email

  • Free training & 24-hour support
  • Serious about security & privacy
  • 99.99% uptime the last 12 months

Using MoSCoW in Agile to Prioritize Better

One of the key ideas in Agile is prioritization – a team needs to understand which features must be done and which can be left behind in order to produce the best result. However, the concept can be quite difficult to grasp when moving from a different project management approach. A prioritization technique called MoSCoW brings great help and clarity in such cases.

First used with Dynamic Systems Development Method, MoSCoW is a technique developed by Dai Clegg . The sole purpose of this prioritization approach is to help understand the importance that the stakeholders put on each of the features and requirements they pose. Thus being able to focus on the exact most important ones first and tacking on the rest only if the team has time left.

The technique requires to divide all of the features into four categories – Must, Should, Could and Won’t. Thus forming the MSCW acronym from which the name MoSCoW appears. In order to know which of the features are crucial, the team has to categorize them into the four groups.

Must have features are absolutely crucial to the project. Should have features are important to the project, but less urgent. Could have features are not as important as they are desirable and should only be completed if there is left over time. And lastly Won’t have features are either not important or not possible at the time and thus are not completed at all.

Once the team prioritizes the features, they create a clear action plan to move forward. First, they have to complete all of the Must have features. Once that is done they can move onto the Should haves. And only after all of the Should haves are done, the team can consider the Could haves. This way the focus is on the most important tasks right away.

What does this have to do with Agile ? It will help teams transition, prioritize and plan better.

Running a first Sprint or a first iteration can and most likely will be tough on any team. You don’t know what you are doing, you are still questioning the process and on top of that now you have to decide with which of the many tasks you will start first. Adding the MoSCoW technique in such cases will bring the team clarity and provide the ability to move forward.

Depending on the process, the team could even divide the backlog into 4 columns based on the four importance groups. This way being able to add the new features straight into the appropriate columns and compare them against each other to get a better sense of their priorities.

While more advanced teams will often see no point of such prioritization and be content with the traditional story point or priority column approach, this can be a great help for new Agile practitioners.

One thing to note though, is that while the MoSCoW technique is usually used only once or a couple of times during the project, for Agile teams this will be different. To accommodate the changing circumstances and planning the right work for each iteration, the technique should be used whenever the priorities switch. Since that could become quite burdensome, the teams should make a note of reviewing their priority columns every time they plan a new iteration.

Would you consider MoSCoW as part of your Agile routine?

Related Posts

7 tips for managing remote teams, iatf compliance for automotive industry, planning your project tasks: should you use scrum, kanban, or scrumban, seele – eylean customer story.

Type above and press Enter to search. Press Esc to cancel.


  1. Writing Custom Rake Tasks. Namespacing, Modules, and Meta Tasks

    custom rake tasks

  2. Ruby on Rails 5.x Custom Rake Tasks with Progress Interface

    custom rake tasks

  3. Rails: Rake Tasks

    custom rake tasks

  4. This tutorial will teach us how to create Rake tasks in Ruby

    custom rake tasks

  5. Let’s Rake It Up With Our Own RakeTasks in Ruby

    custom rake tasks

  6. Rails: Rake Tasks

    custom rake tasks


  1. Custom rake

  2. Learn how to rake plaster #interiordesign #plasterwork #architecture #plastercraft #luxuryhomes

  3. BEST & EASIEST Way to Rake Leaves #diy Part 2 🤣

  4. Rake Shutter Install

  5. Mastering Yard Work: Transform Your Overland Machete into a Rake

  6. Understanding Rake Tasks in Rails


  1. How to Write a Custom Rake Task

    This task finds all of the models in your application and creates CSV files for you to fill in seed data. First let's look at the task, then we'll break it down. lib/tasks/db.rake. namespace :db do. namespace :seed do. desc "Create CSV Files for Models". task :create_files => :environment do.

  2. Writing Custom Rake Tasks

    These default rake tasks are automatically bundled with your rails install, but you can also write custom rake commands to automate any task of your choosing. Creating Our Rake File. Your custom ...

  3. The Rails Command Line

    2.10 Custom Rake Tasks. Custom rake tasks have a .rake extension and are placed in Rails.root/lib/tasks. You can create these custom rake tasks with the bin/rails generate task command. desc "I am short, but comprehensive description for my cool task" task task_name: [:prerequisite_task, :another_task_we_depend_on] do # All your magic here ...

  4. Customizing Rails rake tasks

    To override a task, clear the current behavior and re-define it in Rakefile. The example below will override the default rake to invoke our custom task. # Rakefile # frozen_string_literal: true require_relative "config/application" Rails.application.load_tasks Rake::Task["default"].clear task :default do Rake::Task["custom:do_it"].invoke end.

  5. How to Write a Custom Rake Task

    A custom Rake task is a user-defined task that can be executed using the Rake command-line tool. Custom Rake tasks are written in Ruby and can be used to automate various tasks in a Ruby or Rails application, such as data manipulation, generating reports, or running tests.

  6. Ruby on Rails Tutorial: Understanding Rake and Task Automation

    To create custom Rake tasks, you'll need to work with the Rakefile. This file, usually located in your Rails application's root directory, is where you define and organize your tasks. If your application doesn't have a Rakefile, you can create one. 3.2. Defining Tasks. Defining a task in Rake is straightforward.

  7. #66 Custom Rake Tasks

    Rake is one of those tools that you don't realize how powerful it is until you start using it. In this episode you will learn how to create custom rake tasks and improve them by using rake features. desc "Pick a random user as the winner". task :winner => :environment do. puts "Winner: #{pick(User).name}" end.

  8. How to Use Rake to Manage Tasks in Rails

    To create a custom rake task, you need to create a file with the extension .rake inside the lib/tasks directory of your Rails application. The naming convention for Rake files is namespace_taskname.rake. Let's create a custom rake task to display a "Hello, Rails!" message. Create a new file called hello.rake inside the lib/tasks directory and ...

  9. Run Rake tasks

    Rake is a popular task runner for Ruby and Rails applications. For example, Rails provides the predefined Rake tasks for creating databases, running migrations, and performing tests. You can also create custom tasks to automate specific actions - run code analysis tools, backup databases, and so on.. RubyMine provides a convenient way to run, debug, and reload Rake tasks.

  10. How to create custom rake tasks with multiple arguments?

    You can easily produce a script that would be invoked with: thor config:load -i 5 -o "now". Use Rake's argument system, where you would pass arguments in the form. rails config:load[5,now] Build your own script, placed in bin. For example, bin/config can accept arbitrary arguments, and be invoked however you like.

  11. The Rails Command Line

    Custom rake tasks have a .rake extension and are placed in Rails.root/lib/tasks. You can create these custom rake tasks with the bin/rails generate task command. desc "I am short, but comprehensive description for my cool task" task task_name: [ :prerequisite_task , :another_task_we_depend_on ] do # All your magic here # Any valid Ruby code is ...

  12. Custom Rake Tasks

    1. As a rails developer, you are familiar with rake tasks. The rails frameworks ships with some already baked in rake tasks to make life easier for you such as rake db:migrate, rake db:rollback ...

  13. Running Tasks & Consoles · Fly Docs

    Custom Rake tasks. You can create Custom Rake Tasks to automate frequently used commands. As an example, add the following into lib/tasks/fly.rake to reduce the number of keystrokes it takes to launch a console: Wrap text Copy to clipboard

  14. The Rails Command Line

    2.10 Custom Rake Tasks. Custom rake tasks have a .rake extension and are placed in Rails.root/lib/tasks. desc "I am short, but comprehensive description for my cool task" task task_name: [:prerequisite_task, :another_task_we_depend_on] do # All your magic here # Any valid Ruby code is allowed end

  15. How to generate Rake task

    The generator way to create Rake tasks. As it turns out, there is a third approach - utilize this Rake generator: $ rails g task my_namespace my_task1 my_task2. It generates a scaffold for the new Rake tasks located within the lib/tasks/my_namespace.rake file: namespace :my_namespace do desc "TODO" task :my_task1 => :environment do end desc ...

  16. Rake tasks

    The following Rake tasks are available for use with GitLab: Back up, restore, and migrate GitLab instances between servers. Clean up unneeded items from GitLab instances. Tasks for GitLab contributors. Maintain Elasticsearch in a GitLab instance. General maintenance and self-check tasks. Geo -related maintenance.

  17. GitHub

    rake-dotnet is a library of custom tasks designed to (try to!) make your life as a build-automation author easier. When have you ever heard of a build-script called anything other than a script? msbuild and nant both try to get you to call them projects.

  18. 9 Prioritization Frameworks + Tools to Help You Use Them

    The simplest prioritization techniques are: Stack ranking - also called relative prioritization. Top-n prioritization. They are simple methods of evaluating and ordering a set of items in a list from best to worst. This can be based on value, impact, or any other metric that is important to the task at hand. 1.

  19. What is the MoSCoW Prioritization Method?

    MoSCoW prioritization is a powerful technique used in agile project management for setting priorities for tasks and initiatives. MoSCoW is an acronym that stands for. Must-have. Should-have. Could-have. Won't-have. Each of these is a category of prioritization, which guides what the team will develop in upcoming sprints.

  20. Using MoSCoW in Agile to Prioritize Better

    A prioritization technique called MoSCoW brings great help and clarity in such cases. First used with Dynamic Systems Development Method, MoSCoW is a technique developed by Dai Clegg. The sole purpose of this prioritization approach is to help understand the importance that the stakeholders put on each of the features and requirements they pose.