| 
    What is prioritized?
    Prioritization should happen for work items, such as enhancement requests, requirements, defects, project tasks,
    and so on. The work items list provides one place for prioritizing work. Prioritizing units of work that are too small
    may lead to analysis-paralysis.
 
    Who prioritizes?
    Prioritization is done by the extended team. Here are some examples on how different team members contribute to the
    prioritization:
 
    
        Analysts collaborate with stakeholders to establish the initial priorities for work items to implement, such
        as features, use cases, and scenarios.
    
        Architects collaborate with stakeholders and the development team to identify the architecturally significant
        use cases and scenarios, and re-prioritize these so that the team understands what needs to be done to drive down
        technical risk, and to make progress on evolving the product in a technically sensible fashion.
    
        Developers and testers help define (but do not decide) the priorities of defects relative to
        achieving iteration objectives.
    
        Project managers facilitate (but do not decide), driving convergence on what the team should focus on when planning
        a project, planning an iteration, and managing an iteration. They do this in order to ensure smooth execution, and
        that the perspectives of all team members are properly heard. When the team cannot gain consensus in a reasonable
        time, the project manager has final say on the priority of work items that are too small to warrant the attention
        of the paying stakeholders.
    
        stakeholders that pay for the application have the final say on what capabilities to prioritize.
     
    When do you prioritize?
    When you enter a new work item in the Work Items List, give it an initial priority. Priorities are always
    changing. The sections below describe what re-prioritization is done when you are planning a project, planning an
    iteration, or managing an iteration.
 
    Prioritizing when planning a project
    During project planning, prioritize the key features, use cases, and scenarios. Also, potentially assign them
    to iterations as a part of laying out the project plan, by defining at a high level what should be done when.
    These priorities will be revised later on as iterations are planned.
 
    When starting a project where an existing application will be enhanced, a Work Items List may exist from past
    projects and usage of the application. If this is the case, go through the Work Items List to survey and
    re-prioritize existing work items, so that the team understands what to focus on.
 
    Prioritizing when planning an iteration
    When planning what to deliver for an iteration, the team needs to balance what delivers immediate value to the
    stakeholders with what risks need to be mitigated.The chosen balance should be reflected in the iteration objectives,
    which then drive further prioritization and assignments of work items to the next iteration. This exercise should be
    done by the entire team to reflect all of the key perspectives, such as technical ("doing task A before task B saves
    you time"), managerial ("we do not have anybody that knows that legacy application until next iteration", or business
    ("this scenario is more important than that scenario").
 
    Prioritizing when managing an iteration
    The recommendation is not to expand or change the scope of an iteration, because this will almost certainly lead
    to scope creep, as well as potential confusion among the team on what to work on. As new features and enhancements are
    requested, capture them in the Work Items List, but do not assign them to the current iteration.
 
    During an iteration, you are developing and testing code. As you develop solution increments, you will find defects. In
    most cases, you will directly fix trivial defects as you find them during development. Examples of such defects
    are the many problems you find as you implement your code (for example, using a test-driven development approach or
    doing your regular unit tests). In other cases, the defect should be captured as a work item. This allows it to be
    prioritized, and potentially developed by somebody else or at a different time. If a defect needs to be addressed to
    provide an iteration build of reasonable quality and that aligns with the iteration objectives, the
    defect should be fixed during the current iteration. Note that this is not a creep or change of scope,
    since it merely indicates that something needs to be fixed to deliver what the team already committed to.
 
    How do you prioritize?
    Prioritizing is the difficult balancing of frequently competing priorities. For more information on the art of
    prioritizing, see for example [COH05].
 |