Good1 Consulting

Understanding Lean Software Development Principles

November 2, 2021

/

9 minutes read

The world of software development employs several levels of strategies to achieve success. Many of these strategies had been adopted by a single company at first before they succeeded and became the blueprint that every other company began to follow.

Getting the Minimum Viable Product (MVP) to market as quickly as possible is a popular strategy among product development organizations.((Product Plan. Lean Software Development. Retrieved on 19 October 2021. https://www.productplan.com/glossary/lean-software-development/ )) After the MVP has been brought to market, developers add to or remove features from the product based on feedback received from the users on features that they enjoyed or didn’t find useful. To achieve building this Minimum Viable Product in time, software companies have to optimize their processes and ensure that the value of the product to the end-user is maximized. 

This method of optimizing the production process to reduce wasteful activities and bring a product that has the basic valuable features to market for end-users is what is known as Lean Software Development.

Brief History of Lean Software Development

The lean methodology was first used in the automobile manufacturing industry by Toyota in the 1950s. Toyota developed a system to prioritize the creation of quality products to be valued by the consumer while eliminating waste at the assembly line.((Martin Murray. 12 September 2018. The Origins and Principles of Lean Manufacturing. Retrieved on 19 October, 2021. https://www.thebalancesmb.com/origins-and-principles-of-lean-manufacturing-2221395))

This production system was indeed successful for the automobile manufacturer and soon, other manufacturers began to follow suit. 

In 2003, Tom and Mary Poppendieck released a book titled Lean Software Development that took the concept of Lean manufacturing and adopted it to fit Software development contexts.((Good1 Consulting. 13 October 2021. An Introduction to Lean Software Development. Retrieved on 19 October, 2021. https://www.good1consulting.com/lean-software-development/))

One might wonder what automobile manufacturing, which is tangible, has in common with software development – that produces virtual functions. Well, the similarities between the two structures are repetitive processes that are manned by a skilled workforce, including handoffs, and target quality. This is what made the adaptation of lean from manufacturing to software development possible.

What Is Lean Software Development

Lean software development is a methodology that removes all unnecessary parts of a product by controlling waste, and producing only what is valuable to the end user. It optimises the production process by saving time and resources while ensuring quality results.

Lean software development is often categorized as an agile methodology. This is because it adopts a framework of an iterative process that is run by compact teams bestowed with a co-responsibility to aim for and deliver quality results.

Its conceptual framework is characterized and held together by key practices, also known as Lean Principles. 

Lean Development Principles

Lean Development Principles are the core concepts of lean methodology. They are set principles, derived from each other, working together to guide production teams through a strictly optimized process that prioritizes what the product needs.

Since its adaptation from the manufacturing industry, Lean principles have been translated into seven modern tenets that are popular and widely utilized in lean structures. In 1996 however, James Womack and Daniel T Jones,((Mark Crawford. March 9 2016. 5 Lean Principles Every Engineer Should Know. ASME. Retrieved on October 16 2021. https://www.asme.org/topics-resources/content/5-lean-principles-every-should-know)) founders of Lean Enterprises Institute, designed a model of five lean management principles in their book “Lean Thinking”. And this is where the confusion lies for many people that wish to implement lean software development.

These two principles could be confusing to software developers who do not want to make mistakes, however, both sets of principles are effective in their own right. What matters, and ought to be considered is the exact structure being optimized. For instance, while the seven modern principles focus on practices required to reduce wastes and increase product quality within teams, the five principles by Womack and Jones are particular about the production process and its optimization.

The Five Principles of Lean

The five principles of lean follow a process of five stages that depend on the success of one stage to lead the next stage, forming a continuous cycle. According to Womack and Jones, the five principles are:

Value: Value is what the product does for the end-user. At this stage, Lean teams will have to identify that value, find out if they’re relevant, and research about the people they are creating for.

Value stream: Mapping the value stream is the next step after identifying the value of the product. What this stage entails is figuring out the step-by-step process in production from creation to marketing, to delivery. It is while mapping out the value stream that organizations decide what needs to be done, by identifying what is adding value or not adding value from the customer’s standpoint.

Flow: After mapping the value stream, the next stage would involve optimising the value stream. Flow is created in the value stream by evaluating each step of the production process to identify unnecessary processes and reduce waste.

Pull: With the value stream optimized, lean teams will be able to deliver products quickly. This would mean that customers can pull products as soon as possible without delays being made due to needless processes in the value stream.

Perfection: At this stage, lean teams strive to make the production process perfect. They re-evaluate their flow, reducing all waste and making it more efficient than before. This would realign teams  to deliver in the best possible time, and lead to further evaluation and optimization of the process.

The 7 Principles of Lean Software Development

Modern lean adaptations are designed to reduce waste and increase the efficiency of the product by streamlining team structures and checking the wastes accumulated during tests or handoffs. 

The seven principles of lean software development,((Good1 Consulting. 13 October 2021. An Introduction to Lean Software Development. Retrieved on 19 October, 2021. https://www.good1consulting.com/lean-software-development/)) also known as the seven modern tenets of lean, recommend appropriate lean tools to enable software companies to achieve lean objectives by focusing its implementation around teams. The principles are:

  • Eliminate waste
  • Build quality in
  • Create knowledge
  • Defer commitment
  • Deliver fast
  • Respect people
  • Optimise the whole

Eliminate Waste

The most critical goal of lean is to eliminate any form of waste. Any process or task that doesn’t productively add to the value of the product is a waste, and they must be completely removed. However, while the result is usually the mere reduction of waste, it is recommended that software developers aim to totally eliminate it at all times.

But to eliminate waste, software engineers first need to recognize it.((Kelly Waters. Lean Principle #1 – Eliminate Waste. 101ways. Retrieved on 20 October 2021. https://www.101ways.com/lean-principles-1-eliminate-waste/)) More so, the identification of waste will enable software engineers to put tools in place to ensure that those wastes can be avoided.

There are seven deadly wastes((Good1 Consulting. 13 October 2021. An Introduction to Lean Software Development. Retrieved on 19 October, 2021. https://www.good1consulting.com/lean-software-development/)) to look out for in lean software development and they are:

  • Inventory waste (Partially completed work)
  • Overproduction (Extra features)
  • Extra Processing (Relearning)
  • Transportation (Handoffs)
  • Waiting (Work delay
  • Motion (Context switching
  • Defects

Build quality in

Delivering a product with the most achievable quality is the goal of any lean structure. However, in a bid to achieve quality, a lot of resources are wasted on testing code multiple times, logging defects and the time spent fixing those errors.  

The second principle of lean software development recommends that software developers adopt systems that automate quality results at every turn of the way. Some examples of tools that could help software developers achieve these are Pair Programming and Test Driven Development.

Pair programming is a practice that combines the knowledge and experience of two developers to avoid quality issues. Usually, in pair programming, one developer writes the codes while the other one scrutinizes the code for errors.((Kelly Waters. Lean Principle #2 – Build Quality In Lean Software Development. Retrieved on 20 October 2021. https://www.101ways.com/lean-principles-2-build-quality-in/))

Test-Driven Development is done by writing the tests first before writing the code. If developers can outline the ways in which their tasks would be assessed, they would be able to write more efficient codes due to the earlier consideration before writing.

Create knowledge

The earliest adoption of lean in the manufacturing industry found its success from the ability to simplify the knowledge of processes to be understood by all workers on the assembly line. In software development, the same thing is applicable. Developers have to find a way to create comprehensive knowledge to increase productivity. Two developers that know how to write certain programming languages are better than one, and an avenue for more people to learn has to be created.

With all the tasks assigned to a developer, there are a few  light – but important – things they could do to ensure that knowledge is documented.((Kelly Waters. Lean Principle #3 – Create Knowledge. 101ways. Retrieved on 20 October 2021.  https://www.101ways.com/lean-principles-3-create-knowledge/)) For example, programmers could do code reviews, engage in pair programming, organize training, thoroughly comment on codes, etc.

Defer Commitment

The name of this principle is not a license to irresponsibility as a developer. What this principle recommends is that developers should prevent making hasty decisions on commitment.

When faced with a huge decision, it is advisable to put it off for a while because the more time you have to deliberate, the more information you would have to make the right decision.

Deferring commitment also helps developers to make changes to their idea before eventually arriving at the best final decision to build.

Deliver Fast

Creating value is only possible if the product is meeting the users’ needs at the right time. This is why every software company wants to ship their products as soon as possible. 

However, software development involves too many things that makes delivering fast an impossible task. Features need to be built, tests need to be run (private beta in some companies) and there are other bureaucratic hold ups along the way.

One sure way to deliver fast is to build and launch a working version of the product that includes all basic features that the product needs, then subsequently add additional features. Software developers should also work within teams, assign work items to the right people and build in quality in order to go faster in building their product.

Respect People

Being decent and having regard for people in the workplace is a general requirement for healthy cooperation in the workplace. However, as a lean principle, respecting people goes quite beyond that.

Respecting people means assigning them to tasks that they are most knowledgeable about, and empowering them with the responsibility to make decisions on that task. As mentioned in the Create Knowledge principle, software companies are advised to engage their engineers in practices that impact knowledge.

Also, giving people the power to make decisions doesn’t mean that their decisions cannot be reasonably questioned. Effectively communicate concerns or suggestions about decisions to be made without disrespecting the expertise of the person being addressed.

Optimise the whole

In their book,((Lean Software Development: An Agile Toolkit. https://www.amazon.com/s?k=9780321150783&i=stripbooks&linkCode=qs)) Tom and Mary Poppendieck described two vicious circles that were often the case for structures that were sub-optimized.

Vicious circle 1: A client wants new features to be delivered quickly. The engineer sees the deadline as set against them, and rush the work. 

As a result, the engineer only succeeds at reaching a low quality result. More defects are found in the code, and code base complexity increases.

Vicious circle 2: Testing is overloaded with work. As a result, testing is rarely done, or is done a long time after the code has been written. Due to the absence of immediate feedback, the features will be developed further. More defects will be found in the code and the testers will have more work to do. 

These are examples of scenarios that lead to perpetual waste of time and resources while the product doesn’t get anywhere close to market. To avoid such failure, lean software development requires software engineers to map and optimise the entire value stream. Streamlining the flow of value between each stage would reduce the amount of resources spent, and the amount of time wasted during handoffs.

Handoffs can be reduced by building small co-located teams that have a variety of valuable talents. Such teams should be capable of building the product from start to finish independently, without having to refer work to other teams.

Teams organised this way would be able to avoid the vicious circles described above, and the diversity of their talents could birth creativity in team decisions.

Practices for Lean Software Development

Lean software development principles require perpetual practices to arrive at the perfect optimisation of production process and structure. There are a few extra practices that could help software engineers when implementing lean software development. Some of them are((Rostyslav Demush. How Your Business Should Benefit of Lean Software Development. Perfectial.   https://perfectial.com/blog/lean-software-development/)):

Kanban: This is an agile management system that helps software developers know what tasks other developers are currently engaging in. It reduces the waste of resources as a result of different teams building the same feature at the same thing at the same time.

Value Stream Mapping: This implies outlining the process of the product from its development to it’s delivery and all the stages it has to go through. Value stream mapping enables software developers and organizations to assess the gaps or handoffs at each stage, and optimise them to create lesser waiting periods.

Inventory Management: This involves reducing the ongoing tasks and processes by only starting new tasks when current tasks have been completed.