TrainingConferencesAbout UsContact UsAdvertiseSQE.comRSS Feed

StickyMinds.com: brain food for building better software

Log In
 Clarify Your Search Criteria

Tips on Using Our Search Feature(s)
 
StickyMinds.com Home
ResourcesTopicsCommunityPowerPassBlogs
Home  >  Detail: Critical Chain Scheduling for Software Projects



A StickyMinds.com Original
Article Picture
Critical Chain Scheduling for Software Projects

By Clarke Ching

Send This Content to a FriendGet a Short Link to This ContentPrint This ContentSee User Comments About This Content

Summary: In 1997 Eliyahu Goldratt published a business novel titled Critical Chain in which he introduced a new way of scheduling and executing projects similar to the more familiar Critical Path method. Goldratt's version removes many of the estimating games that go on between managers and their staff. This results in projects that typically deliver in about 75 percent of the normal time. In this week's column, Clarke Ching demonstrates some of the ideas from Critical Chain and will show how to use it easily within agile projects.


Infosys
In practice the Critical Chain technique has been used in multi-billion-dollar and multi-year projects, but I'll demonstrate the ideas using an extremely simplified example of a small project with just one developer and one project manager. The project manager and the developer have broken down the featureset into six tasks—A, B, C, D, E, and F—which can be performed sequentially.

With the tasks identified, the project manager knows how long the project should take, so she asks the developer to estimate how long it will take to complete each task. The developer looks at task A and says, "I could probably do that in one to three days, but that's only a guess. With all the interruptions that go on around here it could easily take me four to seven days. Heck, it could even take as much as eight days, maybe even more." He thinks for a bit and says, "Eight days." The developer knows that although the project manager has asked for an "estimate," which is a range, she really wants a commitment in the form of a single date. After all, her project management software only takes a single date.

Let's say, for the sake of this simple example, that the developer estimates that the tasks can be completed in about 8 days. The plan will then look like this:

AAAAAAAABBBBBBBBCCCCCCCCDDDDDDDDEEEEEEEEFFFFFFFF
The total duration is 6 x 8 = 48 days.

It's quite likely that the some project manager will automatically chop a bit of time off the high estimates but also keep some estimates as they are—as an informal contingency. These project managers won't tell their bosses; otherwise, they'd be accused of "padding." Let's just assume this doesn't happen.

Let’s see how our project manager would prepare the equivalent Critical Chain plan. Having been given eight days as the "estimate," she asks the developer if eight days is a commitment-level estimate (i.e., a date to which, most of the time, the developer could commit). If not, she would ask the developer to re-estimate. Then she would tell the developer--and this is extremely important--that she only needs this estimate for her planning and that she doesn't care if the developer takes longer than eight days or less. She even promises that if she ever penalizes the developer (even if it's just with a dirty look) for taking more or less than eight days that she'll buy the entire team lunch for a week. (Maybe she even records a video of herself making that promise.) But then she does something that will scare the developer the very first time he sees it happen: She chops all of the commitment-level estimates in half, and she takes the bits she's chopped off, puts them on the end of the project plan, and calls this time a buffer.

So the project plan now looks like this:

AAAABBBBCCCCDDDDEEEEFFFFxxxxxxxxxxxxxxxxxxxxxxxx (where x is buffer time).
The duration is still 48 days.

The developer will probably say something like, "You're kidding me, right? I've only got half the time I promised. That sucks."

The project manager reminds the developer of the promise she made--about buying lunch if she ever penalizes anyone for taking more or less time than the eight days, or even the four days. She then says, "Besides, I'm going to make it easier for you to finish each of these tasks quickly by protecting you from all the interruptions you get. In fact, I'm going to fight to make sure that you only ever work on one task at a time."

Hopefully, the developer will think that with many of the interruptions gone, four days isn't an aggressive deadline after all. He asks what the buffer is for. The project manager says that since some tasks are going to take longer than the four days she has in her plan, she will use the buffer time to absorb the extra time. If they finish sooner than expected, then she'll add the time gained back into the buffer. So, if task A takes six days, task B takes five days, and task C takes four days, then the buffer will have three days eaten out of it.

