Considering Lean as a Software Development Approach

Kayvan Kaseb
Software Development
8 min readAug 11, 2022
The picture is provided by Unsplash

Basically, the interest on Lean thinking, which originally emerged in the industry, is not exclusive to the software development industry. It has been widely adopted in different majors, from the healthcare to the clothing industry. In fact, it has been built on the philosophy of optimizing development time and resources in the production process by eliminating waste and maximizing value to the customer. Nowadays, Lean thinking is not only applied as a way of scaling Agile, but also a way of enhancing software development processes from a wider point of view. This essay will provide you with some main concepts and principles in using Lean as a software development approach.

Introduction and Overview

As a matter of fact, Lean software development is not an agile methodology. It can be discussed as a philosophy, which most agile methodologies, such as XP and Scrum, follow up these guidance in reality. Lean software development comes from the just-in-time manufacturing processes that is also known as the Toyota Production System. At first, it was announced in Japan in the 1970s and then made their way all around the world in the 1980s and 1990s.

Lean software development is a set of approaches offered to enhance productivity, quality, and customer satisfaction. Lean aims to eliminate from anything that does not add value to the product from your production process. Basically, these non-value-adding features of your production process are called waste. In the meantime, Lean emphasizes that the team should just only be focusing on tasks that add value to the product right now.

One of the major reasons that captured the attention of the software community was the focus of Lean on the organization as a whole. Agile software development was mostly devised to work for small software development teams; however, scaling Agile methods, like Scrum or XP, to operate a whole organization was not straightforward because Agile does not explicitly provide support in that situation. Thus, Lean thinking was recognized as a practical solution to be combined with Agile methods. Nowadays, Lean thinking is not only applied as a way of scaling Agile, but also a way of improving software development processes from a wider point of view.

In short, Lean is a way of optimizing the people, resources, effort, and energy of your organization toward creating value for the customer. Initially, it is based on two guiding principles as follows: Continuous Improvement and Respect for People.

According to MIT researchers, Lean is about “doing more with less” by ideally producing “the right things, at the right time and in the right place”. It means maximizing value and minimizing waste.

There are seven key principles for Lean software development as follows:

1. Eliminate Waste

2. Build Quality In

3. Create Knowledge

4. Defer Commitment

5. Deliver Fast

6. Respect People

7. Optimize the Whole

1. Eliminate Waste

Fundamentally, Lean software development wants you to remove any feature or issue, which cannot add value to the software product. Things that cannot add value are named as waste. Obviously, waste can cost you money and time. Now, there are some significant questions could be mentioned. First, what is the real meaning of waste in software projects? In non-functional section, too many meetings, too much documentation, useless features, and unclear or rapidly changing requirements could be classified as wasteful. However, in functional category issues of software development, we should not neglect some matters in writing code as wasteful. For instance, the future features of your project that the customer may never use. Besides, some defects in your code, code quality issues, excessive task switching, and too many features or tasks for a given iteration or release should be minimized and eliminated. So, by applying this principle properly, the development team can have a special opportunity to increase productivity and deliver working code quickly.

The second question in this topic is: How can we eliminate waste? A typical answer is focusing on waste in a software project and work towards eliminating all forms of it. As you know, in Scrum this occurs at the end of sprint retrospective. During the retrospective, the team looks back on the just-finished sprint and asks “What can we improve?” A lean team will change that question into “What was wasteful and how can we transform to be less wasteful next time based on continuous process improvement?”

2. Build Quality In

All organizations wants to build quality into their work. In addition, having an effective quality management in development process is one of the key factors in lean approach. Mostly, all agile teams will implement two techniques, which can boost code quality at the source: Pair Programming and Test-Driven Development (TDD). Another technique to enhance code quality in XP teams is constant feedback. Because the customer is part of the team in XP, they can assess new iterations of the product constantly. This means they can give the developers instant feedback on what is working and what is not. The important point for developers is that as soon as you find defects in your code, you should fix them immediately. Therefore, this builds quality in and eliminates waste at the same time.

Moreover, the customer requires to observe an overall experience of the system. This is the so-called perceived integrity. This means the the separate components in a software can work well together as a whole with having balance among maintainability, efficiency, flexibility, and responsiveness. One of the efficient ways towards integral architecture is refactoring.

