Aug 22

Mission Critical

Subtitled:  You don’t build a nuclear weapon like you build a cabinet.

The first of my heresies – Don’t use agile techniques to build mission critical apps.

One commenter replied “Why not do agile with a zero defect mindset.”

It’s a fair response, if every defect could be found through “typical” testing.

But I’ve done enough mission critical application development, and read enough about others doing it, that I know that the problem is that there are incredibly subtle bugs, that are nearly impossible to discover, through any amount of brute-force testing.   Bugs with timing, with unusual states, with unusual inputs, with combinations of all three.

If you’re going to be building something where people’s lives depend on its proper functioning, you owe it to them (and to your internal customers) to go down every path, inspect every variable, bullet-proof every pathway.  And the most effective way to do this, is, unfortunately, by designing the logic up front – focusing a lot of attention and care with a number of brains working in parallel on exactly how to build certain subsystems and various elements of the system.    Every change, every tweak, everything needs to be inspected and approved and debated before it is ever written.

Having said this – this is an incredibly expensive way to build software.   And 99.9% (if not more) of software, including a lot of stuff that is important and valuable, doesn’t need to be written this way.

And to anticipate the natural objection – yes, I know that bugs still happen, even with this approach.   It’s just the best way that I believe one can build software that is so important that it must get done right the first time, where cost and time are not the primary concern.

Having said that, I believe that one can isolate those software components, and build the rest of the system (the “mundane” 99.9+%) using agile methods.   I believe that you can also build the mission-critical components using a TDD approach for your own benefit, that you can build it in stages, and provide agile-style visibility of your progress as you go.

You just can’t invent it as you go along.

I look forward to your comments.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>