Note that there are some rules during execution that are vitally important:
  • The developer is asked always to single task, except during emergencies--that is, he's asked to work on A, then B, then C, and not to switch between them. Multitasking dilutes the effort applied to each task. Try to complete three tasks by multitasking, each of which should take about four days to complete, and you'll notice how each task suddenly takes twelve days or more.
  • The project manager protects the developer from being asked to multitask.
  • The project manager and developer check in daily--just like they do in a normal agile daily meeting.
I add the following fourth question to Scrum's normal three: How many days do you have left on the first task you are currently working on? This is different from the question, What percentage of the task have you completed? This new question reinforces the single-tasking rule, plus it gives you real-time information. Don't be surprised if the estimate goes up and down, though, as the developer learns more about the task. High estimates often reflect uncertainty, which disappears as you learn by doing a task. On the second day of working on the task, the estimate may well drop down from eight days to three, but the estimate may equally go up as well. That's why you have the buffer there--to protect you. Estimates are guesses after all.

The project manager must always keep her promise that she won't penalize the developer when estimates go up or down, or take more or less time than originally estimated. Estimates are guesses, not commitments.

Finally, given all these behavior changes, you'll find that the buffer is too long. You can chop it in half as well, and you'll still have a reliable project plan. There's loads of good statistical reasoning why you can do it, but take a look at the plan above where the buffer was half of the total duration and ask yourself if you really need it. If you think you do, then keep it, but plan to finish early.

So here's our new plan, with the buffer taking only one-third of the duration:

AAAABBBBCCCCDDDDEEEEFFFFxxxxxxxxxxxx (where x is buffer time).
The duration is now 36 days.

Given the behavior changes--especially the enforced single tasking--you've now got a project that is far more likely to finish on time even though it's only 75 percent of the original duration. You can now do twelve months’ worth of projects in nine months. That's a whopping 33 percent increase in capacity--for free. The biggest but least obvious benefit is that using this approach builds trust between managers and staff by removing all the unhealthy game playing that goes on with estimates.

You can scale this process to fit huge projects or for an iterative process. Let's say you are running a Scrum project where you promise to deliver a few features off the top of your backlog in, say, three weeks. Your resulting plan will have two weeks' worth of aggressive (and halved) tasks and a single week of buffer. So you add just enough features to fit in that time box. You'll find that each iteration will finish sometime during the third week. This approach means you can make more reliable promises, and, believe it or not, you can deliver more work in the same period of time.

Further Reading:


About the Author
Clarke Ching is a New Zealander living in Scotland. In addition to being an independent consultant and a regular columnist on StickyMinds.com, he's a passionate advocate of agile software development and a chairman of the AgileScotland special interest group, which meets monthly in Edinburgh. Clarke currently is writing a book titled Rolling Rocks Downhill, in which he explains why working with software projects often feels like pushing rocks uphill. He also demonstrates how to use lean, quality, and agile techniques to make your projects more productive and predictable. Read more about his book and other articles and listen to his podcasts at www.clarkeching.com.

Back to Top
 

StickyMinds.com Weekly Column From 8/11/2008 

Member Comments
Add Your CommentExpand Comments
 
Comment:    
by Robert Vanderwall 8/19/2008

Clarke,
I've been intrigued by this notion for quite a while. When you say it's been used by large house-hold name companies, can you name a few? I'd like to promote this but would like to have some real names as examples.

Thanks again for an interesting article.

Author's Response:
8/20/2008    
Hi Robert,

Thanks for your comment. Here're a few household names and links.

The F-22 Raptor (the United States’ air supremacy fighter) http://www.goldratt.com/f22.htm

Boeing 787 Dreamliner - http://www.stottlerhenke.com/news/pr_aurora_boeing.htm


More on boeing: http://64.233.183.104/search?q=cache:mpZ2k6170RwJ:www.boeing.com/news/frontiers/archive/2008/april/cover.pdf+boeing+critical+chain+holt&hl=en&ct=clnk&cd=4&gl=uk&client=firefox-a

IBM: Implementation of the critical chain project management methodology in IBM's S/390 software development environment - http://dspace.mit.edu/handle/1721.1/9766

