Deliver as early as possible

One of the core Lean principles is deliver as fast as possible.a It means that you shouldn’t delay a deliverable if it could be delivered. It means that you should ship as soon as you have a product, and it means that you should make your development process fast. (Note that “as fast as possible” does not mean rush, it means as fast as possible, while still deemed safe.) The term is taken from more traditional manufacturing disciplines where development time is essentially expenses and post-release time is (mostly) a time of income.

As Lean has been adapted to Software Development, we have started using the same great ideas as they use in manufacturing: reduce queue size (big queues slow you down exponentially), involve customers so you are always moving the right direction (moving in the wrong direction makes you take longer to get to the goal), and so on.

But software development is different from manufacturing in that development time doesn’t have to be expenses without value produced. From Extreme Programming we get the idea of Incremental Deployment,b which emplores you to continuously deliver small pieces of functionality for the customer. If possible, start as early as your first iteration.

The customer instantly starts getting value (resulting in a happy customer) and you - the developer - instantly get feedback on your work. This improves customer involvement, and may solve other problems too. For example, a program that has never been deployed may have serious deployment issues, that are not discovered until launch. Deploying every week, or even every day, forces you to solve these problems before they even become a real issue.

My ten cents are this: when applying Lean to Software Development we would do well to emphasize that we deliver early in the process and not just early in time. And I think deliver as early as possible captures this meaning better.

a Poppendieck, Lean Software Development, 2003, Addison Wesley.

b Beck, Extreme Programming Explained, 2nd Edition, 2005, Addison Wesley.


Now read this

Explicit Plurality

Here’s a quick idea for making your code more readable. In your code you want a method to get a specific user, getUser, but you also want a method to get all users, getUsers. These two functions will inevitably have different interfaces:... Continue →