Refactoring is the process of restructuring code, while not changing its original functionality. The goal of refactoring is to improve internal code by making many small changes without altering the code’s external behavior.

As you can see, a number of small changes in refactoring as an idea matches one of the two guiding principles in Lean development as we mentioned before (Continuous Improvement).

Lastly, automated tests are also considered as a part of the production process. Automation testing can be useful for making sure that a software product meets strict requirements.

3. Create Knowledge

Lean software development is considered as an ongoing learning process. The team must learn new things constantly. In other words, developers do not usually write clear code on the first try. After having detected and fixed errors, they write an improved variation of the previous code. So, developers gain knowledge during development by solving problems and producing code variations. Also, by applying this way of thinking you can notice that the best approach to improve the software development process is writing code and building instead of documentation and detailed planning.

4. Defer Commitment

What Defer Commitment means is put off decisions, particularly irreversible ones as long as you can and only make them when you must(Decide as late as possible). As it is clear, uncertainty is an inseparable part of software development. As a result, delaying an irreversible design decision is a wise move. A key strategy for making commitments late is to reserve the capacity for the change in the future.

5. Deliver Fast

Unquestionably, companies that can bring quality products to market faster will have a competitive edge. These players will gain a larger market share and if they continue to release products quickly, they can be able to keep that edge over time. At the moment, the question is that how do you deliver fast? First of all, you should adhere to other lean software development principles, specially Eliminate Waste and Build Quality In. Both of these will enhance productivity and allow you to deliver product iterations faster. However, you should keep things simple. For example, you should not add too many features, and you should not spend time planning on future features. Additionally, you should find a reasonable solution, reasonable sets of data structures, and reasonable algorithms to implement your solution. However, you should remember that being perfectionist is the enemy of being fast. Finally, the best approach to deliver as fast as possible is to have an experienced, well-integrated, collaborative, self-organizing, loyal-to each- other in that team with the proper skills for your software product. Nothing will help more than having a good team.

6. Respect People

Respecting people is all about building strong, productive teams. It’s based on the idea that the people doing the work should make the decisions. Software developers should have the right to make technical decisions as they understand the details of their work. They can create a road map and follow it. It means “find good people and let them do their own job”. From the manager’s perspective, respecting your team means empowering the team to make their own decisions, including about task time estimates and decomposition, processes, tools, and design. This authority means that the manager must learn to listen to their team members and take their ideas into consideration. So, this can be able to build a team with open communication and decision-making transparency.

7. Optimize the Whole

“Think big, act small, fail fast; learn rapidly”

In general, the main idea behind Optimize the Whole is to maintain the entire product picture in sight as you develop. Lean thinking has to be understood well by all members of a project. Thus, developers should take charge of the overall efficiency of the software instead of focusing on their small portion.

Using Kanban

The Kanban method is a practice derived from lean manufacturing and other change-management systems. Just like lean software development, Kanban is not really a process. Initially, agile software development teams usually use the Kanban methodology to gain better visualization, enhance project workflow, and team communication. Kanban uses three ideas to influence a development process: work-in-progress (WIP), flow, and lead time. Work-in-progress is the total number of tasks the team is currently working on. It contains all the states in which a task may find itself (in-progress, done, testing, review, and so on). Flow is the passage of tasks from one state to another on the way to completion. Lead time is the amount of time it takes a task to move from its initial state to its completed state.

The Kanban Board, the picture is provided by the Apress Book
The picture is provided by Atlassian Agile Coach Website

Eventually, Kanban and Scrum have some of the same concepts, but they have extremely various approaches. You can see the below table for these differences:

Kanban vs Scrum, the table is provided by Atlassian Agile Coach Website

In conclusion

Lean development is a way to speed up the development process by working on challenges or problems, and eliminating unnecessary features, which do not useful in adding value. Recently, Lean thinking is not only applied as a way of scaling Agile, but also a way of improving software development processes from a wider point of view. This article discussed some main concepts and principles in using Lean as a software development approach.

--

--

Kayvan Kaseb
Software Development

Senior Android Developer, Technical Writer, Researcher, Artist, Founder of PURE SOFTWARE YAZILIM LİMİTED ŞİRKETİ https://www.linkedin.com/in/kayvan-kaseb