While Scrum and XP were transforming the software development industry, there was another set of ideas derived from the Lean manufacturing and Six Sigma that started to influence software development methods. These ideas around Lean software development forms the foundation of number of Agile methods. Agile and Lean are two popular methodologies in software development industry to deliver faster and valuable piece of work. Here I am trying to explain what do we mean by Lean? Where does it come from? What are some of the ways Lean concept has been implemented in software industry? And about Lean principle for software development.
Lean is just like Agile. It’s a mindset, it’s a way of thinking. It’s not a new process or a new model that you can use to apply and build product. It’s a set of principles, a set of ideas and lots of tools and techniques that can be apply to software development process or manufacturing to get better or to build product more efficiently and effectively.
Lean came from the Toyota production system and really the core idea behind Lean is to focus on customer. Whatever is developed see it from the customer perspective and focused on maximizing value by minimizing waste, people, defect and cost. Lean development is based on the concept: Build a simple solution, put it in front of customers, enhance incrementally based on customer feedback.
Lean has evolved Lean manufacturing, Lean software development, Lean product development, Lean management, Lean startup, and many other areas. In fact, people have also started to apply Lean techniques in their personal life as well. Seven principles of lean software development are defined and very popular. Applying Lean principles to knowledge work requires a shift in mindset in terms of how value, waste, and other key Lean concepts are defined.
Eliminate Waste: waste could be defect, waste could be extra features or overproduction, extra waiting time and delay in the development process. Extra features means users didn’t need those features, or they don’t use it, or it could be context/task switching and many other type of ways that exist in software development. Partially done works also does not add values to customer. Such wastes should be routinely eliminated in order to maximize customer value.
Amplify Learning: This is the one that seems simple, but requires discipline and focus to implement. So how can we increase learning or fast learning to do continuous integration, or automated test, or sometimes exploring multiple options? They can enhance your learning and also called create knowledge can be increased by using certain tools like: Code reviews, Pair programming, Wiki, code comment, trainings, knowledge sharing sessions.
Defer Commitment: This principle of Lean development can be easily misused because of the name but it doesn’t mean team should delay the outcomes or irresponsible about their decision making. rather it suggest and encourage team to demonstrate the possibilities by keeping their options open and not committing with less knowledge. Try to defer a commitment if you don’t have all the information and if it is possible to defer the commitment to specific technology.
Deliver fast: The next one is deliver fast. It’s also called deliver as fast as possible, to put value into the hands of the customer as quickly as possible. And so, this basically means deliver the software, the cycle time for software. Can you decrease that cycle time? How fast can you deliver it? The Lean way of delivering quickly isn’t working longer hours, day-nights and weekends, or working non stop for the sake of speed.
Empower the Team: Respecting people is also another important lean principle. Communicating proactively and effectively to encourage healthy conflict results in quality output. Empowering each other to do their best work and let them decide about their close work.
Build Quality In: sometimes we make the quality as one of the step in the software development process. Every team wants to build quality into their work. But unless this is part of a disciplined practice, it’s not easy to be done. And according to this principle, quality should always be in this core or in your software. To avoid quality issues by combining the skills and experience of two developers instead of one, pair programming can be used. Likewise TDD also help to build in quality product by writing criteria for code before writing the code to ensure it meets business requirements.
Optimize the Whole: Always focus to optimize the whole system not the sub modules. Just because of time limitations never release anything that is not well tested. It’s based on the idea that every business represents a value stream – the sequence of activities required to design, produce, and deliver a product or service to customers. If our goal is to deliver as much value to our customers as quickly as possible, then we have to optimize our value streams to be able to do just that.