Agile, and more recently lean, have dramatically shaped the landscape of software development practices. The reason is simple, they both promise to deliver higher quality products to the market faster. In this artilce, we examine some of these agile and lean promises separately and explore when one set may be a better fit over the other or how they may be combined.
Overview of Agile
Although agile is fundamentally a value and principle-based approach to building software, the vast majority of agile practitioners and methodologies apply an iterative and incremental approach. These time-boxed iterations are commonly implemented with the very worthwhile goal of receiving continuous feedback and direction on the software features being produced. This maps nicely to the agile values of Working Software, Customer Collaboration, and Responding to Change.
With this in mind, agile practices tend to define value as something that is demonstrable to the customer. Features are prioritized by the business, but it is not often in the context of what can generate revenue. Therefore, a production release only happens when the sum of the features delivered in all iterations are deemed high enough quality as a whole.
Popular agile practices have emerged in the area of release planning, such as producing a product backlog, relative estimation, velocity, etc. All of these serve as tools that can help determine constraints on a project - timeline, budget, and feature sets - in a quick and effective way while maintaining the ability to adjust when needed.
Overview of Lean
Lean has a much longer history than agile. It is an accepted and widely used approach rooted in the manufacturing industry and has since been adopted in many other industries. More recently, it has gained significant momentum in software development. Given the relative newness of lean techniques and practices in software development they are not as well understood as those in the agile space.
Like agile, lean is a principle-driven approach. Its principles are focused on building better products with higher quality and getting them to the customer as efficiently as possible while generating the least amount of waste. None of this contradicts the values and principles of agile.
Kanban is a lean approach gaining wider acceptance and understanding in the software development community. Those applying kanban do so in a purely incremental manner. The notion of a time-boxed iteration is dropped in favor of completing a saleable and meaningful piece of functionality as soon as possible.
Kanban challenges practitioners to identify the smallest, most important features that have economic value to the business. These items form a lean backlog and are commonly referred to as Minimally Marketable Features (MMFs). These are analogous to agile features or user stories but are different in the qualification in that they can typically generate revenue independent of other features.
As a rule, an MMF will be worked through to completion before the next is started. Delivery of business value occurs with each increment and therefore a return on the investment can be realized much sooner.
A lean backlog is kept very short and intended to ensure that there is an optimal amount for work in the system. This helps reduce the waste from premature discussions and plans for features that are beyond the horizon.
These techniques and approaches can eliminate considerable waste in upfront and repeated planning through the life of the project. This is all in accordance with the fundamental lean concept of Just-In-Time (JIT). JIT aims to meet market and/or customer demand in the fastest way possible. Therefore, it is particularly amenable to more fluid environments where change is quite pronounced