by Aaron G. Tucker, M.Ed, SPC
The Agile Manifesto was written in 2001, against the backdrop of the Wasatch Mountains, in Snowbird, Utah, by seventeen independently minded software practitioners. While the participants did not often agree on what the future of software development looked like, they did find consensus around four core values and 12 principles. Each of these foundational core values and principles continue to drive conversations and different perspectives on what was meant then and how we should adapt them to today. One of the most contested and ambiguous principles, #10, Simplicity–the art of maximizing the amount of work not done–is essential, is the topic of this discussion.
As an experienced coach and trainer of over 25 years, I have found this principle to have the most differing perspectives. This principle has always been, and likely will continue to be, the least clear in its intent. Much like how we now have differing opinions of what our forefathers meant by the articles and amendments to the U.S. Constitution, the Agile Manifesto, and particularly principle #10, can be interpreted in many different ways. Thankfully, in the case of the Agile Manifesto, Software Development typically has little effects on our freedoms or liberties.
Understanding Principle #10 begins with a KISS – Keep it Simple Stupid. “Simplicity”, or simple things, are easily understood, and straightforward to implement. Simplicity does not cost a lot of time (or money) to implement and therefore makes software easier and less painful to revert. There are many areas that can be simplified, and are “essential” to agile delivery such as:
Architecture:
Minimize the work done on the overall technical solution. While we want to balance intentional architecture with emerging design, it is tempting for developers and architects to introduce components that are generic and create a technical good or even “gold plated” architecture. Implementing such components will often cost a lot of effort and make the structure complex, hard to explain, and complicate documentation and maintenance. When the same objective can be reached with a simple structure that is easy to explain you have gained the advantage of faster implementation, as well as easier documentation and maintenance.
Development:
Time to market (speed) is the most important factor for the success of new features. Features that form a competitive advantage are often easily copied. With speed you are flexible and able to react quickly to market and environmental changes and will always stay a step ahead of your competition. The fastest way to gain speed and flexibility is to simplify the work while still delivering the same units of value. Simplifying the work means less time spent on development, designing, testing, documenting, deploying, and maintaining that valuable thing. Less development typically means fewer defects, misinterpretations, and errors. Complex development often causes complex maintenance.
Testing:
Create unit-tests for your system that are limited to the unit of code itself. These unit-tests will be executed many times and therefore must be simple and fast (short execution time). These shorter, simplified tests keep the code flexible and maintainable. When refactoring code, you only must change a minimal amount of test cases, those involved in the refactoring. Complex tests are slow, require significant effort, and are more difficult to create, execute, change, and maintain.
Standards and Practices:
Finally, simplicity is applying, following, and adapting to a set of best practices and standards (coding or otherwise). When we must choose, we should look for the most common and simplest standard that will solve our problem. These standards and practices are proven, easy to understand and explain, and there is typically a lot of knowledge available to support them. In most cases there are large communities of practice and professionals that can help when you have questions about the standard or practice. While we certainly do not want to discourage relentless improvement and should always be looking for the next innovative way to become more efficient, often, the simplest approach is to follow the most common and current best practices.
While simplification of the processes and practices that we use “is essential” in understanding Principle #10, what was meant by “the art of maximizing the amount of work not done”?
Maximizing the amount of work not done implies that agility is about rethinking processes, practices, and steps that where “necessary” in traditional waterfall development. This is where agile meets Lean. Lean focuses on reducing waste and creating a lean process. Effort (work) avoided, with the same end-value, can be classified as waste. To avoid wasteful work, ask whether the work adds business value relative to other tasks. Teams must ask, with everything they do “is this really necessary?”. When the added value is not clear it is likely waste. Some potentially wasteful work with minimal added value may include:
Implementing this principle consistently will reduce effort to the bare minimum and allow the team(s) to focus on the simplest solution for creating the same business value. This is a shift in thinking for teams that are not used to working in an agile environment.
The main advantages of this principle are speed and reduced complexity. You can deliver business value faster and the delivered product is less complex, requiring less maintenance. This principle applies not only in technical practices, but in processes and communication as well. Start with simple things and improve/automate them when you are sure they add value. Map out your value stream and understand each of the different steps involved. Ask challenging questions as to tasks benefit and value. Eliminate wasteful work, that provides little value, and revisit the processes often. Encourage innovative ideas that continue to create efficiencies. Simplify your processes and maximize the amount of work not done, its essential to delivering value faster.
#agilemanifesto #design #agiledevelopment #coaching #team #project #strategy #learning #data #sustainability #success #business #engineering