My 2 cents on Areas and Iterations in Team Foundation Server


There’s not a huge amount of best practice info out there regarding areas and iterations.  One interesting place to look at is a blog post that describes how the Visual Studio team uses them (http://blogs.msdn.com/ericlee/archive/2006/08/09/when-to-use-team-projects.aspx)


 


So here are my 2 cents (you can see how much that’s worth these days!) on Areas and Iterations. 


 


Areas


To me, areas are ways of tagging or organizing objects within a Team Project.  Typically, areas are used to define either logical, physical, or functional boundaries.  It’s a way to slice and dice a normally large project effort into more manageable, reportable, and easily identifiable pieces. 


 


For example, let’s say we have a tiered web application managed in a single TFS project called “MySite”.  There are 3 major components to this app:  the web site, a web service, and a database.  If this is a decent-sized application, you might have 1,200 tasks in the system for this project.  But how do you know to which component a given task belongs?  What if I only wanted to see tasks for the web service piece?  Areas are a convenient way to handle this.  Set up areas like this:


 


MySite


   \Web Site


   \Web Service


   \Database


 


Now you can specify an area of assignment for each task (work item), making it easy to effectively filter what you want to look at/work on.  You can use areas in both queries and reports as well.


 


You may optionally want to further dissect those major components to be even more specific:


 


MySite


   \Web Site


      \Layout & Design


      \Navigation


      \Pages


         \Contact Us


         \Homepage


         \Links


   \Web Service


      \Performance


      \Security


   \Database


      \Performance


      \Security


      \Schema


 


One final aspect of Areas to consider is security.  You can set security options on each Area node which can dictate not only who can change the areas, but also who can view or edit work items in a particular Area.


 


Iterations


So if you think of Areas as slicing and dicing by “space”, think of Iterations as slicing and dicing by “time”.  Iterations are like “phases” of a lifecycle, which can dissect the timeline of a project effort into more manageable time-based pieces. 


 


So going back to the “MySite” example, say the project management team wants to split the entire project into 3 cycles, Phase 1, Phase 2, and Phase 3.  Thus, your Iterations can mirror that:


 


\MySite


   \Phase 1


   \Phase 2


   \Phase 3


 


These Iterations can be phases within the entire life of a project, or phases within a given release of a project.  So if “MySite” is going to have multiple releases over time, my Iterations might look lik this


 


\MySite


   \Release 1.0


      \Phase 1


      \Phase 2


      \Phase 3


   \Release 2.0


      \Phase 1


      \Phase 2


      \Phase 3


 


Now you have categorization options for both space and time (now if only we had a continuum..) for your project, allowing you to assign your tasks or other work items not only to the appropriate functional area (Area), but also to the phase (time cycle) of the project.

Comments (31)

  1. Leslei says:

    “allowing you to assign your tasks or other work items not only to the appropriate functional area (Area), but also to the phase (time cycle) of the project.”

    How! I’ve been searching for hours and can find no instructions ‘HOW to assign work items to areas and iterations’.

    As an alternative, if I was using some sort of RUP like process I might want to assign disciplines to areas (Business, Requirements, etc) and phases to iterations (Inception, Elaboration, Construction, Transition).

  2. slange says:

    Leslei –

    You set the area and iteration in the Area Path and Iteration Path fields.

    In this example, the Task work item type in the MSF for Agile process template displays the Area and Iteration fields in the Classification.

    See this image:

    http://socalteamsystem.com/images/SettingAandIs.png

    Once you set this, you can filter reports based on the area or the iteration to report on a particular cross-section of your project’s work items.  

    Regarding your RUP-like idea, that should be just fine.  However, by default work items can also leverage a built-in Discipline field (you’ll find it in the same image above, at the top-right of the dialog), which can be customized to represent the disciplines of your choice.  And you definitely can map iterations to phases if you want (or it you want further granularity, you can create a custom "Phase" field).

  3. Sam says:

    so how and where do I create these customized sub-areas? All I can see is the name of my team project…

  4. slange says:

    You can edit your areas (ie create sub-areas) and iterations (ie create multiple/sub-iterations) from the Team Explorer panel.

    In Team Explorer, right-click on your project and select Team Project Settings -> Areas and Iterations.  This will bring up the Areas and Iterations dialog where you can add/edit/delete areas and iterations for this project.

    (Just note that areas and iterations are cached on the client side, so once you make changes here, you’ll want to click the Refresh button at the top of the Team Explorer panel to be able to use your changes immediately.)

  5. Marc T says:

    Looks like yours is the most informative blog entry on Areas and Iterations.  Hopefully you can help me.

    It seems wrong that Areas and Iterations sort alphabetically in the Work Item drop-downs.  I initially spent time sorting them how I wanted them in the A&I dialog, only to find them all scrambled up when I actually tried to apply them in a WI.

    So what good does ordering them in the dialog do?  And is there a way to get that ordering to be used in the drop-downs for Work Items?

    Any insight you could provide would be appreciated!

  6. slange says:

    I agree that it’s a pesky, annoying thing that areas & iterations are listed alphabetically.  I can’t even give you a great, eye-opening explanation as to why it’s this way.  I would expect this to be updated/fixed at some point.  

    As a workaround, I’d suggest prefixing your areas & iterations with numbers so they order the way you want.  Not elegant, but it’s doable.

    I’ll update the post when I hear that this is getting updated.

  7. Ketan Patel says:

    Thank you for very nice explanation about Area and Iteration. Really helpful!

  8. Eralper says:

    Hi slange,

    I can not see the image you have left its link on your comment.

    By the way, I found your article very useful, thanks,

    Eralper

  9. slange says:

    You’re right, that link in the comment is gone.  That site was taken down a while back and I couldn’t get to the content prior.

    The was basically a screenshot showing a work item dialog with the Area and Iteration fields highlighted.

  10. Coolweb says:

    Great post, it’s exactly what I search. There are no realy good samples into the tfs’s doc.

    Thanks!

  11. Adil Hussain says:

    That was the best description regarding Areas and Iterations, I found.

    Thanks

  12. slange says:

    You’re very welcome.. I’m glad to see that this post is helpful over two years after it was first posted!

  13. Tim Heap says:

    Can you let me know how to add mulitple levels ?

    I need to add this :

    Request

    RequestPriceCheck

    RequestBook

    Response

    ResponseFilldata

    ResponseDoSomethingElse.

    I can add the Request nodes, but I can’t work out how to add the Response element ?

  14. slange says:

    Hi Tim,

    You have to have a single root Area node, so my suggestion would be to do something like:

    MyApplication

    MyApplicationRequest

    MyApplicationRequestPriceCheck

    MyApplicationRequestBook

    MyApplicationResponse

    MyApplicationResponseFilldata

    MyApplicationResponseDoSomethingElse

    Does that make sense?

  15. Ananya says:

    Your post is still helpful ofcourse,but can you tell if there has been any changes to the Iteration Path in TFS2008, is there any way of sorting the values non-alphabetically yet?

  16. Michael says:

    FYI – The issue with Areas and Iterations (sorting) does not seem to occur with Team Explorer 2008 (sp1 applied).

    BTW – This post has been very informative on the issue of Areas and Iterations. Thanks!

  17. Raj says:

    Helpful post and I can see how it could be helpful to our group as we have many small projects which dont all necessarily need a separate Team Project.

    But what I am not able to figure out is how do I customize the reports to see information only assigned to a particular area. (I am using the Scrum for TFS template – and it has an option for filtering by iteration, but not by area). Are there any MS supplied templates that will allow me to view my reports by area and iteration.

    Thanks again for your helpful post.

    Denver Area TFS user

  18. levidos says:

    Thank you very much slange for this very useful post.

  19. Flyingoat says:

    So helpful post!! I learned a lot from this "simple" post.

    Thank you very much, slange!

    By the way, happy Thinksgiving!

  20. luis says:

    how do you add multiple iteration dates at once? our iteration structure is as follows:

    iteration

          2010-01-01

          2010-02-01

          2010-03-01

          2010-04-01

          2010-05-01

    can I do this directly in the TFS database?

  21. slange says:

    Luis,

    Are you asking how you can add iterations in bulk?  I would definitely not recommend going directly into the TFS database.  

    One option would be to use the SDK.  

    You’ll want to do so using the ICommonStructureService.CreateNode method in the TFS SDK: http://msdn.microsoft.com/en-us/library/microsoft.teamfoundation.server.icommonstructureservice.createnode.aspx

    This post should help you get started:  http://teamfoundation.blogspot.com/2008/09/how-to-deal-with-areas-or-iterations.html

    However, depending on how many iterations you want to add, it may just be more time-efficient to enter them manually.

    Hope this helps!

  22. obautista says:

    I hope you can help me.  We have set up permissions on Areas and Iterations within each Team Project.  We have multiple levels of Areas and Iterations.  For example, we have a Parent Iteration, a Child, and a Sub-Child.  When I assign permissions to Jane Doe to Parent Iteration she does not get access to Child and Sub-Child.  Is this correct?  I was thinking assigning permissions to Parent should give her permissions to Parent and everything underneath (children).

    Thanks for any help you can provide

  23. rnysuen says:

    Hi,

    Let say I have the following Iteration tree:

    MySite

       Release 1

         Phase 1 – Aug 1-15, 2010

         Phase 2 – Aug 16 – 30, 2010

         Phase 3 – Sept 1 – 15, 2010

         Phase 4 – Sept 16 – 30, 2010

     Release 2

       Phase 1 – Oct 1 – 15, 2010

       Phase 2 – Oct 16 – 31, 2010

    And some urgent bug from customer and we need a hotfix for Release 1 while Release 2 development is on going. How should I capture and plan for the hotfix effort? Should I

    i) create MySiteRelease 1Phase 5 – Oct 16 – 31, 2010 so that it'll have the same time frame as MySiteRelease 2Phase 2 – Oct 16 – 31, 2010

    ii) include work items in Release 2 -> Sprint 2 – Oct 16 – 31, 2010 (will have to distinguish the work items somehow?)

    Thanks,

  24. Dave says:

    Seems to me that areas are redundant with the source project organization and iterations redundant with release versions. How are areas and iterations supposed to work in conjunctions with the source tree organization for branching? Thanks!

  25. slange says:

    @Dave – they can be redundant if you want them to be.  However, the souce tree structure doesn't always represent the functional hierarchy or structure of a project.  Letting areas be an independent field provides more flexibility when working with work items.  

    The main intersection (IMHO) between the source control structure is with Iterations.  Yes, you can replicate Iterations with your releases/branches in source control.  In Iterations, you can even further dissect releases into sprints, etc. to better help track progress for a given release.  

    Work items are associated with code in two ways:  by linking (work item to changeset or versioned item), or by build (completed work items are associated with a build).   Because of these other manners to align the two types of artifacts, you are free to use Areas & Iterations as you see fit – either closely mirroring the source tree, or in a more logical hierarchy that makes sense for your reports, and your business.

    Hope this helps a little..

  26. Thanks, nice over view of areas and iterations. Now to go make my own 🙂

  27. Baskar says:

    Awesome explanation !

    Thank you ..

  28. Nidhi says:

    Nice 1… excellent discription….

    nowhere i found this much good explanation about area and iteration….

  29. Anil Bhide says:

    Your post exactly explains the usage of Area and Iterations – exactly what I was searching for

  30. Lionel says:

    Hi,

    How do we assign a given team member (resource) to an area so as he/she will see only tasks and bugs linked to that area ?

  31. slange says:

    @Lionel – you can either use some security settings to filter what that person can see, or you can take advantage of the "team" concept in TFS to let team resource (individual or several people) have their own backlogs, queries, dashboards, etc.

    More here: msdn.microsoft.com/…/multiple-teams