The Critical Chain solution to scheduling and managing projects was derived from a methodology called "The Theory of Constraints. Within any project, the Critical Chain is defined as the longest chain of dependent events where the dependency is either task or resource related. This definition assumes that the longest chain is the one that is most likely to impact negatively the overall duration of the project
One of the assumptions in Critical Chain is that a task time is not a deterministic number. It is an estimate. It means that any task that is part of a project cannot be predetermined to take an exact amount of time. sound strange? Most of us take pride in doing reliable estimates, but critical chain believes that the reliable estimates comes when people give estimates with padding, the 80 percent chance of meeting the estimate is often 2–2.5 times the 50/50 duration
In a Critical Chain project, management accepts that task times are not deterministic. Task times are guesses. Therefore, it is perfectly normal for task times to take longer than estimated. Management does not worry about whether or not a task finishes on time. They focus on finishing the project on time.
To make project finishing on time, the following steps are necessary:
-Take all forms of padding/ buffers out of the task estimates.
-Resource level the project. All tasks should be well resourced
-Don't measure people on the accuracy of their estimates.
-Implement a project buffer to protect the project's Critical Chain. It sits at the end of a project and is calculated as a percentage of the length of the Critical Chain, typically 30–50 percent.
-Implement feeding buffers on each feeding path, to protect the Critical Chain from variances on any feeding path.
So the critical chain suggests to keep buffer at the end of the chain, say if we want to get to the office by 9 AM, we should plan our schedule in such a way that all planned tasks / activities of reaching office finishes by 8:30 AM, so the difference 9 AM – 8:30 AM will act as buffer and will absorb the delay if happens at any stage on the chain.
In this diagram I tried to create a typical software project's activity sequence using the critical chain approach, here we are developing two use cases and integrating them at the end, In order to give predictable start date to Integration testing we need to have feeding buffer at the end of each use case development chain and to give predictable end date to the project we need to have project buffer at the end.
Buffer management is one of the important activities in critical chain projects. Every task in a Critical Chain project is connected either to a project buffer or a feeding buffer. When a task takes longer than estimated, it eats into the buffer that it is connected to. Buffer penetration reports indicate when the project is in danger. They also indicate which current task is causing the problem. Feeding buffers are shock absorbers on the noncritical paths; only after a feeding buffer is 100 percent consumed does the project buffer get impacted