The 7 Lean Software Development Principles
Lean manufacturing is a concept born in the 20th century, focused on honing processes to reduce waste, increase productivity, and emphasize accountability and innovation. This concept can be (and has been) extended to any production process – if you’re creating a product, you can do in a lean manner – so it’s no surprise that Mary and Tom Poppendieck’s book Lean software development applied Lean thinking to the creation of digital products. Read on to explore the seven basic principles underpinning the Lean approach to software development.
Table of contents
What is Lean software development?
Software is a product and its ‘manufacture’ follows repeatable or standard processes, aims to meet set quality standards, and relies on the close collaboration of teams incorporating a variety of expert skill sets. As such, software development is ideally suited to a Lean attitude.
One important point is that it’s not ‘Lean Startup’! While both are derived from Lean manufacturing, the easiest way to differentiate the two is that Lean Startup is more of a process, whereas the Lean software development principles define a mindset that can be applied to any process.
Likewise, although there is some clear overlap between the Lean and Agile software development approaches – and Lean is often referred to as ‘agile’ – Lean is based on it’s own set of seven principles focusing on efficiency, teamwork, learning, speed and quality.
The 7 Lean software development principles
Taking a Lean approach means applying efficiencies to all aspects of the design and development process, and at all levels of the team or organization. The seven principles are as follows:
- Eliminate waste – Any part of the process that does not add value should be removed from the workflow. Regularly throughout the development, the process is reviewed to identify any waste areas, bottlenecks or unnecessary delays. In software terms, “waste” might mean bureaucracy, agreeing to more tasks than the team can complete, unnecessary product features or code, excessive inventory, poorly timed testing, slow or ineffective communication, unclear or changing requirements or task switching; in fact, any aspect or activity that prevents or slows down the delivery of value to the customer or reduces that value in some way can be seen as waste.
- Ensure quality – The development process should include regular quality checks; indeed, quality should be embedded throughout. Software development-related quality measures include defect tracking systems, refactoring to continuously improve code quality, pair programming (duos of developers working together), incremental development with regular feedback on product iterations (as used in Scrum), automation to reduce repetitive, manual processes or tasks; or adopting modes such as test-driven development which converts all requirements to test cases against which the emerging product and its features are measured.
- Create knowledge – Learning from experience is critical to ensuring an efficient process. Different development team members come with different levels of knowledge, expertise and experience. This third principle emphasizes team members sharing and learning from each other to broaden the availability and use of the team’s collective knowledge base. Likewise, involving users and stakeholders throughout the process and gathering feedback ensures a wider range of knowledge and input. Knowledge storage and access is also an issue – project documentation should be complete and available.
- Defer commitment – Instead of making all major strategic and production decisions early on, decisions should be taken when relevant information is available; often meaning as late as possible. While the phrase ‘defer commitment’ may sound negative, the idea is to make base development decision on the fullest possible available data, including the results of experiments, testing, user input and so on, before committing to something irreversible. In other words, don’t commit to something until without understanding it fully. This principle preserves the ability to pivot the direction of development in response to either stakeholder requirements or market changes. In fact, in an ideal world, all development decisions would be feasibly reversible should circumstances change.
- Deliver fast – Linking this to the point about changing circumstances, rapid delivery can put value in users’ hands before they can change their minds about what constitutes value. Delivering a product or part-product (e.g. a prototype or MVP) results in feedback that can be used to improve the development process and quality of the final product version; and also influence how users and the market perceive the value of the final product. This is a ‘fail fast’ strategy, focused on gathering feedback and learning and using that to hone and guide the product’s development. Besides all that, products with a rapid time-to-market are more likely to generate a competitive advantage.
- Respect people – Collaboration is key and can only work in an environment of respect and inclusion. Lean software development encourages regular feedback between team members, proactive and transparent communication, and even (healthy) conflict. This approach is easier with an inclusive leadership style (for companies that still work with team and project manager roles) or an inclusive organizational structure, such as holacracy which can be used to empower everyone. This principle also impacts how development teams are put together, encouraging the mixing of different levels of expertise and experience (junior, medior and senior) to create the most effective and efficient mix.
- Optimize the whole – The process, the product, the team… all the involved elements are part of an interconnected system that produces the software. As such, any and all elements are subject to review, streamlining and improvement. The key is to avoid suboptimization inherent in negative cycles such as releasing substandard code for the sake of speed which then causes problems due to quality defects, that then creates more work in rectifying those problems; potentially resulting in negative user perceptions along the way. Similarly, testing backlogs result in either unused developer time (while they wait for the test results and feedback) or developer’s creating further defective or unnecessary code because they don’t receive test results in a timely fashion.
The benefits of Lean software development
Focusing on quality and efficiency sounds absolutely sensible but what are the specific benefits of applying a Lean mindset to software development?
First of all, it encourages closer, more effective collaboration. Knowledge sharing, open communication and joint decision-making are antidotes to people working in silos, only focused on their personal task list. Lean requires all team members to have a broader understanding of the team’s work and how it will result in value for users.
Perhaps the most obvious benefit of delivering fast and seeking feedback throughout the process is increased product quality. Applying Lean software development principles can result in continuous improvement of both product and process.
Reduced waste is another way of saying ‘efficient’ and efficiency in getting a workable, value-adding product into the hands of users as quickly as possible can be critical to any business.
What’s more, a Lean approach requires flexibility, enabling development teams to navigate the shifting currents of user and market demand, able to pivot when necessary with minimum wasted effort and resource.
But maybe the top benefit of Lean software development and its seven principles is simply product quality. Efficiency, flexibility, smart decision-making, inclusion, and keeping user needs and feedback as a central focus all result in better quality digital products.
Share this article: