Simplicity--the art of maximizing the amount of work not done--is essential
What is exactly meant by this?
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.
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.
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.
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.
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.
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.
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.
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).