Sharing Our Passion for Technology
& Continuous Learning
Agile Manifesto - Responding to Change Over Following a Plan
Is it really possible that intense planning and the ability to respond to change can co-exist within the same development process? If you are wondering this, then you are not alone. Partners regularly ask us if Agile software development teams follow any sort of plan or are they just feel good, free for alls? In this article we explain the types of processes that can be adopted to allow your teams to plan while still responding to change.
Traditional Software Development
Traditionally, software development teams viewed the cost to change something as increasing over time. To save money these teams required customers to define everything they wanted before they ever started building the system. While this sounds reasonable, we all know that something will always be missed. These missing requirements will creep into the project little-by-little.Many organizations try to prevent changes by making it very difficult, if not impossible, to inject changes after the initial planning phase. This resistance drives many teams to add everything, including the proverbial kitchen sink, to their initial requirements to avoid the pain of adding changes later.
While this seemed like a good idea at the time, our industry has learned that allowing change is imperative for companies that must compete in a fast paced, cut throat, rapidly changing marketplace.
The last decade has seen several software development processes become popular that allow for planning and change to happen at the same time.
Agile Software Development
Agile software development processes accomplish this through different levels of frequent planning and re-evaluation.The first and highest level of planning is release planning. Within release planning, teams agree on the features to include in a release. At this level of planning, features remain very large. The purpose of this planning session is to paint a large picture of the project with very large paint strokes. Once these large strokes are grouped into meaningful releases, we proceed to prioritize each release and then break them down into smaller time periods known as iterations, based on priority order. Each iteration is typically limited to two week periods.At the beginning of each iteration we agree on which features the team thinks they can complete. These features are broken down into stories, which are kept in a prioritized feature list. By working in iterations, the team has the ability to adjust what they are working on every two weeks. Thus, if a new requirement is discovered, the team is able to incorporate it without difficulty in the next iteration.
This approach intensifies the investment of planning as the team gets closer to a given iteration. Focusing on a few features intensely empowers us to lock in a limited number of decisions that often uncover information that effects later decisions. While the old style of up-front planning attempts to uncover these pieces of information early, a significant amount of this information cannot be fully understood until we start to develop and use a working system. No amount of thinking can replace hands-on experience with the real system.
As the team works in an iteration, the stories are pushed from one stage to the next. The stages vary from company to company, but typically include development, testing, and deployment.
Once an iteration is completed we take time to reflect on what we learned. This review meeting is called a retrospective. In this meeting the team discusses what went well, what did not go well, and what changes we want to make. This meeting helps us learn from our mistakes and make a commitment to improve.
Lean Software Development
Taking the Agile software development process a step further, the lean software development approach focuses on limiting the work in progress based on the constraints of the team. The team cannot push work to the next step. Instead, the downstream team members pull work into their stage when they are ready to work.This is done to prevent any one stage in the process from completing more work than the other stages can process. If one stage finishes work and the next stage cannot work on it, then this is considered wasted inventory. Lean software development borrows the theory of constraints from lean manufacturing, in that it limits the work in progress to the slowest stage in the process.
By limiting the work in progress, teams are able to identify bottlenecks in their process. These bottlenecks may be due to resources, bureaucracy, time, distance, or any number of reasons. Lean software development teams focus on eliminating their bottlenecks so that they can function at their optimum.
Lean software development processes do not use fixed time periods like iterations. Instead, a lean process will continue to pull work at the rate that it is capable of producing features. And rather than having a scheduled release, the team will simply release features whenever the team determines is appropriate.