Clean Agile with Uncle Bob: A SummarySoftware Craftsmanship
I recently attended an online session on Clean Agile, organized by O’Reilly publication.And guess who was the speaker? Uncle Bob. The man himself!
I consider myself fortunate to have been a part of his introductory session. Not only did it broaden my understanding of Agile, but also gave me a unique perspective towards why it is important.
To begin with, Robert Cecil Martin (Uncle Bob) is a legendary software professional, one of Agile’s founding fathers, and a signatory to the original Agile Manifesto. He is also a co-founder of Clean Coders Studio, best-selling author (btw, you should read Clean Agile), and of course, an inspiration to numerous software developers (including me) and non-programmers as well.
Lessons I learned from Uncle Bob
1) The Origin of Agile
In the early years of software development (around the 1970s), projects operated according to the waterfall model, in which tasks were completed in linear, sequential stages and development progressed in one direction, like a waterfall. Each of these stages constituted a separate phase and would generally be completed before proceeding to the next one.
It is widely (and mistakenly) accepted that Dr Winston Royce, an American computer scientist proposed the Waterfall Model in his research paper ‘Managing the Development of Large Software Systems. But, in fact, it was quite the opposite. This paper identified the waterfall pattern, describing its deficiencies and defined some initial agile thoughts as well. I really recommend you go ahead and read this paper.
Royce illustrated that the development of huge computing systems needs a more rigorous approach than what was being used at the time and that a single-pass sequential approach can pose an inherent risk. He advocated an iterative approach and suggested that projects go through it at least twice.
This was the beginning of the agile thought process.
With a large focus on upfront analysis, the waterfall model tried to achieve all four: quality, fixed time, fixed budget, and fixed scope. It was soon understood that a trade-off was inevitable. Realizing that the waterfall model was unsustainable, a group of 17 software experts including Uncle Bob, Martin Fowler, Jeff Sutherland, Andrew Hunt, Kent Beck, and others met through informal and formal meetings often to try and produce a better, simpler, and more effortless way to develop software, overcoming the complexity and reporting overhead associated with waterfall and other common paradigms of software at the time.
11-13 February 2001, at the Lodge of Snowbird ski resort in the Wasatch mountains of Utah, the entire team found a common ground.
That is when AGILE was born.
2) What is Agile?
There are two parts to learning craftsmanship: knowledge and work. You must gain the knowledge of principles, patterns, practices, and you must also grind that knowledge into your fingers, eyes, and gut by working hard and practicing.”
- Robert C. Martin | Clean Code
Agile product development in its essence, a methodical and iterative technique. It is a chain of rapid development and deployment of the product in several vertical, small slices. This is followed by immediate user feedback that helps developers refine the product in further iterations. Here is an analogy. A point is the smallest unit of a line. Connecting numerous points forms a line. Similarly, agile is a methodology that gives you a starting point to tackle problems by dividing them into small pieces and connecting them iteratively and gradually to complete the process quickly, all while keeping it hassle-free. This is Agile.
3) How to be Agile?
In an iterative development process, analysis, design, development and testing are performed in each iteration. This increases the scope of adapting and accepting alterations more suited to customer solutions. It also enables getting the software in the hands of the end-users faster, getting faster feedback and consistently and incrementally providing value. Read more about how we work in an iterative process here: Feedback and Rapid Prototyping Each slice in Fig. 4 represents an iteration and increasing the number of iterations gradually decreases the error bars in the team’s estimations. Agile development is based on the idea that huge goals are accomplished by several small teams working together on small tasks. Learn more about how to be Agile and a few ceremonies that can help: Techniques for Agile Teams 4) PrioritizingFrom the business perspective, features up for development can be categorized into four quadrants as in Fig. 5 below.
High value and low-cost features are picked up first and low value low features are piled up in backlog and may be done later. This helps add the most value to end users in the timeliest fashion.
To summarize everything, I learned in the session is not feasible, but one thing I can share is how to develop a mindset towards agile practices.
- The agility mindset is not limited to the tech world; it can be extended to the most fundamental areas of life. It helps in the evolution of a progressive solution from the most basic level. There is wide scope to explore this concept from different perspectives and apply it in varied domains.
- Narrow down your problems to get to the starting point. Or as we call it – slice the user story to the thinnest slice. When you narrow down your problems, you create smaller goals and get a clear idea of where to start, what to prioritize and how to pace it out. Sounds thoughtful, isn’t it?
- Agile development also helps identify your own core beliefs and modus operandi. Are you stuck with policies and practices once decided or are you adaptable to change? It enables us to improve our decision-making process and take better, more targeted measures.
- In Uncle Bob’s words, “Agile is a Marathon, not a sprint!” It is necessary to move at a sustainable pace to maintain the momentum and make progress towards the goal.