Lean principles got their origin from manufacturing. It started in the mid-20th century when Toyota, a large Japanese automobile manufacturing company, was having problems with meeting its production target in time.
Consequently, Toyota had decided to come up with a new production management method. It was this new management system that revamped the company’s process and focused on reducing waste in production while maximizing value to the customer or end-users. Since then, this Toyota management system has spread to become popular in other industries of manufacturing where it was known as Lean manufacturing.
In 2003, Tom and Mary Poppendieck published a book titled Lean Software Development: An Agile Toolkit that taught the implementation of lean manufacturing into software engineering. Today, that book has become topical, and due to its popular application, many software engineers now utilize lean principles as an efficient way to optimize functionality while eliminating waste.1)
What Is Lean?
Lean is a production management method that optimizes production in order to minimize waste and maximize value to the customers.
It is often categorized as an Agile methodology because it adopts the same iterative cycles of tasks that are carried out by small self-managing teams that put consumer value first.2)
The lean structure allows for evaluation after every iterative cycle in order to eliminate waste. Teams are encouraged to test the product for bugs and other defects while it is being developed.
As mentioned earlier, lean was adopted from the industrial manufacturing world where its principles were used to make the production of physical goods more efficient.
While there are severe differences between manufacturing physical goods and software development, they both reflect similar characteristics like repeating production processes, prioritizing quality standards, and using a specialized workforce.
However, as a result of the Poppendiecks’ work, the application of Lean ideology to software engineering takes on a distinct face in terms of defining value and eliminating waste. As they constitute its core principles, they have been correctly tailored to effectively suit the processes of software development and have been outlined for the knowledge of software engineers.
Lean Development Principles
Lean development principles are generally geared at shipping products to the market as fast as possible without compromising quality. The underlisted are the main lean principles used by product managers.
- Build quality in
- Create knowledge
- Defer Commitment
- Deliver fast
- Respect people
- Optimize the whole
- Eliminate waste
From Tom and Mary’s book on lean software development, it becomes apparent how the above-mentioned manufacturing principles can be adapted to the world of software engineering. These lean principles are discussed briefly below.
Build quality in
Even as bugs and defects are common to software development, every developer wants to have that perfect product. However, hyper-focusing on obtaining quality products often results in waste. And one very prevalent scenario is developers testing products unnecessarily.
The “Build Quality In” principle of Lean software development allows developers to automate some manual processes that are most susceptible to human error, reduce wait states to the barest minimum and engage in pair programming in order to verify quality as the product is being built.
In a situation where expertise is required yet scarce, creating valuable learning is important. This principle of lean software development suggests that lean teams should effectively document their building processes in order to create long-term productivity and flexibility. Some lean development tools that can be utilized are documentation, pair programming, training, code reviews, wiki pages, thoroughly commented code, using tools to manage requirements.3)
This principle does not mean that teams should be irresponsible with commitment, or reject commitment. Rather, it simply directs teams not to be too hasty to commit. It encourages teams to put off critical decisions until they have all the correct information to take action on it. Making commitments at the right time is key – not too early, and not too late.
The principle of delivering fast is one that every developer can relate to. Getting a product to market as soon as possible is important for so many reasons.4) But there are also many reasons why that may not happen.
It might be due to the fact that products naturally take a long time to build, or that a team member is unable to fix a bug, and gets no assistance whatsoever from team members.
This lean development principle helps companies to propel themselves to attain fast delivery by keeping production simple, building quality, hiring team members with an agile mindset, and doing pair programming.
Lean development principle or not, respecting the dignity of everyone at the workplace is a no-brainer. However, in lean principles, respecting people includes communicating effectively and regarding their personality, opinions, and agency as valid.
It also encourages teams to build knowledge and empower team members to earn more skills in a specific field, from where they can become experts. Expert developers, for example, can then be assigned to a project with the responsibility of making decisions about that project.5)
Optimize the whole
As demonstrated in Tom and Mary Poppendieck’s book on Implementing Lean Software Development, software development processes are most likely to be caught in a vicious circle.
They explained that in a bid to meet requirements and deliver quality products in due time, many programmers often find themselves set back by issues such as defects in code, bugs, delays in feedback, and testing. It is suggested that this often occurs because the development processes are sub-optimized.
Before eliminating waste, one very critical hurdle is identifying waste as some of them are not as obvious as the others. For this, most software developers define waste as any process, project, or task that doesn’t result in any real value.
Within Toyota’s original lean manufacturing principles, the wastes in lean were identified in three broad categories:
- Muda – unproductive
- Mura – unevenness, and inconsistency
- Muri – overburden, and unreasonableness
From this, they further identified specific types of manufacturing wastes which are:
- Unnecessary Transportation
Due to Tom and Mary Poppendieck’s effort, these manufacturing wastes have been replicated in the software development industry. Software development agencies, Tech startups and software development experts now apply the wastes techniques for effective and efficient shipping of their applications. These 7 wastes in software development include, Inventory, Overproduction, Overprocessing, Handoffs, Waiting, Context Switching and Defects.6)
They are discussed in details below:
The 7 Wastes in Lean Software Development
Lean software development principles suggest that programmers should not leave any task incomplete. Any task that is left partially completed is regarded as inventory waste.
This particular type of waste could manifest as unfinished code, untested code, uncoded documentation, undeployed codes, and the list goes on. It usually happens as a result of developers starting more than they can possibly finish.
However, adhering strictly to lean development principles that encourage focusing teams around their abilities and skill sets will help prevent inventory waste. Lean development requires developers to assign tasks to engineers that are properly skilled to manage them and make sure that assigned tasks are completed before new ones are added.
Building unnecessary features into products is the most common form of overproduction. It could also manifest as needless code that slows down feedback loops or delays the delivery of requirements for the developer.
Going by lean development principles, developers are encouraged to go to market with their Minimum Viable Product (MVP) first, then subsequently add other features.
Beta versions could also be launched to help developers figure out the features that are valuable to end-users, and those that can be added to the product.
This is a wasteful situation that has been termed “relearning” in lean software development. Relearning is the repeated learning of things through multiple channels.7)
It could be the over-communication in documents that no one reads, or emails and memos that are sent through multiple channels, or functionality that appears in multiple instances.
Overprocessing might create a hold-up or confusion in the experience of the end-user, and should be avoided by dismantling knowledge silos, and creating shared learning platforms for teams to share information with other teams and communicate effectively too.
Transferring projects from one team to another also leads to waste in lean software development. Each time there is a need to transfer work from one team to another, there is also a need for extra details or knowledge.
Studies show that at every handoff between teams, there is a significant decline in knowledge transferred from its initial stage.8)
Lean development principles direct that knowledge transfer is critical, as well as effective communication. Communication channels such as emails, voice calls, and interpersonal conversations could prove most effective when transferring valuable learning to other teams. However, developers should structure teams to work together, ensure timely feedback loops and endeavor to reduce the handoffs in their processes.
Under lean development principles, anything in the process that causes a halt is regarded as a waste. It is usually caused by the bureaucracies that require an approval process before work can be resumed.
Waiting usually occurs within handoffs, and this issue can be tackled by reducing handoffs in the project. Another method of controlling this waste is by structuring teams that can function, make and approve decisions independently.
A programmer that is assigned multiple projects to complete would certainly find him/herself building all projects simultaneously. This situation would require the programmer to constantly snap out of the mental focus that was required in project A and to develop another mental focus for project B.
This switch has a significant impact on the quality of work done. Also, the more projects a programmer is involved in, the more context switching they have to undergo.
This waste can be controlled by allowing teams to complete their assigned projects before assigning new ones to them. Unplanned work should also be reduced, and each team should make their own tasks a priority. Kanban methodology can be applied to inform individual teams of the ongoing projects of other teams, thereby reducing eventualities of unplanned work.
Defective codes or bugs in features resulting in work having to be redone is a very common waste in lean software development. Defects could lead to the programmer leaving his current tasks to focus on reworking. Solving defects could also force the programmer to deal with context switching, and this may affect the quality of work on both the reworked project and the project that had to be paused.
To avoid this, lean development principles advise developers to build quality. The system of pair programming and automating processes leads to more quality coding and fewer defects in work.
Avoid Wishful Thinking, the Hidden 8th Waste
Conclusively, there is a waste that is regarded as the eighth waste in lean software development. This waste is known as “Wishful thinking”. It is the form of waste that occurs when developers underestimate challenges ahead. Wishful thinking takes the place of thinking logically and often happens in the direst situations.
It is important to avoid wishful thinking because besides being a waste itself, it usually appears to be a source of other wastes too. But it seems that this is the hardest waste to control yet as it has become a part of human psychology.
Finally, it is clear that lean software development is a great method of managing software production, and it is being used by several software companies to optimize production processes for maximum end-user value and to reduce waste. Controlling wastes are critical to the success of this method. Therefore, as the wastes threaten its implementation, its implementation should control the wastes as well.
|↑1, ↑2||Alexander Sergeev. 15 March 2016. The History of Lean methodology. Hygger. Retrieved on 23 September 2021. https://hygger.io/blog/the-history-of-lean-methodology/|
|↑3||Kelly Waters. 14 October 2010. Lean Principle #3 – Create Knowledge. 101ways, Retrieved on 23 September 2021. https://www.101ways.com/2010/10/14/lean-principles-3-create-knowledge|
|↑4||Kelly Waters. 10 January 2011. Lean Principle #5 – Deliver Fast. 101ways. Retrieved on 23 September 2021. https://www.101ways.com/2011/01/10/lean-principle-5-deliver-fast/|
|↑5||Kelly Waters. 2 February 2011. Lean Principle #6 – Respect People. 101ways. Retrieved on 23 September 2021. https://www.101ways.com/2011/02/02/lean-principle-6-respect-people/|
|↑6||Kelly Waters. 23 October 2010. Lean Principle #6 – Respect People. 101ways. Retrieved on 24 September 2021. https://www.101ways.com/2010/08/23/lean-principles-1-eliminate-waste/|
|↑7, ↑8||Talha Waseem. 30 August 2020. 7 Wastes In Lean Software Development [And How To Prevent Them]. Hackernoon. https://hackernoon.com/7-wastes-in-lean-software-development-and-how-to-prevent-them-7bi3tqp|