Hi Folks, I know it’s been more than a month from my earlier
post. I had been busy with my certification preparations, apologies for not
maintaining constant pace. Till I start writing this post, I was thinking Lean
as one of the agile methodologies but it is not. It is beyond that. It can be
part of any agile methodology by providing its values, principles and practices
to implement to eliminate waste & improve efficiency. In this post let’s
discuss about Lean History, Lean’s connection with agile, Lean values, Lean
principles and Lean practices. Let’s get started with Lean history
Lean – History:
1988: The term “Lean” was first coined by John Krafcik in his article,
"Triumph of the Lean Production System," based on his master's thesis
at the MIT Sloan School of Management. Krafcik was working as
a quality engineer in a joint venture in California by the Toyota, GM (General
motors) and NUMMI (New United Motor Manufacturing, Inc.)
1991: Word “Lean” was mentioned in the book “The Machine That
Changed the World: the Story of Lean Production” by James Womack, Daniel
Jones, and Daniel Roos as a term to describe the Toyota management approach. The
idea that lean can be applicable to software development is developed only
after 1-2 years after the term was first used
1992: The term Lean Software Development was first coined as the
title for a conference organized by European Union in Stuttgart, Germany.
1993: Robert “Bob” Charette explored better ways of risk
management in software projects and suggested the concept of “Lean Software
Development”
1995: Five pillars of Lean thinking are defined in the book
titled “Lean Thinking: Banish Waste and Create Wealth in your Corporation” by Womack,
James P and Daniel T. Jones
Five pillars of Lean thinking are value, value stream, flow, pull and perfection. These pillars have become the working definition of
Lean for the next decade. People started identifying waste activities in the workflow
and started eliminating them to reach perfection which made Lean to reach wider
audience. Since then eliminating waste has become exclusive property/practice
of Lean till date.
Womack and Jones didn’t share the definition to the world,
Toyota management principles are difficult to describe or to analyze. The word
“Waste” is described in detail with three Japanese terms:
Muda – literally meaning “waste” but implying non-value-added
activity
Mura – meaning “unevenness” and interpreted as “variability in flow”
Muri – meaning “overburdening” or “unreasonableness”
In any process, perfection is achieved through identifying and
eliminating the waste (non-value-added activity). We do not have specific
definition for Lean as there are many
How Lean is connected with Agile:
In 2001, Bob Charette was invited to attend the meeting at
Snowbird, Utah, where the agile manifesto for software development was
authored. But Bob couldn’t attend it. Despite of Bob missing agile manifesto
meeting, Lean was considered as one of the agile approaches to software
development.
Lean Software Development – Definition: it is very challenging
to define Lean Software Development
as it is not equal to specific method or process. Instead we could say any software
development process is “Lean” if it is aligned with the values and principles
of the Lean Software Development. So, one must tailor his/her software
development process by understanding Lean principles and by adopting the core
values of Lean. Let’s discuss on Lean values and principles
Lean values:
In 2011, the Lean Systems society published a set of values.
Those values are
·
Accept
the human condition
·
Accept
that complexity & uncertainty are natural to knowledge work
·
Work
towards a better Economic Outcome
·
While
enabling a better Sociological Outcome
·
Seek,
embrace & question ideas from a wide range of disciplines
· A
values-based community enhances the speed & depth of positive change
Accept the human condition:
To develop any product, we need people (Human beings) and
process. So if you want to develop any product, you need to deal with process
and people. Dealing with human beings is quite complex as human behavior is led
by their emotions, thoughts, traits. Very important thing to note is that human
behavior is not constant; it changes with stress, situations, workload and
fatigue. Thus human psychology must be considered when designing the processes
within which humans work. Accept and embrace the human condition at any
situation rather than to denying it and expecting robot like behavior.
Accept that complexity & uncertainty are natural to
knowledge work:
In software product development, there are many unpredictable
things like the behavior of customers, product market, defects, required rework,
process workflow and team work. There is high chance of random behavior in all the
things mentioned. The purpose of the project, vision and scope tend to change
based on these unpredictable things. In most of the project initial stages
complexity and uncertainty is unknown & is known up to some extent after
several studies which helps in managing risks. But variability can’t be
anticipated in advance. Thus systems of Lean Software Development should be in
a position to adapt to changing circumstances
Work towards a better Economic Outcome:
Lean Software Development should focus on producing a better
economic outcome. Let’s see who deserves what
Investors and owners of businesses deserve a ROI (Return on
investment).
Employees and workers deserve a fair rate of pay performing their
work.
Finally, Customers deserve a good product/service for a fair
price.
Better economic outcome is nothing but more for less by managing
the capital in most effective way possible. Capitalism is acceptable till it
contributes business value and customer satisfaction.
While enabling a better Sociological Outcome:
Organizations need to create a great place to great work where
employees respect each other by accepting different human conditions; in turn
it develops a system which respects the psychological and sociological nature
of people
Seek, embrace & question ideas from a wide range of
disciplines:
Teams need to seek continuously for new ideas, brainstorm on it
and embrace them to improve quality of process and product. This kind of
culture needs to be developed in all disciplines involved in software product
development
A values-based community enhances the speed & depth of
positive change:
Share your new ideas/innovations and discuss with a value based
community which in turn gives more improvements as many people practice your
ideas in their projects. Sharing knowledge with good community always helps in
going deeper with the positive change and helps in continuous improvement
Lean Principles:
Coming to Lean principles, there are 7 lean principles which
seems to agreed & practiced globally with most of the software development
processes.
The 7 principles of Lean Software Development are
1.
Eliminate
Waste
2.
Create
Knowledge
3.
Build
Quality In
4.
Defer
Commitment
5.
Optimize
the whole
6.
Deliver
Fast
7.
Respect
people
Eliminate Waste:
To reach perfection, you
need to identify all non-value added activities in the process and eliminate
them. Waste can be in any form i.e. communication cost, co-ordination cost, people
meetings, rework etc. Team needs to eliminate all these to increase efficiency
in people, process and product quality
Don’t create anything
which doesn’t give value to the customer. You need to be careful with the
process you follow, people in your team that both are creating value to the
customer.
Value has a value only
if its value is valued. So, create innovative and technologically advanced
products which are valued by your customers. Eliminate anything that does not
add customer value
Developers need to write
less code as it is directly proportional to the tests they need to write & automate
while developing software
Create Knowledge:
Create a work
environment where employees are continuously having scope to improve and they
are working on it. Team should be like a small research institute, where they
do lot of experiments and share the output with value driven community.
Team should get trained
in problem solving methods. Leaders should listen to their team members and
encourage them to find solutions to the problems encountered.
Use
short iterative cycles to provide quick, constant feedback to ensure focus on the
right things and make sure that team is working constructively on the action
items identified & set.
Build Quality In:
Quality product developer
needs to think about product intrinsic quality before he/she starts writing
single line of working code, should not wait till integrating with other code
Automate wherever possible
i.e. automate anything which is routine like unit testing, integration testing,
builds, installations.
Refactoring plays main
role in achieving high quality of the software. Refactor the code, the tests
and the documentation continuously to keep it simple. There shouldn’t be any
duplication
Keep
Validating and re-validating all the steps involved in the process. If you find
any metric or practice with no value, discard it.
Defer Commitment:
Don't make decisions
until enough is known to make the decision, Defer important decisions to the
later point till it is mandatory to decide so that you will be discovering more
information about the same day after day. Sound understanding of the problem is
mandatory to make the decision
To start any work with
uncertainty, start with known information and explore the unknown. The most
important thing is to keep the team in the right direction
Increments developed
should be coupled as loosely as possible to enable implementation in any order.
Implementing change will be easy in later stages as components are not that
dependent on each other
Optimize the Whole:
Optimization should
happen by keeping whole system (or process) in mind and shouldn’t optimize
parts with the hope that it will optimize the whole by itself.
Always focus on the
entire value stream even if you are working for a small change requested by
stakeholder i.e. customer.
To optimize the whole,
Organizations need teams with great leaders, great engineers, business
analysts, process coaches, sales, marketing gurus, secretaries, functional
architects etc. All together can deliver great final products to their
stakeholders
Deliver Fast:
To deliver fast, you
need to repeat the good things which worked well for you and eliminate
practices which created obstacles for you
Management need to keep
searching for hidden issues within the team whether it be process or people. Stabilize
the work environment based on continuous feedback from the team.
Keep the work in
progress items based on your capacity (Velocity). Learn to say NO to new work
items if you feel it will impact your current work/or over burden you
Focus on all the
possibilities by which you can reduce cycle time. Brainstorm, come up with
innovative ideas, stream line the process and reduce time to market
Respect People:
Respect your team &
team members for what really it is, for what they do and how they do. Encourage
them for their passionate involvement in the organization’s work
Work culture, the most
important factor created by employees & organization and empowers employees
in the organization
Organizations need to
provide training and guidance to the leadership team members to implement lean
thinking in their work environment
Move responsibility and
decision making to the lowest possible level, because employees at low level
know better how to implement difficult algorithms and apply state-of-the-art
software frameworks than anybody else. Let them think and decide on their own.
Lean Practices:
Apart from lean values and principles, there are quite a number
of practices commonly adopted. Some of the lean practices are mentioned below. Let’s
discuss about these in detail in later posts
ü Cumulative Flow Diagrams
ü Visual Controls
ü Virtual Kanban Systems
ü Small Batch Sizes / Single-piece
Flow
ü Automation
ü Kaizen Events
ü Daily standup meetings
ü Retrospectives
ü Operations Reviews
To conclude this post, there are no hard and fast prescriptions
to follow from Lean Software Development. Follow any of the available software
development methodologies but make sue that actual process definitions are
aligned with the Lean principles and values to be lean. Definitely Lean is a
methodology which will trim the fat from the software process (Starting from
requirements to product delivery to the customer)
Hope you got an idea of
Lean software development and its value and principles. Thank you for stopping
by and reading my blog, it means a lot to me. Help me to improve by giving your
feedback. I appreciate it very much! Please feel free to reach out to me
Linkedin: http://in.linkedin.com/in/sathrambalaji
Facebook: https://www.facebook.com/sathrambalaji
-Balaji Sathram
Great post Balaji... Keep continue working on providing such useful information which will benefit all...
ReplyDeleteSure Sandeep, will continue..thank you for support...
Delete-Balaji
Excellent Work done Balaji... This is more-then enough to understand the concept in-detail.. unique information about Lean Software development i would say without any doubt.
ReplyDeleteThank you lakshman... Happy that it helped you to understand the concept...
Delete-Balaji
nice post.... Keep going
ReplyDeleteThank you manoj....:-)
DeleteI was looking at some of your posts on this website and I conceive this web site is really instructive! Keep putting up..
ReplyDeleteCiberseguridad
Agile software development I think this is an informative post and it is very useful and knowledgeable. therefore, I would like to thank you for the efforts you have made in writing this article.
ReplyDeleteI just want to let you know that I just check out your site and I find it very interesting and informative.. Offshore development services
ReplyDelete