What is Lean Software Engineering?

Print This Post Print This Post

Email This Post Email This Post

Permalink

The mere juxtaposition of those three words is enough to start a fist fight in certain circles, so it’s probably worth elaborating on what I mean. To do this, let’s deconstruct the expression: Lean Software Engineering.

What do we mean by Lean?

A Lean production process is a demand-driven process that moves work requests through a managed and repeatable workflow as quickly as possible, in small batches and with a minimum of inventory. Lean production is on-demand production with a predictable delivery time and predictably high quality.

What do we mean by Engineering?

Engineering is a discipline for designing artifacts that have some measurable utility. People design and construct all sorts of things without calling it engineering, so what is the difference between engineering and mere craftsmanship? I’d characterize it as the difference between the questions:

Does this work?

…and…

How often will this work?

…which seems like a simple distinction, but the answer to the first question is an observation about the present, and the answer to the second question is a prediction about the future. The ability to predict the future with any credibility usually requires a great deal of information and analytical power. That credibility and the discipline that goes along with it is what makes a person an engineer.

What do we mean by Software Engineering?

If you’re reading this, then I’ll assume for the moment that you know what software is, so let’s go on to the more difficult construct of Software Engineering. All software that exists had to be produced in some fashion, but how much of it deserves to be called engineered? Again, I’ll argue that the answer is about specified reliability. If a system behaves like expected at a defined and predictable level of reliability, and does not behave otherwise at a defined and predictable level of reliability, then that system possesses the quality of being engineered, and was probably produced by an engineering process. If your team is capable of making accurate and credible predictions about the performance of your software in deployment, then you are probably practicing some form of software engineering.

So what do we mean by Lean Software Engineering?

Putting all of this together, it means the on-demand development of software with timely delivery and predictably high quality. Lean software production delivers new software in small increments with high frequency. In the new world of software services and online applications, this is the emerging dominant paradigm. The old world of packaged or integrated software, delivered in enormous monoliths once every few years, now looks increasingly archaic and undesirable.

The old ideas of Software Engineering were mostly about delivering those monoliths. Monolithic delivery was probably never a good idea to begin with, so the best the old model of software engineering could offer was advice on how to do something dumb, but do it well.

The new model of software development promises to deliver no more and no less than what the customer wants, when the customer wants it. Lean Software Engineering is about learning how do this consistently and with professionalism.