Philosophy of Lean principles is derived from Lean manufacturing approach also known as “just-in-time production” pioneered by Toyota – a Japanese car manufacturing company. Essentially, lean is centered on making obvious what adds value by reducing everything else. Lean aims to make the work simple enough to understand, do and manage.
Lean Software Development principles are translation of Lean manufacturing principles; summarized in seven principles:
1) Eliminate Waste
2) Amplify Learning
3) Decide as late as possible
4) Deliver as fast as possible
5) Empower the team
6) Built quality in
7) See the whole
Eliminate Waste
As per Lean, anything that does not add value to the customer is muda (waste), In order to trim down the waste, one should be able to recognize it. By eliminating the waste, quality of product improves while cost and time consumption condense exponentially.
As a software developer waste is evitable by using best practices, oops concept and design patterns. Some common wastes include:
unnecessary code and functionality
delay in the software development process
unclear requirements
avoidable process repetition (often caused by insufficient testing)
bureaucracy
slow internal communication
Agile Development process, after each iteration generally, we do “Retrospection”, within team members to figure out what went well, what didn’t and what could be better to creates a culture of continuous improvement and learning.
Amplify Learning
Software development is continuous learning process, it could be something that did not go well or anything which we could do in a different way. By keeping the iteration cycle duration short, we can sped up learning process and get customers early feedback.
Decide as late as possible
Generally, in software development process, critical information comes late based on the customer feedback. By the time decision needs to be made, we can explore all the possible options and can choose most likely option.
Sprint planning in Agile Development is an example, where we decide, what features to be included in each iteration and analyze them just in time for them to be developed.
Deliver as fast as possible
It is not the biggest that survives, but the fastest. Sooner we delivered the product (without major defects), sooner we will receive customer feedback, and same we can incorporate in our next iteration.
We should divide the tasks in small and independent stories, and keep them simple. We should enhance incrementally based on real customers feedback and make the product more robust.
Empower the team
Traditionally higher management take the key decisions and tell the workers how to do the job. But lean favors “find good people and let them do their own job”, manager should encourage them rather micro management. Build pull mechanism within the team, where developer can pull their tasks.
Built quality in
It talks about the quality i.e. flexibility, maintainability, efficiency, responsiveness and almost a bug free system as a whole when we integrate all the components. By following below points we can exponentially improve code quality and ultimately product quality:
Test Driven Development (TDD)
Pair Programming
Code review
Constant customer feedback
Short iteration
Frequent integration
Automation
See the whole
Now days, in the organization, product is divided in parts which is developed by multiple teams. To produce a system with smoothly interacting component, all the individual should know the complete product background, they should be familiar with big picture and end user’s requirements.