This year I have started giving a presentation for No Fluff Just Stuff conferences that introduces many of the most critical ideas from lean software development, and provides some practical ways to start implementing them in whatever project context you find yourself: agile, traditional, or otherwise. Here is the presentation abstract:
Successful software development is about building the right product at the right time for your customers. This means focusing attention on the right places in the portfolio of projects and products that your company provides, and optimizing the entire value stream from "concept to cash" for your customers and the development teams.
Agility is more than just adopting Scrum or some other agile process framework; it involves adopting a new set of Lean-Agile values, principles and practices through the entire software development lifecycle and beyond in order to provide value to customers earlier and more often.
Lean-Agile software development consists of frequent feedback loops, intense team collaboration, continuous improvement, business and customer involvement, baking quality in and consistent delivery of valuable software. Learn how these Lean principles and practices transform software development and the radical difference it can make in your development work and wider organization.
Lean software development is a subset of Lean Product Development, not Lean Manufacturing. It is foolish to blindly apply Lean Manufacturing practices to software development. The underlying principles of value, flow, pull and waste remain the same, but the way these principles are applied to software development will look fundamentally different.
As Paul Hodgetts points out in his excellent Lean is More white paper:
Treating software development as Lean Manufacturing leads us down a path of optimizing the mechanics of developing software, which can yield limited benefits but fails to address the much larger software product development issues.
I would put it even more strongly than this. Most of what software developers do is invisible, particularly when it comes to the thinking involved with design.
It's just not about the mechanics of the process, any more than writing a song is about the mechanics of playing the instrument or enjoying a meal is about the nutritional content of the food. Such reductionism is a false hope for improvement. For example, seeking to create a more efficient process by reducing or eliminating design-related activities in software development as waste (such as design meetings, writing design documents, refactoring etc) will inevitably lead to a product with little conceptual integrity, and fast-track it towards becoming a Big Ball of Mud. Asking developers to track hours as a measure of productivity is the fast-track to disfunction and decreasing productivity. Let's not reintroduce Taylorism to software development through the back-door of Lean.
Agile methods were developed by assembling the best practices from successful projects. While the combinations of best practices found in agile methods exhibit the core values and principles of a lean approach, it can be difficult to understand the reasons why agile processes work just from examining their practices...Mapping agile practices to lean concepts such as value, flow, pull and waste can help explain why agile works, and offer new insights to guide process improvements. (Hodgetts, p. 3)
To see this more clearly we can look through at Kanban and Scrum the lens of lean and agile principles. Kniberg and Skarin, in Kanban and Scrum: Making the Most of Both, point out that Scrum and Kanban are both aligned with the values and principles of both Lean and agile. For example:
- Scrum and Kanban are both pull scheduling systems, which corresponds to the JIT (Just in Time) inventory management principles of Lean. This means that the team chooses when and how much work to commit to, they "pull" work when they are ready, rather than having it "pushed" in from the outside. Just like a printer pulls in the next page only when it is ready to print on it (although there is a small and limited batch of paper that it can pull from).
- Scrum and Kanban are based on continuous and empirical process optimization, which corresponds to the Kaizen principles of Lean.
- Scrum and Kanban emphasize responding to change over following a plan (although Kanban allows faster response than Scrum), one of the four values of the agile manifesto.
While the batch sizes in Scrum are much larger (batching work into timeboxed iterations) and thus not as lean as Kanban, producing shippable code every 2 weeks is certainly much leaner than a more traditional process which might integrate and release something 2-4 times per year. The shorter you make the iteration, the more you are approaching Kanban.
As a DDD practitioner, one area where I think the careful application of Lean thinking holds a great deal of promise is in strategic design:
Agile and lean are not in conflict with each other as they may seem at first glance, nor are they incompatible approaches to process improvement... Lean Product Development offers several strategies and practices that can supplement agile methods, particularly in areas where agile methods have been criticized as lacking...the strategy of set-based design offers a balanced alternative to heavyweight up-front design approaches on one hand, and reactive, emergent approaches on the other." (Hodgetts, p. 3)
Instead of teams feeling that they constantly have to adopt expedient design approaches to meet Sprint deadlines, Lean thinking combined with strategic DDD frees them to focus their design work where it matters most for the competitive advantage of their business. It encourages them to reduce the amount of code they write themselves, cultivate domain knowledge, and explore models collaboratively with the business to maximize the potential to develop innovative custom software solutions that leap ahead of the competition in the marketplace.
To learn more about Lean Software Development, I highly recommend Implementing Software Development by Mary and Tom Poppendieck. This book is the definitive work on the subject at the moment.