Lean Software Development Principles

The term “lean software development” refers to a set of principles that have evolved from the manufacturing industry. Read more about how it affects IT software development.

What Is Lean Software Development?

Lean software development is a set of principles and practices for developing software. It focuses on creating value for the customer by reducing unnecessary tasks and areas called “waste”.

The concept was originally formed by Toyota in the auto manufacturing industry, and the principles have been brought over to the IT industry.

Lean Software Development Principles

There are seven principles that are included in lean software development:

  • Eliminate Waste
  • Amplify Learning
  • Decide as Late as Possible
  • Deliver as Fast as Possible
  • Empower the Team
  • Build Integrity In
  • See the Whole

Let’s have a look at each of these principles in more detail.

1. Eliminate Waste

A principle of lean software development is the aim of eliminating waste. Waste is defined as anything that doesn’t provide the customer with any value. In a software world, this waste can be things such as:

  • Code that is written but not used or not providing any benefit
  • Documentation that is not relevant or required
  • Defects and low quality work
  • Waiting for requirements or information

So, if that’s what waste is, how do you reduce and eliminate it? This can be done in several ways, as defined by Mary and Tom Poppendieck in their book, Lean Software Development.

  • Reduce management activities and unnecessary tracking systems
  • Remove unnecessary approvals
  • Learn to see waste by asking yourself, “why am I doing this?”

2. Amplify Learning

The concept of amplifying learning is getting the software team to learn about the system and requirements as easy and as fast as possible. Traditionally, this is done using a lot of documentation and design.

Following this lean principle, there are several ways that learning can be amplified:

  • Use shorter iterations to get results to the customer faster
  • Use screen designs and communicate those to the end users and get prompt feedback
  • Build different alternatives to areas of the software to see if and how things work
  • Run the tests as soon as code is written, rather than waiting until later in the project

3. Decide as Late as Possible

This principle means that there should be enough flexibility in the system and in the process to be able to make decisions later in the project. We shouldn’t need to make decisions early on that are defined by the needs of the project.

This doesn’t mean that we don’t make decisions at all. It means that using an iterative development cycle and the “amplify learning” concept, we should be able to gather requirements and facts quickly, and then make a decision, rather than deciding early without all the information we need.

It can often be hard to change the way of making decisions to this method, as traditionally decisions are made early and committed to. The decisions made using the lean method should be based on feedback and facts, instead of predictions. This principle is something that is helped by other lean software development principles.

4. Deliver as Fast as Possible

Customers and users like to have software delivered quickly. It can be hard for them to understand why and how the changes take so long. Even if they understand, it’s still a good idea to get software delivered quickly, for many reasons:

  • Smaller changes mean less chance of defects
  • Users can see, feel, and operate with the changes or developments to the system, and make further decisions based on the updates
  • Faster releases means less time for users to change their minds

To be able to deliver as fast as possible, there are several things we can do:

  • Break work down into smaller, more manageable pieces
  • Set priorities for each piece of work
  • Implement parallel development – more than one person working on the release at one time

Using a quicker release model will be more beneficial to both the development team and the customers.

5. Empower the Team

In many organisations, managers are the ones that make the decisions and tell the developers what to do, and the developers go away and do it.

Using a lean method, the development team is empowered with more decision making ability. They are able to do the work that they need to do, make suggestions and recommendations to leaders and managers, and make assessments, which are all based on their own experience.

Management should be able to make these things happen and make the appropriate decisions as needed, to allow the team to operate effectively.

Motivation is also an important factor in this principle. Team leaders and managers should be able to motivate their team, and convince them that there is a more important goal or purpose that they are working towards. The goal should be clear, achievable, and relevant to the team and the work being done. This will result in a better work ethic of the team.

6. Build Integrity In

The integrity of a system is important to a customer. This is explained in two methods – conceptual integrity and perceived integrity.

Conceptual integrity means that the system’s individual components work well together as a whole. It should be flexible, maintainable, efficient and responsive. The design and usability should be consistent throughout, and it should reflect the requirements and the business problem it is trying to solve.

Perceived integrity represents the way that the system is being observed or perceived by the users. This includes everything from the way it operates, how it is delivered, maintenance, price, and relation to business problems.

Both concepts of integrity are important to the lean software development process.

7. See the Whole

This lean software development principle indicates that development teams should be able to see the “big picture” of the system. Software is no longer developed as a standalone system. In many organizations, they are interfacing with other systems, either directly or through data feeds. They may also be a part of another system, such as Intranet sub-sites.

Considerations need to be made when designing and developing these systems. There should be adequate testing in the release process to ensure the impacts to other systems are reduced.

Discussions should be had with other stakeholders to keep them informed of changes and to gather information about impacts to their systems and the business as a whole.
These seven principles are the foundation of the lean software development process. Hopefully this information has proved to be useful to you!