Today, I want to steer our conversation towards the buzzing world of Agile and its components, particularly focusing on the iterative approach. It's fascinating how this concept has become so popular in our tech culture that its origins and true meaning often get blurred in the noise. It seems like everyone has their own interpretation, even within the same organisation, leading to a kaleidoscope of practices and understandings.
In this exploration, we'll peel back the layers of the iterative approach, tracing its journey from a groundbreaking idea to a ubiquitous buzzword. We'll delve into why it's crucial to revisit the roots of this methodology and understand its core principles. By doing so, we can appreciate its true power and avoid the pitfalls of misinterpretation that can lead to less-than-optimal outcomes.
So, let's get started! And our first step is to lay a solid foundation with clear, reliable definitions, illuminated by insights from industry experts.
What is Iterative Development by definition?
π¬ The "iterative development" model performs initial planning and then consists of a cyclic process of prototyping, testing, analyzing and refining the requirements and the solution. "Iterative" models repeatedly perform the life cycle processes to deliver prioritized system functions sooner, with refined or more complex elements of the system coming in later iterations.
β ISO/IEC/IEEE 12207:2017 Systems and software engineering - Software life cycle processes
π¬ If you run into a dead end in one of the areas, iterate! Incremental refinement is a powerful tool for managing complexity. As Polya recommended in mathematical problem solving, understand the problem, devise a plan, carry out the plan, and then look back to see how you did.
β "Code Complete" 2nd edition by Steve McConnell
π¬ "Iteration" here means applying a function to itself.
β "Concrete Mathematics: A Foundation for Computer Science" 2nd edition by Ronald L. Graham, Donald E. Knuth, Oren Patashnik
In mathematical terms, iteration involves repeatedly applying a function to its own results. This aligns with the Agile principle of "Responding", where each new iteration incorporates the outcomes of the previous one, ensuring a continuous and adaptive process.
π¬ The key to iterative development is to frequently produce working versions of the final system that have a subset of the required features.
π¬ Iterative development makes sense in predictable processes as well. But it is essential in adaptive processes because an adaptive process needs to be able to deal with changes in required features. This leads to a style of planning where long term plans are very fluid, and the only stable plans are short term plans that are made for a single iteration. Iterative development gives you a firm foundation in each iteration that you can base your later plans around.
β "The New Methodology" by Martin Fowler
π¬ In this thinking waterfall means "do one activity at a time for all the features" while iterative means "do all activities for one feature at a time".
π¬ Indeed we've found that delivering a subset of features does more than anything to help clarify what needs to be done next, so an iterative approach allows us to shift to an adaptive planning approach where we update our plans as we learn what the real software needs are.
π¬ But it is easy to follow an iterative approach (i.e. non-waterfall) but not be agile. I might do this by taking 100 features and dividing them up into ten iterations over the next year, and then expecting that each iteration should complete on time with its planned set of features. If I do this, my initial plan is a predictive plan, if all goes well I should expect the work to closely follow the plan. But adaptive planning is an essential element of agile thinking. I expect features to move between iterations, new features to appear, and many features to be discarded as no longer valuable enough.
π¬ My rule of thumb is that anyone who says "we were successful because we were on-time and on-budget" is thinking in terms of predictive planning, even if they are following an iterative process, and thus is not thinking with an agile mindset. In the agile world, success is all about business value - regardless of what was written in a plan months ago. Plans are made, but updated regularly. They guide decisions on what to do next, but are not used as a success measure.
β "Waterfall Process" by Martin Fowler
Having established a foundational understanding of what iterative development entails, let's explore its practical application and the transformative impact it can have on project management and software development.
Embracing Uncertainty: The Advantage
In the world of software development, uncertainty is a constant companion. Traditional models like the Waterfall approach often struggle with this reality. Agile methodologies, however, thrive in it. The iterative approach, a cornerstone of Agile, recognizes that uncertainty isn't a hurdle but an opportunity for growth and adaptation.
π¬ You don't always know what you want until you see it. Agile's iterative nature allows for this discovery process.
β Jeff Patton, author and Agile coach.
This sentiment echoes the Agile philosophy of embracing change.
Incremental Delivery: Building Value Step by Step
Another critical aspect of iterative development is its focus on incremental delivery. Each iteration results in a usable product, no matter how small. This approach contrasts sharply with traditional methods where the final product is only seen at the end of the development cycle.
Responding Over Planning: The Agile Mindset
A fundamental shift in mindset is crucial to truly understand and implement iterative development. Agile prioritizes responding to change over following a set plan. This approach is not about abandoning planning but rather about maintaining flexibility within that plan.
π¬ The most efficient and effective method of conveying information to and within a development team is face-to-face conversation.
β Agile Manifesto
Effective communication is the lifeblood of iterative development. Regular interactions, retrospectives, and reviews ensure that the team remains aligned, responsive, and ready to adapt to change.
Some common mistakes
An explanation of iterative development is often presented in this manner:
The origin of this myth can be traced back to Henrik Kniberg, a wise individual who, despite his intelligence, made an error in the illustration of the process shown in the picture of this post.
A skateboard is not an iteration if you need a car, just like a bicycle or a motorcycle.
And a skateboard doesn't necessarily have to become a car in the end.
A correct formulation would be:
A simple skateboard prototype, an advanced skateboard with improved features, better wheels, a new shape, ... and so on.
The same goes for cars: Initially, the simplest car that can move β key parts work together in iteration and perform the main function. Then goes iterative development and improvement.
As you can see while organizations make attempts on adopting iterative development within Agile frameworks, several common pitfalls can hinder the true potential of this approach. Recognizing and avoiding these mistakes is crucial for the successful implementation of Agile methodologies. Here some more pitfalls you can avoid:
Confusing Activity with Progress: One of the most common mistakes is mistaking mere activity for actual progress. Teams may complete numerous iterations without genuinely advancing towards the final goal. This often happens when there's a lack of clear objectives or when iterations are not effectively reviewed and adjusted.
Insufficient Iteration Planning: A common mistake is not spending enough time planning the iterations. Without clear objectives for each iteration, teams can lose focus, leading to iterations that don't effectively contribute to the overall project goals.
Lack of Iteration Review and Adaptation: Each iteration should be followed by a review and adaptation phase. Neglecting this can lead to repeated errors and missed opportunities for improvement, as lessons learned are not applied to subsequent iterations.
Overloading: Trying to achieve too much in a single iteration can be counterproductive. Overloaded iterations often lead to incomplete features, increased stress, and can ultimately slow down the overall project progress.
Poor Communication Within the Team: Effective communication is essential for the iterative development, especially when dealing with changes and feedback. Poor communication can lead to misunderstandings, inconsistencies, and a lack of cohesive vision, all of which can derail the iterative process.
Testing: Iterative development relies on regular testing to shape and refine the product. A common mistake is not integrating testing early enough or frequently enough in the development cycle, leading to issues being discovered too late or not at all.
Ignoring Technical Debt: In the rush to produce iterative releases, teams may overlook technical debt β the extra development work that arises when code that is easy to implement in the short run is used instead of applying the best overall solution. Accumulating technical debt can significantly hinder the progress in later stages.
TLDR: Iterative Approach β Beyond Just Iterations
As we wrap up our exploration of iterative development within Agile methodologies, it's crucial to remember a key insight: It's not merely about the iterations themselves, but rather the responsiveness they facilitate. This distinction is at the heart of Agile thinking.
π¬ Iterations may or may not lead to Responding. What's crucial is not the iterations themselves, but the Responding they facilitate. This is why the Agile Manifesto emphasizes Responding rather than Iterations.
β My personal notes
This statement encapsulates the essence of Agile and iterative development. It's a reminder that the true value of this approach lies in its ability to adapt, learn, and improve continuously. Each iteration is a stepping stone, not just towards a final product, but towards a deeper understanding of the project's needs and challenges.
Instead of Conclusion
Keep in mind, the secret to achieving business growth and operational efficiency rests in accurately grasping and applying Agile practices within software architecture. A critical element in this process is finding the right balance between Prediction and Adaptation. This factor, however, will be addressed in the following articles. Stay safe and stay connected for more in-depth exploration!