Lean software development
The lean software development is related to Agile project management. It translates lean manufacturing ideas into domain of software development.
7 wastes of software development
The idea of waste is present in LSD, however other types of waste are important:
- Work done partially
- Extra processes
- Extra features
- Task switching
- Waiting
- Motion
- Defects
See extended version in article 7 wastes of software development
Principles of Lean software development
The description of 22 tools of LSD (see below) provides another set of principles. In literature both are treated as LSD principles. They aren't contradictory, however one of the list might be more convenient for some organizations.
1. Satisfying the customer is the highest priority
It is very easy for programmers to forget about the customer. Programming requires competences that most of the customers don't have. The final product however has to be user-friendly and fulfil customer's requirements.
2. Always provide the best value for the money
Many lean enthusiasts talk about excellence, not value. Wrong. The lean is about value. The customer's requirements should be fulfilled at reasonable cost, low risk, in time.
3. Success depends on active customer participation
The customer can get greater value from the software that was created with his participation. It is often misunderstood by customers. They want to pay and have great software. Fortunately, this approach changes over time.
4. Every lean development project is a team effort
The projects should be run by multidisciplinary teams, not individuals. Diversity creates innovation, team work reduces time of development.
5. Everything is changeable
Panta rhei - everything flows. In lean software development we assume that everything can change. Running business these days requires changing something almost everyday. The software that was ordered can be useless on delivery. Moreover, the requirements can change after delivery. The software should be ready for changes. This creates opportunities for the software company.
6. Domain, not point, solutions
Creating solutions solving one problem is not cost effective. Better to create extensive systems, with many modules which can be configured for different customers.
7. Complete, don't construct
Using pre-fabricated software, models, frameworks helps shorten time and resources required to create software.
8. An 80 percent solution today instead of 100 percent solution tomorrow
Beta versions are everywhere. Customers have got used to 80% solutions, because they pay off faster. It keeps them up to speed with markets.
9. Minimalism is essential
Focus on project, keep the team small, minimize paperwork.
10. Needs determine technology
There are many technologies available. The team should choose one that is best for the problem. Starting with chosen technology or working with only one technology will reduce your market share.
11. Product growth is feature growth, not size growth
Every additional feature should be design flexibly, to be able to quickly adjust to changes. The features can be influenced by changes in business, but also business can be influenced by new opportunities created by features.
12. Never push lean development beyond its limits
The lean software development is about increasing revenue, reducing costs, creating value for the customer. If you have other objectives - use other methods. Lean is not religion.
22 Tools of LSD==The LSD uses several approaches. Each of them comes with separate tools===Eliminate waste=
- Seeing waste - every employee should be trained to see the waste in software development (see: 7 wastes above)
- Value stream mapping - project managers have to understand how value for the customer spreads in the project
Amplifying learning
- Feedback - in modern, agile projects feedback generates substantial value. It helps to remove problem, improve features, etc.
- Iterations - help respond to facts, synchronize, force decision making
- Synchronization - small batches of work have to be synchronized. Tests of builds help in synchronization.
- Set-based development - start with constraints and select best choice rather than start with one choice and refine it.
Deciding as late as possible
- Options thinking - delay decisions, because they can be irrevocable. Get more information, use Just in time for lean development
- The last responsible moment - if the decision is not made in that moment, some alternatives are eliminated - the default decision is made. Default rarely means best.
- Making decisions - most of problems should be solved as late as possible to keep the alternatives open, however if the problem is new and complex, or the team has an expert that is able to make correct decisions, it might be more effective to reduce complexity right in the beginning.
Delivering as fast as possible
- Pull systems - you can tell workers what to do, but if you have knowledge workers, as in most software projects, it might be better to let them task themselves. Set the dates and let them work.
- Queueing theory - queues should be as short as possible because waiting is waste. Release small packages of work, observe how the work arrives and how the process works
- Cost of delay - an economic model should empower team members to figure out for themselves what is important for business
Empower the team
- Self-determination - help the workers to engage rather than set the tasks. Managers are part of the team.
- Motivation - compelling but achievable purpose helps keep motivation high
- Leadership - leadership shouldn't be restricted to managers. Leaders shouldn't be cheerleaders.
- Expertise - share expertise, enforce standards
Build integrity in
- Perceived integrity - focus on keeping customer values first, use model driven design
- Conceptual integrity - measure how well components work, reuse existing solutions
- Refactoring - complex systems lead to effects that aren't fully understood at design time
- Testing - feedback from tests should be as quick as possible, daily builds, automated tests.
See the whole
- Measurement - track the progress, measurement helps keep high performance of workers
- Contracts - agile approach requires cooperation, not taking advantage of other side
Examples of Lean software development
- Agile Development: Agile development is an iterative approach to software development that emphasizes collaboration, customer feedback, and frequent testing. Agile teams work in short sprints, often lasting just a few weeks, to quickly develop features and deliver value to customers.
- Continuous Integration: Continuous Integration (CI) is a practice of regularly merging code changes into the main branch of a code repository. By continuously integrating code changes, teams can identify and address problems quickly, allowing them to make progress more quickly.
- Test-Driven Development: Test-Driven Development (TDD) is a practice of writing tests before writing code. By writing tests first, developers are forced to think through how their code should work and how different parts of the system interact. This helps ensure that code meets customer requirements and that there are no unexpected issues or bugs.
- Automation: Automation is the use of tools or scripts to automate manual tasks. This helps reduce the amount of manual work that developers need to do, allowing them to focus on more important tasks. Automation also helps reduce errors and improve the reliability of processes.
- Value Stream Mapping: Value Stream Mapping (VSM) is a practice of mapping out the steps in a process and identifying areas for improvement. By mapping out the value stream, teams can identify areas that are inefficient or have unnecessary steps, allowing them to focus on improving those areas.
Advantages of Lean software development
The main advantages of lean software development are:
- Improved efficiency: Lean software development helps to reduce waste and streamline processes. It also allows teams to focus on the most important tasks and eliminate distractions.
- Increased customer satisfaction: By focusing on customer needs, lean software development helps to ensure that the software product meets customer requirements and expectations.
- Reduced development time: By eliminating wasted effort and focusing on the most important tasks, lean software development helps to reduce the time needed to finish a project.
- Cost savings: Lean software development methods help to reduce costs by reducing the need for unnecessary resources and optimizing existing resources.
- Continuous improvement: Lean software development encourages continual improvement, which helps to ensure that the product is always up-to-date and meets customer needs.
Limitations of Lean software development
Lean software development has its limitations that can prevent it from being successful. These limitations include:
- Limited visibility: Lean software development does not provide full visibility into the development process, making it difficult to track the progress of the project.
- Lack of standardization: Lean software development lacks standardization, making it difficult to replicate successful processes.
- Long-term planning: Lean software development focuses on short-term planning and execution, which can prevent long-term planning and cause projects to become stalled.
- Difficulty in measuring success: Lean software development is difficult to measure, making it difficult to gauge the success of a project.
- High costs: Lean software development can be expensive due to the frequent changes and rework that may be needed to complete projects.
Lean software development is related to Agile project management, and there are other approaches that also use Lean principles in software development.
- Continuous Delivery: This approach seeks to reduce the time between development and deployment of new software releases by automating the software delivery process and making it more efficient.
- DevOps: This approach emphasizes collaboration between developers and operations teams, with the goal of improving the speed and reliability of software releases.
- Test-Driven Development: This approach focuses on writing tests for software before the development process begins, in order to ensure that the code is of high quality and meets the intended requirements.
- Kanban: This approach uses visual boards to track progress and prioritize tasks, with the goal of improving the flow of work and helping teams focus on the highest-value tasks.
In summary, Lean software development is related to Agile project management, but there are other approaches, such as Continuous Delivery, DevOps, Test-Driven Development, and Kanban, that also use Lean principles in software development.
Lean software development — recommended articles |
Lean development — Lean product development — Agile software development — Continuous improvement — Agile project management methodology — Work simplification — Lean startup methodology — 7 wastes of software development — Lean startup |
References
- Presentation of Lean Software Development tools and approaches (PDF)
- National Institute of Standards and Technology website
- Lean Enterprise Institute website
- Ballé, F., & Ballé, M. (2005). Lean development. Business Strategy Review, 16(3), 17-22.
Author: Slawomir Wawak