I'm reflecting about similarities and differences between Lean and Agile software development to challenge and deepen my understanding and gain new insights.
You are welcome to add your comments with more reflections on similarities and differences.
My reflections start with this interesting paper about similarities between Lean and Agile:
When you’re Agile you get Lean by Charlie Rudd.
And continue with the book "Prioritize, focus, deliver" by Tomas Björholm and Hans Brattberg from Crisp that name this
long list of things that Lean have in common with Scrum and XP:
- Prioritization and focus, transparence, high quality, iterative and incremental development, cooperation to reduce misunderstanding and to ensure the business goal, effective face to face communication, reducing information hand-over and intermediaries, IT and business speaking a common language, effective planning just enough just when needed, encouraging and welcoming change, simple tools that don't hinder process efficacy, decentralized delegated responsibilities, adopt a Pull approach and commit accordingly to the actual capacity, good functioning team that include business people, continuous improvement (kaizen)
Here more references about the deep relation between Agile and Lean:
-
Agile Vs. Lean Misses the Point
-
AgileVersusLean
-
Learning together: Kanban and the Twelve Principles of Agile Software
And here follow my own reflections.
When talking about Lean, I do it with the awareness that different schools of Lean exists (i.e.
Poppendieck, Womack, Jones, Don Reinertsen, Alan Shalloway). And I refer to the original values and principles and practices from the Toyota Production System and the Lean Product Development adapted and extended for software development and with the focus on people like in the
Eiji Toyoda way.
With Agile I mean what is described by the authors of the Manifesto, of XP, of Crystal and of XP.
Beware! This is my subjective view/interpretation based on my personal understanding and experiences and is the specific contexts I worked within.
Don't be surprised if your view is different.
People) I've found Agile and Lean quite similar in the focus on people (i.e. co-workers and suppliers, stakeholders, final users) and mutually beneficial cooperation & interdependence, that is bigger then the focus on processes/bureaucracy/procedures/contract negotiation:
- about respect of people (i.e. of their skills, commitments, time, needs, purpose)
- about alignment of responsibility and authority
- about honest transparent communication and cooperation (i.e. distributed cognition, bottom-up initiatives, inclusive consensus, accepted/volunteer responsibility)
I've noticed this focus in the original TPS ideas, I've noticed less in Lean practice in software development. But please send me references and links and stories, I'm happy to be proved wrong and learn new things when that is the case!
Complexity vs System approach) this is where I've noticed some differences. Agile from the beginning include concepts and approaches from Complexity Science and Social Complexity. This generated many misunderstanding and free interpretations (think about the many misunderstanding around self-organising teams) but now the understanding is improving and promising. While Lean that came first (TPS have his roots in the 1900-talet, Agile in the '80-'90) is influenced by preceding theories and not from more recent insights from Complexity. I.e. :
- Social Complexity: Agile take into account the social complexity that arise with wicked problems, the difficult to reach certainties in how to solve wicked problem and to reach agreement. Agile take into account also the inherent ambiguity, the multiplicity of points of view and the fragmented reality faced by group of people looking into a wicked problem. So in Agile frameworks there are many practices to deal with it while in Lean there are not such specific practices/principles with such goal with exception of the generic principles of deferred commitment and continuous learning that can help.
- Complex domains - Complicated domains: Lean relay on measurements like Agile that focus on transparency so there can be continuous inspections and adaptation. Lean relay on statistics and cause-effect relation more then Agile that recognize also the existence of domains/problems where there are no stable cause-effect relationships (repeating the same actions give different results every time). Agile recognize also the existence of unknown unknowns, the possibility of unexpected unpredictable events and things that cannot be measured. The focus of Lean on cause-effect relation can lead to wrong conclusions for problems in the complex domains.
Tom De Marco that once said "You can't control what you can't measure" recently changed his mind about it (read "Software Engineering: An Idea Whose Time Has Come and Gone?") and recognized that "we need to reduce our expectations for exactly how much we’re going to be able to control, no matter how assiduously we apply ourselves to control".
Cooperation/Coordination) - Lean have clear principles and tools to look at how people work together (cooperate and coordinate) and how to deal with external dependency (with other teams, with external team members, with suppliers and with customers) . Lean have principles and tools to reflect on the flow of the work and to reflect on the whole value chain from concept to cash. Agile have i.e. the Retrospective and have the goal of maximizing the value for the customers (i.e. look at the backlog and at the product owner) while don't define specific tools to use during the retrospective or in defining the prioritization of the backlog or of the next iteration, while Lean does.