October 30, 2017
The core objective of the Lean Software Development methodology is to optimize the efficiency of the whole development process by eliminating the extra additive practices (termed as “wastes”) and the system as the whole.
Practices can vary from the existing one as you move further from one condition to the next, and they are likely to change as circumstance develops. But the underlying principle should not change.
Suppose, from long back you’re following some software development principles and practices which aren’t productive enough to meet the goals.
For Product advancement, you realize the need to put light on new technologies and practices that put hands together to work exceptionally well.
But, at the end of the day, you might want to move from existing practices, however, it’s not clear where you are heading.
Lean Software Development has its roots in the lean manufacturing principle which is translated into the software development by Tom and Mary Poppendieck. Lean Manufacturing principle is derived from “Just In Time production” expertise by Toyota. And the same principle has been well accepted throughout the software industry.
The evolution of the lean concept empowers us to manage the waste at different levels. There is no much difference in the lean software development methodology and Agile development methodology.
There are 7 basic principles for lean software development as mentioned below.
Let’s take a deep dive into each to understand how does it look like.
This principle says that we should eliminate the waste as much as possible?
So, first of all, let’s understand what is a waste?
As per the Wikipedia, Waste is any substance which is discarded after primary use, or it is worthless, defective and of no use. This is true for physical goods. For software development, anything which does not add value to final product delivered to end user is termed as waste.
Below are the few examples of waste for software development:
Improper or Partially done work can also be termed as waste.
The requirements might have been given long back and now the ready software might look obsolete.
Delays in Delivery is a waste. The reason is unless customer sees it they can’t provide feedback. If feedback at late chances of rework increase as the project would have already progressed. The second thing is customer may change this mind.
Any unused code is a waste. Because there is a cost to maintain, test and document it.
Working on any feature which doesn’t add value to the user is a waste of efforts from development, discussion, testing and maintenance, and communication.
Wrongly prioritizing the backlog will result in a waste of efforts. Working on low priority feature which is not important for minimal viable product is waste
Any Rework is the complete waste. Using library which is does not the fulfill current requirement. In Middle of the work if you have to change it will require lots of efforts. This is the complete waste of development testing and team efforts.
This is the suggestive list for the things which we can consider as the waste in the arena of software development. We should keep identifying waste and try to eliminate them as much as possible.
Better quality will introduce less error and less waste. Do the thing right at first time. Try to implement feature right. Try to reduce defects as much as possible instead of fixing it. There are many best practices are available namely Test Driven Development (TDD). Fix the defect as soon as it encounters instead of queuing them. Your goal should be to build quality into the code from the start, not test it in later.
Knowledge plays important role in success of project or product. Keep learning from everything we code, test, deliver and discard. Keep this knowledge accessible to everybody. Make small iteration and do the retrospective with team frequently. Try to learn the new technique that works and unlearn things that didn’t work. Encourages systematic learning throughout the development cycle
There is a certain decision that will have the big impact on the software development project success. And there is always urgency on the team to make these decisions so that they can proceed. If the decision is taken without proper fact is available then it will have an adverse impact on the project. Try to delaying decisions as much as possible until they can be made based on facts and not on uncertain assumptions and predictions. Because correcting the mistakes is most costly later on.
Customer changes his mind with time. So try to figure out how you can deliver fast before a customer gets time to think and change his mind. Look at these tips to learn the time management for your project.
People are the most important aspects of software development. Good and motivated people can make big difference. Show respect for people and encourage them. Help them by removing impediment and motivate them to achieve the better result. Foster trust and relationship with them
Software development activities are organized in smaller part for better tractability and management. A different team works on the different parts. Optimizes the whole value stream, from the time it receives an order to address a customer need until the software is deployed and the need is addressed. It is important to optimize whole system namely developer, process, people, customer, and company.