I remember learning about lean manufacturing at Toyota in an early middle school business class, and was endlessly fascinated by the idea of minimizing waste and maximizing productivity through intentional design. Over time, lean methodology was adopted by several industries, outside of manufacturing, including software development.
Lean software development places a few core principles into action to optimize productivity. Software development has several key features that make it the right process to apply lean methodology:
- Repeatable processes
- Uniform standards
- Collaboration of workers
Lean software development is a model that values individuals over processes and interactions over tools. There are seven essential elements to actioning this process to work for your software development projects.
1. Reduce Waste
It’s in the name: lean development will eliminate anything that does not add value.
Waste can be found in many areas:
- Work-in-progress waste i.e. partially done work. This can be reduced by work-in-progress limits, like Kanban.
- Overproduction waste. Extra or unnecessary features occur when feedback cycles are too lengthy.
- Waste in processes. You may see this in relearning, which can be diminished by better collaboration and pair programming exercises.
- Waste in handoffs. The transport can slow processes down. Cross-functional teams can enhance efficiency. Independent teams should have a platform and process to bring work together.
- Waste when context switching. This can also be offset by limiting work-in-process.
- Defects. Waste occurs when quality isn’t built into the process with multiple checks and balances.
2. Build in Quality
Lean software development builds in quality. This is a disciplined practice. There are lean development processes that improve quality.
- Pair programming reduces the waste of miscommunication and maximizes the output of two developers.
- Testing criteria provide programmers a system of checks to ensure they are meeting all requirements.
- Growing in steps, or incremental development, enhances quality through consistent, timely feedback.
- Fewer wait states protect quality and streamline efficiency, shoring up gaps in knowledge and increasing focus.
- Automation is a powerful tool in which assets like machine intelligence are used to eliminate errors.
3. Create Knowledge
Lean development was formed with the idea that valuable learning occurs during the build. This knowledge makes the team more capable since everyone now has access to knowledge which previously was only in a small number of peoples’ brains. It also makes on-boarding easier and the team more resilient to the departure of team members. Team infrastructure can be enacted that identifies and documents this knowledge for long-term retention.
A few of those infrastructure elements include:
- Code reviews
- Pair programming
- Knowledge base sharing
- Commented code
Some software development teams incorporate user stories into the knowledge base to inform best practice.
4. Defer Commitment
A lean approach to software development has short-term goals in mind. Through continuous data collection and intentional feedback, decisions are made only when all data points are intact. Once data is thoroughly understood, it can be included in planning. In essence, deferring commitment shifts the focus from long-range planning to what the current process is telling you. This is the most valuable information to be able to excel in the long run.
5. Fast Delivery
In conjunction with a focus on the here-and-now, lean software development favors efficiency. If you follow the principles, you should accelerate your processes. This is because you have reduced waste and eliminated barriers for your team. Progress can move forward faster when everyone has the right data, tools and crystal clear expectations. Blockers are consistently removed. Lean teams don’t work endlessly or over-engineer. Lean teams enact simple solutions, receive and incorporate feedback and keep moving forward.
6. Respect the Team
When lean management first came to the forefront, its battle cry was “people over processes.” In recognition of the fact that real people do the real work, lean management honors the individuals. Respect is communicated with proactive communication, process improvement and even how a team handles conflict. A healthy work environment is key to achieving all of the other core tenets of a lean method.
7. Optimize the Whole
Software development can fall prey to issues with speed or testing. Rushing leads to errors. Inadequate testing leads to a loss of things such as: bugs getting into production, unhappy customers, time and money spent for a fix, loss of revenue, hit to your brand, etc. To combat sub-optimization, lean development principles help lean organizations understand the downstream effect of each project. Value streams should be identified and optimized.
To truly become a lean team, you need to commit to all of these principles. You can’t have disengaged members or lone rangers who operate outside of the lean method. Once everyone is on board, you can activate this lean method with the help of software. There are multiple softwares that allow you to facilitate lean software development, creating the right context for things like pair programming, team communication and planning agile sprints.
If you want to learn more on lean methodologies, I would recommend taking a look at this video. It provides a simple overview of the lean process and what it looks like to implement in any industry.
Have you applied lean methodology to your programming methods or in your software team? Let me know your thoughts by commenting below!