This is my first post about Lean Software Development. The reason why I’m writing this is to share my thoughts and opinion. Also, due to the request of several families 😉
First things first:
- This is NOT an Anti-Scrum campaign!
- I am NOT “selling” Lean!
- I am NOT a Lean expert!
- What you currently do is NOT wrong!
To start I would like to say that for me Lean is a “ Thinking” as described in many books. Nevertheless, besides that, for me is a Philosophy something that you are or not. Like one of my work colleagues said is a group of common values. I agree with him but we really need to believe in them in order to follow and apply them. In other words be Lean.
In my opinion we can say that Agile Software Development is a great example of Lean thinking in action. Why? Lets dig a little more 😉
But, in order to start we really need to know what are the key seven principles: 
- Eliminate Waste
- Amplify Learning
- Decide as late as possible
- Deliver as fast as possible
- Empower the team
- Build integrity in
- See the whole
Lean Software Development is the application of the Lean Principles (Lean Toyota Productive System) to software development. So, once more what is Lean? 
The National Institute of Standards and Technology Manufacturing Extensions Partnership’s Lean Network describe Lean as:
“A systematic approach to identifying and eliminating waste through continuous improvement, flowing the product at the pull of the customer in pursuit of perfection.” 
“Lean Software Development reduces defects and cycle times while delivering a steady stream of incremental business value.” 
In other words we can say that Lean Software Development is more focused than other Agile Methodology in order to develop software in less time, using less budget and with a lower defect rate. 
Lean Software Development give us principles and tools that are easily used in any environment to improve software development. 
There are seven Lean Principles as described above, but lets understand and learn more about them:
- Eliminate Waste: Some exemples in software development are any implementation that doesn’t improve the quality of code or doesn’t deliver business value to the customer. But we also have examples of process that doesn’t bring any value to the business and the customer.
- Tools: Seeing Waste, Value Stream Mapping.
- Amplify Learning: Developers implementing features that delivers business value, they will have to learn about many things. Some are technical, such as the advantages and disadvantages regarding different tech approaches. Others are requirements related, such as understanding what the customer needs versus what the developer think that the customer needs.
- Tools: Feedback, Iterations, Synchronisation, Set-based Development.
- Decide as late as possible: Software development is always associated with some uncertainty, better results should be achieved with an options-based approach, delaying decisions as much as possible until they can be made based on facts and not on uncertain assumptions and predictions. The more complex a feature or system is, the more capacity for change should be built into it, thus enabling the delay of important and crucial commitments. The iterative approach promotes this principle. In order words the ability to adapt to changes and correct mistakes, which might be very costly if discovered after the release of the feature or system.
- Tools: Options Thinking, The Last Responsible Moment, Making Decisions.
- Deliver as fast as possible: This is the foundation of iterative development. Why? Because allow us to Reduced risk, have an Earlier ROI/Value, Increased visibility of progress, Increased predictability, Increased productivity, Reduced waste. Also, it is much easier to get customers happier by getting their features or systems at the end of each sprint rather than wait for a month or an year.
- Tools: Pull Systems, Queuing Theory, Cost of Delay.
- Empower the team: The people factor is the most important element in successfully delivering software. In order to get people motivated, happy and self-organized, they need to be able to take ownership and responsibility for the outcome. In order words authorised to make things happen.
- Tools: Self Determination, Motivation, Leadership, Expertise.
- Build integrity in: The Perceived Integrity is the Customer experiance. In order words the overall experience of the Product (Feature or System) how it is being advertised, delivered, deployed, accessed, how intuitive its use is, price and how well it solves problems. The Conceptual Integrity is how well the architecture and system components flow together as a whole with balance between flexibility, maintainability, efficiency, and responsiveness. Obviously testing, unit and integration, is a major part of integrity. [1/6]
- Tools: Perceived Integrity, Conceptual Integrity, Refactoring, Testing.
- See the whole: We should to see and understand the system as a whole. Why? Because systems nowadays are not simply the sum of their parts, but the interactions from all parts. Being able to see as a whole, means that we are able to solve problems easily and faster. How? By breaking them them down into their constituent parts and optimize each individual piece.
- Tools: Measurements, Contracts.
For a second post regarding Lean Software development I will focus the different type of Wastes more in detail.