Intel - http://www.goldratt.com/jun01.htm (part way down the page)

The US Marines: http://criticalchain.co.uk/v/marinesvideo.html

The US NAvy: http://www.tocthinkers.com/2008/01/qa-with-larry-5.html





 
 
Comment:    
by Clarke Ching 8/17/2008

My wife has asked me to point out that I am far better looking in real life than my picture suggests :)

She thinks the photo reflects badly on her ...

Clarke

 
 
Comment:    
by Paula McSorley 8/12/2008

This article seems to assume that all development estimates are inflated. What I have typically experienced is that the development estimates are way below what they actually need, and end up going over schedule - thus causing late deliveries. This movement of 1/2 of estimated time to the end as a buffer doesn't seem to be a solution to this paradigm.

Author's Response:
8/17/2008    
Hi Paula. Thanks for your comment. One of my favourite pubs in Ireland shares your surname!

> This article seems to assume that all development estimates are inflated. What I have typically experienced is that the development estimates are way below what they actually need, and end up going over schedule - thus causing late deliveries. This movement of 1/2 of estimated time to the end as a buffer doesn't seem to be a solution to this paradigm.

That's a very good point. It is very, very common in traditional projects for developers to take longer than their estimates. Very common.

Rather than me writing a long response, how about if you take a look at the two links in the further reading section, above? Both are written by Frank Patrick, a good friend of mine. Frank describes how it is that most development estimates (i.e. commitments) are both inflated AND run late.

An example might help though: Imagine that you typically working on (say) 3 - 5 tasks at the same time and you're asked to give an estimate of how long it will take to finish task X. You think, "well, it will probably take me 2-4 days to complete this, if I could do it uninterrupted, but since I'm working on these other tasks, it'll probably take me 2 - 4 weeks", so you commit to three weeks. Your PM then, rather brutally, chops off a week leaving your two weeks - having been a developer in the past she knows padding when she sees it. So you have two weeks to do your task and, although you protest, it still feels safe; after all, you'll probably finish it in 3 days. So you keep working on the other 3 or 4 or 5 tasks you're working on until early in the 2nd week, at which point you still feel like you'll mostly be okay. Maybe, as you work on the task you find a few things wrong and maybe you get called away to work on a few "production problems" or maybe you switch to work on the other tasks since their PMs want to see progress on them. The end result is that near the end of your two weeks you are struggling to complete the task on time. Perhaps you finish on time, perhaps a little late. Just cross your fingers that you've not grossly underestimated the initial 2-4 day estimate otherwise you'll definitely run late!

The point is though, that despite feeling like a safe estimate at the start, by the end, it looks like the original two week estimate was an underestimate.

This stuff really works, Paul, but you are right to be cynical. Take a look at Frank's two articles. The key is to reduce multi-tasking as much as possible, to get daily updates and to make sure that the PM explicitly manages the contingency/padding rather than hiding it amongst each of the projects.



 
 
Comment:    
by Sanat Sharma 8/11/2008

The content mentioned in this article might be true with one developer and one project manager with only 6 defined tasks. But this is near to impossible when you have a big team size, lots and lots of dependencies, and numerous tasks. On top of it, fulfilling the customer satisfaction is like pushing the rock hill upwards with people sitting on it. The reason why project management uses the word estimates because it means "judge to be probable". We, as project managers, are only estimating not predicting. Keeping a buffer time is again a debatable issue. Most of the managers keep buffer time more than it should be, for the sake of their...Read On

Author's Response:
8/17/2008    
Hi Sanat. You've got an interesting weblog.

> The content mentioned in this article might be true with one developer and one project manager with only 6 defined tasks. But this is near to impossible when you have a big team size, lots and lots of dependencies, and numerous tasks.

This simply isn't true Sanat. Critical Chain has been used in huge projects around the world by house hold names. I've used it. It works.

That said ... I can see how you would think it wouldn't work on software projects. Critical Chain tackles the problems caused by Critical Path, but it doesn't tackle the problems with Waterfall development.

