The Beauty of NOT Doing Agile Development...
The beauty of NOT doing agile development... is that failure comes as a complete surprise, instead of being preceeded by months of worry!
Often in traditional development projects, everything seems to be going so well, right up to 80% completion or perhaps even later.
Then things start getting harder...
Things start looking less and less likely to meet the planned end date. Until eventually you concede that you can't hit the date because it's just too late to do anything much about it...
In agile development, there are a few key principles that highlight such issues early. Distressing though this is, the issues are highlighted whilst there's still time to do something about it.
One reason why this is a common problem in traditional software development projects is because the testing is one big lump all at the end. Consequently it's very hard to gauge quality until late in the day and it's very hard to judge how complete the product really is, because you don't know how many more bugs there are to find.
In agile development, testing is integrated throughout the lifecycle, features are completed one by one, and for each feature "done" really means "DONE!". In addition the product owner or user representative is actively involved in order to see the product frequently and steer its development every step of the way.
All of these principles go a very long way to ensuring clear visibility of progress, and providing a clear and unambiguous measure of the product's completeness on a very regular basis.
But in addition to this, the Scrum agile development approach also offers a daily burndown chart that beats any traditional status report hands down!
The daily burndown chart is a simple tool. But it's also a very powerful one. Take all the tasks or features to be delivered in a particular iteration, or Sprint in Scrum. Put down the estimated time to complete. Update the time to complete each task on a daily basis. Be honest about what effort you believe is required to complete each task (that's complete each task), regardless of how long has been spent to date and regardless of what was estimated in the first place. Your goal, quite simply, is for the team to reach zero by the end of the Sprint/iteration.
The beauty of this approach is that it's a numeric view of progress and can therefore be plotted visually on a graph. Plot the original estimates for the Sprint on one line, and the current estimates to complete on another line. When the current line tracks below the original line, you're on track. When it tracks higher, you're running behind. Simple as that!
I've also found it useful to annotate the graph with 'speech bubbles' describing key events along the way. This is a useful way to record significant events so they're not forgotten by the time of the Sprint review, and it's also useful to communicate important things to management and stakeholders instead of producing a separate status report.
Using a burndown chart, when you spend one day on a task and discover a whole load of problems or effort you hadn't anticipated or estimated for, the estimate to complete jumps up, creating an all-too-visual indicator of the problem for all to see.
When this happens early in a project, and/or on a large scale, believe me it's pretty scary! Suddenly you're not so sure about all this new-found visibility. It seemed like such a good idea at the time, but can you really stick that burndown chart of the wall?!
But you do gain one big advantage. One enourmous advantage, actually. You get to see where the project really is, every day, and in all its techni-colour glory! And whenever you hit problems in a project, you actually see them, and see them when you might just have time to do something about it.
See also:
10 Key Principles of Agile Software Development
Testing is integrated throughout the lifecycle
Features are completed one by one
"done" really means "DONE!"
Often in traditional development projects, everything seems to be going so well, right up to 80% completion or perhaps even later.
Then things start getting harder...
Things start looking less and less likely to meet the planned end date. Until eventually you concede that you can't hit the date because it's just too late to do anything much about it...
In agile development, there are a few key principles that highlight such issues early. Distressing though this is, the issues are highlighted whilst there's still time to do something about it.
One reason why this is a common problem in traditional software development projects is because the testing is one big lump all at the end. Consequently it's very hard to gauge quality until late in the day and it's very hard to judge how complete the product really is, because you don't know how many more bugs there are to find.
In agile development, testing is integrated throughout the lifecycle, features are completed one by one, and for each feature "done" really means "DONE!". In addition the product owner or user representative is actively involved in order to see the product frequently and steer its development every step of the way.
All of these principles go a very long way to ensuring clear visibility of progress, and providing a clear and unambiguous measure of the product's completeness on a very regular basis.
But in addition to this, the Scrum agile development approach also offers a daily burndown chart that beats any traditional status report hands down!
The daily burndown chart is a simple tool. But it's also a very powerful one. Take all the tasks or features to be delivered in a particular iteration, or Sprint in Scrum. Put down the estimated time to complete. Update the time to complete each task on a daily basis. Be honest about what effort you believe is required to complete each task (that's complete each task), regardless of how long has been spent to date and regardless of what was estimated in the first place. Your goal, quite simply, is for the team to reach zero by the end of the Sprint/iteration.
The beauty of this approach is that it's a numeric view of progress and can therefore be plotted visually on a graph. Plot the original estimates for the Sprint on one line, and the current estimates to complete on another line. When the current line tracks below the original line, you're on track. When it tracks higher, you're running behind. Simple as that!
I've also found it useful to annotate the graph with 'speech bubbles' describing key events along the way. This is a useful way to record significant events so they're not forgotten by the time of the Sprint review, and it's also useful to communicate important things to management and stakeholders instead of producing a separate status report.
Using a burndown chart, when you spend one day on a task and discover a whole load of problems or effort you hadn't anticipated or estimated for, the estimate to complete jumps up, creating an all-too-visual indicator of the problem for all to see.
When this happens early in a project, and/or on a large scale, believe me it's pretty scary! Suddenly you're not so sure about all this new-found visibility. It seemed like such a good idea at the time, but can you really stick that burndown chart of the wall?!
But you do gain one big advantage. One enourmous advantage, actually. You get to see where the project really is, every day, and in all its techni-colour glory! And whenever you hit problems in a project, you actually see them, and see them when you might just have time to do something about it.
See also:
10 Key Principles of Agile Software Development
Testing is integrated throughout the lifecycle
Features are completed one by one
"done" really means "DONE!"
8 May 2007 15:21
This is a beautiful post.
I am normally an XP proponent, but your description of the value of Scrum's burndown chart is very persuasive.
8 May 2007 20:43
This is fine -- there are a lot of useful concepts in agile development -- but the "non-agile" approach that you're contrasting is a silly straw man here.
If you're in a "non-agile" project that's going to be in trouble, you'll know early on, as well. Remember, your entire development process has been planned (with completion dates for each task), and all of the riskiest tasks are first and/or already have proof-of-concept code completed, if they were risky enough that estimation was impossible.
Every time a task slips or needs to be re-estimated (i.e., the developer digs in and finds a snarl of unconsidered complexities...), the project plan is updated, and either the complete date is pushed out or (if you have an immovable rollout date) you have to start dropping features from the plan.
Like with an agile project, a big goal from the start is to get something that works (even though you're missing 90% of the planned features) and keep it that way -- otherwise how can developers test their code? You normally also schedule integration builds at increasing frequency, and early test plan development is also important -- otherwise developers don't have any good way to mark a task "complete". (And yes, even though external QA is usually not involved until later on, developer testing is part of the process throughout).
I'm not anti-agile development by a long shot. The planning & architecture work at the beginning of a traditional project is difficult and subject to error at every turn (not least the client's error in what they thought they wanted). Unfortunately, clients have a nasty habit of saying "here's what we want... what will it cost?"
And sometimes it happens that after the proof-of-concepts have been tried and the plan written up, some essential-for-phase-three feature actually looks so nightmarish (or simply impossible) that they need to rethink the entire project.
9 May 2007 02:10
I don't understand why Scrum thinks it owns the concept of burning down work. In XP, we stack the cards left to do in piles by iteration, put a pencil where the deadline is, then everything beyond the pencil is out. If something beyond the pencil is too important to leave out, then either swap it with something before the pencil, or move the pencil back!
I find this demonstration quite effective, even if it isn't a graph. We could easily make it a graph, if that would help, but there's something about having to move cards around that makes the notion of priority and "this is all we can do" really sink in.
11 May 2007 09:31
I remember that the second edition of "XP Explained" contains a practice called "Informative Workspace". I don't remember wether burn charts are mentioned specifically, but they are certainly quite a good tool to implement that practice.
5 October 2007 08:24
I guess informative workspace is about making everything important visible. If making sure the team meets the deadline is important, it should be visualized whether in the form of a burndown or stacked cards and the pensil.