3

There are 12 principles behind the Agile manifesto. One is:

Simplicity--the art of maximizing the amount of work not done--is essential

What is exactly meant by this?

10

Simplicity is essential

Keeping your work/tasks simple and uncomplicated is essential as it increases your agility. How can you do it? By maximizing the amount of work not done. Or by rephrasing the same as by minimizing the amount of work to be done. Now this is more of an art than science. There is no set formula which you can apply equally to various projects/situations. You have to strike a perfect balance between what to do and what to be left undone. This comes with experience.

Tendency of future proofing

In general, the term "future-proof" refers to the ability of something to continue to be of value into the distant future; that the item does not become obsolete.

https://en.wikipedia.org/wiki/Future_proof

In software projects there is a general tendency of future proofing and gold plating. Though both terms carry a different definition, however both incur cost and time which may provide zero or low value to the end user.

According to Standish Group research, 80% of features and functions in a custom developed application have low or no value.

enter image description here

Business users would like to add all the features that they can think of while developers would like to design a generic and scalable framework that is supposed to handle feature additions in the future as well. All of this may result in a system where most of the features provide no or low value, however time and cost would have been spent already.

Should I keep using a mediocre design

No one is stopping you from building a generic and scalable framework but build it when it is required. A complex design having an abstract base class system laden with polymorphism can be developed to handle all the required features of a software application but what if the stakeholders run out of money half way through the project? What are they left with, a good but complex design and a some working/valuable features. The time and effort spent in making the complex design could have been used to implement an optimal design but more valuable features. This is exactly what is meant to work not done. You design a framework to the required point and not build for the future. Do think about the future but not implement for it because you'll need it further down the road. But the stakeholders may choose a different path down the road and your effort gets wasted. Thus do it simple now and improve as required. This is where the other agile principle comes in handy.

Continuous attention to technical excellence and good design enhances agility

Good design does not mean complex design. Similarly you continuous give attention to technical excellence, so keeping it simple does not give you a license to write poor quality code or create an unstable software.

Learning from other industries

The concept of simplicity came in from Lean Manufacturing introduced by Toyota Production System. Lean says that you should eliminate waste from your current process. In the manufacturing industry, waste includes things like having a big stock of raw materials, too much inventory of finished goods, unnecessary movement of people or products, and defective products. In Lean software development, a waste would be unnecessary code and functionality, delay in the software development process, unclear requirements, avoidable process repetition, etc.

KISS and YAGNI are similar concepts.

  • Another key aspect is "failing fast" or validating things prior to writing production code - personas, user workshops, paper prototypes and user testing, etc. – Jeff Lindsey Dec 2 '15 at 17:15
3

It means agile teams do the work that needs to be done to get the desired result. And not more. YAGNI is one possible take on it. Do not do more than necessary.

Eliminating waste is a core component of agile practices and a feature built that was not needed in the end is waste that can be eliminated. Through proper strategical planning and proper tactical execution with whatever practices your product uses.

0

It means, do not plan in big way. Your code/Framework/Architecture should be simple and just enough for the requirement, not more than needed. Do not assume future & plan complex framework or architecture at the beginning.They should evolve by time only if it is needed. Another meaning for this principle is - KISS (keep it simple & short).

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.