I recommend (like you, I think) using Agile (iterative/incremental) techniques to manage and develop the software, but - assuming the project has non-software-dev aspects, such as marketing, getting finance, setting up the call center, ... - I also recommend managing the ENTIRE project using Critical Chain. Working this way gets you the best of both worlds. If the iterations make fixed date/scope commitments then I recommend using Critical Chain to plan out the iterations AS A TEAM. This works very well in Scrum projects, for instance. You can see how the Segway was developed and managed using more-or-less this approach by readin the Cutter Journal article listed here: http://prochain.com/resource_center/index.htm.

For folk who work have to work in a waterfall environment then it's best to do a project as two separate phases. The first phase scopes out the product and design enough that a high level Critical Chain plan can be produced. The second phase delivers the remainder of the project using the critical chain plan. This works well if the scope is reasonably well tied down AND the planners are honest about how long testing normally takes (there's no point in giving a politically safe estimate "our testing phase is meant to last 30% of the project, according to our planning department" when in most cases it takes 50% or more). I prefer the combined CC/agile approach.

> Keeping a buffer time is again a debatable issue. Most of the managers keep buffer time more than it should be, for the sake of their integrity.

Unfortunately, I don't agree with your opinion!!! If you're going to use Critical Chain then you have to buffer - otherwise you'll almost always run late. The good news is that you'll finish earlier because of it. The buffer isn't padding - and it will usually be used up.

Another point that you might find interesting is that Agile projects already encourage the two two key Critical Chain behaviours: single- (rather than multi-) tasking and buffering. The buffer, in agile projects, is provided by dropping lower priority features; the buffer, in CC projects, is time.

Thanks for commenting! I really think - based on reading your blog - that you'd enjoy reading Goldratt's book Critical Chain. If you read it then try to figure out how the ideas can be used in an Agile environment. I bet you'll understand Agile better after reading the book. I did.

 
 
Comment:    
by Lisa Lang 8/11/2008

Hi Clark,
I thought your readers might enjoy a 9 minute overview video on Critical Chain that I threw together. It can be viewed here: http://www.scienceofbusiness.com/ccpm-overview-video.aspx No registration required, just a nice overview video!
Dr Lisa

 
 
Comment:    
by Joseph Strazzere 8/11/2008

Other than playing around with the estimates, the only real behavior change appears to be "you must single task". As far as I can tell this is the only real advice here - the rest seems like magic formula manipulation.

So how will the developers react once they learn the "chop all of the commitment-level estimates in half, then dilute the buffer" rule? ("Why do they even ask for an estimate if they are just going to chop it in half anyway?")

And how will upper management react once they learn that the developers estimates are being chopped in half? ("Those lazy developers pad their estimates by 100%")

Author's Response:
8/11/2008    
Hi Joseph, Thanks for your comment. I'm glad yours was the first comment because your response is very typical of how how many people react when they first see Critical Chain. It does, on the face of it, look like another cunning technique to chop developers estimates - something which has, probably since the first project, caused huge distrust and discontent within projects.

The good news is that it isn't. Perhaps you could reread the article and you'll see that PMs use the estimates so that they can create a feasible (and short) plan, but they don't treat their staff's estimates as commitments and they don't penalise their staff, no matter how long they might take to complete their tasks. It's a great way of letting developers and other doers to concentrate on getting their work done.

>"The developer will probably say something like, "You're kidding me, right? I've only got half the time I promised. That sucks."

>"The project manager reminds the developer of the promise she made--about buying lunch if she ever penalizes anyone for taking more or less time than the eight days, or even the four days. She then says, "Besides, I'm going to make it easier for you to finish each of these tasks quickly by protecting you from all the interruptions you get. In fact, I'm going to fight to make sure that you only ever work on one task at a time."

Perhaps you could take another read of the article though? If you've worked in environments where PMs have arbitrarily cut estimates and you've seen horrible consequences then you would probably like the Critical Chain approach. It's a great way of rebuilding trust.

 
Back to Top



 
Ads By Google
What's This?
 
 



Home   |   Resources   |   Topics   |   Community   |   PowerPass



© 2010 StickyMinds.com. All rights reserved.
StickyMinds.com is a division of Software Quality Engineering.
Privacy Policy    Terms & Conditions    Link to StickyMinds.com    Feedback


Infosys

Rally Software




Agile Development Practices 

STARWEST