Thursday, April 30, 2015

The Agile “Simplicity Principle” - How to Dig it Through

One of the reasons to see improved productivity in Agile is because of the simplicity principle.


“Agile principle -Simplicity--the art of maximizing the amount of work not done” is essential for Agile project success. Simplicity is also a general principle to run the digital business today. Contextually, how do you define and apply it to run project and business more successfully?


Simplicity enforces agile values: In general, it’s a call to scrutinize your working practices to ensure they are contributing towards agile values such as early and continuous delivery, responsiveness to change, a close and frequent collaboration between business people and developers. By prioritizing your ability to change course, this scrutiny will plainly favor the stripping down and reduction of overheads. The most important part of the context is that the work you are "not doing" is the work that hinders the agility, your ability to respond to changes. So unit tests aren't thrown out with the bathwater because they are a key practice in maintaining agility. On the other hand, it challenges a practice such as 'literate coding' because that would introduce a level of redundancy to the code which makes it more costly to change the code.


Simplicity emerges synergistically from the reduction. But it is not in itself a goal. Indeed, "Continuous attention to technical excellence and good design enhances agility" can drive the team towards complex, but efficient, low overhead practices, rather than just simplicity. Avoiding waste is better than eliminating waste. Eliminating waste is about eliminating something which is not used and saving effort on maintaining it. Avoiding waste is more about not building, nonvalue-adding features. There are always constraints, so simplicity implies to build as little as possible (as little output as possible, to maximize the amount of work not done) and maximize outcome (benefit for users/customers).

Simplify, Integrate, then automate. So it is important to put simplification and integration (bigger picture up front planning) ahead of working software. Another definition could be to make sure the system you build is not so complex from an architectural deployment and testing perspective that you end up repeating the same tasks (fixing the build, manual testing tasks, etc.) over and over. This is tightly coupled with the principle "Continuous attention to technical excellence and good design enhances agility." You need the feedback loops anyway; if they are working well you can afford to trim things very fine because you know you will detect when you cut them too fine, and be able to correct the shortfall. Many people want to adopt Agile because they think it will help them deliver software faster because of process improvement. But in reality, one of the reasons to see improved productivity is because of the simplicity principle.


Generally speaking, simplicity is the design principle of looking for what is common for maximum, reuse. Simplicity is the building blocks. Complexity is the content put in the building blocks and the outcomes from interactions with the building blocks. Most of the times, simplicity can improve flexibility, and flexibility is often contrasted with "adaptability" -- the ability easily and quickly change or adapt according to circumstances without necessarily anticipating them or adding anything explicitly for that circumstance. As Einstein wisely put: make things as simple as possible, not simpler.     





0 comments:

Post a Comment