Lean Software Methodology
What is Lean?
Lean is an ideology that originated from the manufacturing principles of a car company in Japan, namely Toyota which integrated its way into the software development process. The key idea in Lean is to remove waste in the production process to optimize efficiency and produce a high value product to the customer.
High Overview of Lean Development Flow
- Identify the value
- What is your customer looking for? The first step in the Lean Development process is defining the customer’s values precisely. This allows the development team to focus solely on exactly what matters most to the customer and allows the team to identify which ideas or features would be considered a waste of time and energy.
- Map the value stream
- How will we achieve this goal now that we know what the customer values? Identify every step in the development process and determine the value of each step. This allows teams to see an overview of what work must be done before moving on to the next step and helps in pointing out possible bottlenecks and significant delays in their development process.
- Create flow
- The next step involves creating a flow with minimal delays. This flow must be a continuous flow of value, meaning that at every moment in the development process, there is something being done to achieve the customer’s wanted value. Practically speaking, this includes removing any delays or minimizing batch processes. This flow also aligns well with the customer’s demand because there will always be an effort to build a minimal viable product (MVP).
- Establish pull
- Pull refers to the customer’s demand. The development team only responds to customer’s demands and work is only initiated on these demands. This reduces the production of an unneeded product or feature, saving time and money.
- Seek perfection
- The continual desire to improve the product for the customer. Practically speaking, this looks like constantly reassessing the work done, asking for feedback, and improving on that feedback.
7 Lean Principles
- Eliminate Waste
- Unnecessary code or functionality
- Happens when production starts before it is required
- Too much Work in Progress (WIP)
- Starting many tasks that cannot be finished in short periods of time creates an overwhelming environment that degrades efficiency
- Delays in the development process
- Anything that delays the development process should be eliminated. An example of this can be one development team having to wait on another team before starting their work. In these cases, make abstraction so that there is less dependency on distinct teams.
- Unclear or changing requirements
- These can be cleared up if the first step in the lean development flow is done well. Identify exactly what your customer is looking for and agree on sticking to it.
- Poor Communication
- Decisions must be made as a team and if one part of the team lacks communication, then it creates delay and we lose the consistent workflow.
- Unnecessary code or functionality
- Build quality in
- Build quality when building the software. Well-structured, well-commented, high-quality code means less bug fixes, less wasteful testing and more efficiency. Practical ways to increase the quality of work can be incremental development, which allows a constant flow of feedback and production, pair programming, test-driven development, etc.
- Create knowledge
- Knowledge gained from the development process is to be documented so individuals don’t need to relearn functionalities that they already have learned but forgot. In part, this is what we are doing in this repository.
- Defer commitment
- This one can be counterintuitive because we seem to be delaying the development process. However, the logic is that by deferring commitment, teams can make better choices on the requirements and understand the project as a whole. The idea is not to jump into coding headfirst to avoid unnecessary functionality.
- Deliver fast
- Create the product as soon as possible while maintaining product quality. Faster delivery means faster feedback, which means faster improvements.
- Respect People
- This goes for any team that wants to be effective in what they do. Respect can be shown with proper communication, constructive criticism, empowering one another, etc. Opportunities to show respect grow more frequent with regular meetings, pair programming, code reviews, etc.
- Optimize the whole
- Look at the bigger picture. Don’t get tunnel vision on one lean principle because that will lead to imbalance and ruin the whole idea behind lean. Ex. solely focusing on delivering fast will cause teams to have less quality, which means more testing and debugging in the future.
Advantages:
- Lean focuses on reducing waste, so this allows for a minimal viable product with minimal resources
- Lean reduces unnecessary hard work and makes sure all work that is done is helpful towards the customer’s demand
- Lean works well with small projects with a short deadline. If there are fewer people, it means that there is a higher chance that everyone agrees and follows Lean principles. Short deadlines work well with this methodology because Lean allows for teams to produce an MVP with minimal resources while still maintaining quality.
Disadvantages:
- Everyone on the team must adhere to the Lean methodology, or else their workflow will disrupt the overall workflow and in the end, it will cause the team to have more waste and more delays.
- Takes a lot of planning and communication between team members.
- Lean is to be right on time. If there happens to be unexpected problems due to poor planning, then it can result in much more waste.
Differences with Other Methodologies
- Agile vs. Lean
- The key difference is that Agile’s main goal is to create something. Meanwhile, Lean’s mail goal is to eliminate waste.
- Waterfall vs. Lean
- Waterfall works in sequential stages and there is little to no flexibility making it hard to return to a previous stage. Lean is flexible, as it is an iterative process, so in each iteration, there will be stages that have been visited before.