Saturday, March 14, 2015

Simplicity as an Agile Principle

Agile principle: "Simplicity--the art of maximizing the amount of work not done--is essential."

Agile becomes the major software management methodology, Agile principles are also the management philosophy to run the business today. "Simplicity--the art of maximizing the amount of work not done--is essential." What is it all about, and how does it affect the team performance and project success? 

Agile advocates "just enough" concept: in line with Einstein's quote: "Make everything as simple as possible, but not simpler." If you do an analysis of all the features up-front, you might not even build them or they might change by the time you get to build them. Instead if you focus on what you need to build now, this will eliminate the wastage (hence reduce the amount of work done) and keep things simple. Another understanding 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, crap the code) over and over.  

Avoiding waste vs. eliminating waste: Rational - eliminate waste is about eliminating something which is not used and saving effort on maintaining it. Avoiding waste is more about not building, non-value adding features. In traditional software development, there is a tendency to build things "just in case" you might need them someday without any real data to support that idea. There is a lot of waste going into features that are never, ever used. Not only the waste in the initial creation of the feature, but also the waste of maintaining that feature. So avoiding waste is even better than eliminating waste. Put simply, it means to have enough process buy-in from the business that you always have a meaningful, prioritized backlog containing well-defined issues that translate well into their actual needs.

 Agile can improve productivity because of the simplicity principle: 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. There are always constraints, so simplicity principle helps build as little as possible (maximize the amount of work not done), but also maximize outcome (benefit for users/customers). The most important part of the context is that the work you are "not doing" is the work that hinders your 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. In general, it’s a call to scrutinize the team working practices to ensure they are contributing towards agile values such as early and continuous delivery, responsiveness to change, with a close and frequent collaboration between business people and developers. By prioritizing the ability to change course, this scrutiny will plainly favor the stripping down and reduction of overheads.

Simplicity emerges synergistically from “work reduction.” But it is not in itself a goal. Indeed, continuous attention to technical excellence and good design enhances agility which can drive the team towards the necessary complexity (every intelligent thing has certain complexity in it), but efficient, low overhead practices are characteristics to build a quality product fit for customer’s need.


Post a Comment