Lean Software Development

Lean Thinking

Introduction

Lean software development uses lean principles used in lean manufacturing to software development. Using lean principles various wastes produced during software development life cycle is identified, sources of wastes are pointed out and steps are taking to eliminate those waste sources. History of Lean started from Toyota Manufacturing as a need to compete in Japanese Auto Market where Toyota needed to build high quality, low cost cars in cost effective manner. It started with Taiichi Ohno also known as the father of the Toyota Production System (TPS) who introduced concept of waste in production system and various ways to eliminate waste. The goal of Lean thinking is the creation of continuous stream which delivers customers value with the least waste of resources within the shortest period of time. Lean emphasizes on the prevention of waste, which could be extra time, extra hour, space or material that does not add value to the product or service.

Lean Principles

Eliminate Waste

According to Lean Principle, waste is anything that does not add value to a product as perceived by the customer. In lean thinking, waste is a high hurdle which increases cost as well as decrease performance of the team. First step to eliminate waste is to identify waste. To prevent waste in various phases of the project, it is important to identify the waste being produced during project life-cycle. Following mapping between traditional lean processes and software processes has been presented to illustrate how these wastes related to artifacts produced within Software Development Process.

Wastes of Manufacturing Wastes of Software Development
Inventory Partially Done Work
Extra Processing Heavy Process Activities
Overproduction Unused Features
Transportation Task Switching
Waiting Waiting
Motion Motion
Defects Bugs in Production

For Software Development Process, partially done work creates integration problem as well as ties up resource within the project without clear project goal. Extra processing can be various process inefficiencies that do not add value to the project. Extra features that are not required by the customer is also considered as waste. Assigning people to multiple projects is also considered as waste as for a context switch between the projects take major chunk of focus and time. Waiting in software development processes is also one of biggest waste. Delays in project start, delays due to staff hiring, delays in review and approval, delays in development are all considered as waste. Motion for software development refers to process chain required to get a valuable project artifact or avoidable process repetition. The time and resource spent on the defects at various phases to identify and fix the defects are also considered high waste for software development process. Another way of identifying waste is by performing a Value Stream Mapping. It provides deeper insights about how internal processes work together to meet customer needs. It is a starting point for evaluating and improving the software development process.

Amplify Learning

With lean concept, learning is an important concept as it helps to minimize variability within the production system. For software development, learning is a continuous process which is embedded within the software development process as entire software build process revolves around learning experience. The best approach for improving a software development environment is to amplify learning. To help in the learning process, feedback loop should be shortened by implementing design cycles which gives developers chance to learn in short period of time. Learning should be focused to improve software development environment. For Software Development, using Set-Based Development for which communication is driven by constraints, rather than choices helps in enhancing the learning process to deliver what the customer needs.

Decide as late as possible

For domains where lots of things are unknown at front, Lean encourages late decision making as an options-based approach. It encourages for open changes in product development life-cycle and prepares project with the mindset. In regards Software Development it emphasizes on concurrent software development rather than traditional sequential development which forces designers to make ultimate decisions. Concurrent development usually takes form of iterative development which allows breadth first approach rather than depth first approach. Another approach on late decisions would be in the form of Options Thinking. An option is the right, but not the obligation, to do something in future. Traditional Software development has been a predictive process where Software development is specified in detail prior to implementation. Lean software development process implements many of options that allow decisions to be delayed until the customer needs are properly understood and technology is matured.

Deliver as fast as possible

Lean software development focuses on speed as the sooner the product is delivered or the sooner feedback is received, the better the learning and communication within the team. With lean software development, it encourages rapid software development to get rapid feedback which ultimately provides rapid learning and decisions. Speed assures that customers get what they need now, not what they needed yesterday. Rapid delivery allows you to keep your options open until you have reduced uncertainty. Compressing the value stream as much as possible is a fundamental lean strategy for eliminating waste. Pull Systems and Manufacturing Schedules are few of key concepts that can be leveraged for rapid delivery. The purpose of the pull system is to have a measured queue of materials ready to be “pulled” by the next process step. After the materials are “pulled” a signal is sent to the preceding process to replace what was taken. The key concept of a pull system is to limit work in progress to reduce overall inventory ultimately providing continuously flow in software development process cycle and yielding increased customer satisfaction.

Empower the Team

Lean emphasizes the fact that with well-equipped expertise and guided by a leader, team can make better technical decisions and better process decisions. For any team to be successful motivation is the intrinsic force that drive people towards their goal. Intrinsic motivation comes from the work we do, from pride in workmanship and purpose is what makes work energizing and engaging. Software Development teams can be considered as a multi-sided polygon where each side has its goal and there are various stakeholders providing these goals but at the end as a team it has a purpose of delivering business value. Hence these goals needs to be realized within the team and its helps motivating people. Intrinsic motivation is derived by self-determination and a sense of purpose, but it also needs susceptible environment to cultivate. Research has shown that that intrinsic motivation requires a feeling of belonging, a feeling of safety, a sense of competence, and sense of progress. Lean also focuses on Leadership. For Software Development projects, Leaders sets direction, align people, empowers the team and enables team motivation to cope with the change. For a successful project, leaders will provide domain knowledge, understand both customers and developers, and understand system’s constraints, interaction and unstated requirements.

Build Integrity

For a product, its build integrity can be examined under Internal and External dimension. Internal integrity (Conceptual Integrity) refers to the consistency between the function and structure of a product and External integrity (Perceived Integrity) is a measure how well a product’s function, structure and semantics fit the customer’s objective. For a software product, its build integrity is achieved through excellent, detailed information flow. Perceived integrity is a reflection of the integrity of the information flow from customers and users to developers. Conceptual integrity is a reflection of the integrity of the upstream / downstream technical information flow. For Software development projects Model-Driven Design can be used to construct domain model such that software implementation can flow directly from this model. Domain models much be both understood and directly usable by the customer or customer representative and by the developers actually writing the code. Using domain model helps to attain the ubiquitous language which helps in building both perceived integrity of the software product. Techniques on Refactoring, Testing, Communication, Feedback, and Scaffolding can be used to maintain the conceptual integrity within a software product.

See the whole

Lean believe that if you want to be effective at a solution you must look at the bigger picture. You need to understand the high-level business process that individual projects support – processes that often cross multiple systems. Software System now consists of various components working together to provide common goal. As with system grows larger integration is a challenge as a system is not just the sum of its parts but the purpose the system is trying to achieve hence holistic vision how these individual components is important in terms of systems thinking. Various informational measurement schemes can be used to measure performance which helps to see the overall software development quality.

References

  • Gabriel, E. (1997). The lean approach to project management. International Journal of Project Management, 205-209.
  • Mary Poppendieck, T. P. (2003). Lean Software Development: An Agile Toolkit. Addison Wesley.
  • Monden, Y. (1988). Toyota Production System, An Integrated Approach to Just-In-Time. Norcross, GA: Engineering & Management Press.