Rumsfeld on Software – Handling Unknown Unknowns

Posted By admin on March 31, 2011 | Software Measurement, Software Quality

While former Secretary of Defense Donald Rumsfeld never spoke or wrote about software (as far as I know), his quip about unknown unknowns during the early months of the Iraq war is well known.

No matter what you think of Rumsfeld, his classification applies nicely to software and teaches us a lesson or two about building good software.

Rumsfeld's Classification Applied to Software

Some things you can test for right away. Some things you can anticipate and set aside to test for later. But the stuff in the top right in red is impossible to test for and not easy to plan for either. How an application and its environment will change is quite uncertain.

How do you handle this uncertainty?

By starting with static analysis, but not stopping there. You have to go beyond static analysis in five ways:

  1. Analyze and measure the application as a whole not just its component parts in isolation. This means going wide on technology coverage — not just a plethora of languages, but being able to handle frameworks and databases. It means putting your measurements in the context of the application as a whole, not just parts of it.
  2. Generate a detailed architectural view that can be readily updated. This gives you the visibility to see what’s changing.
  3. Make sophisticated checks of patterns and anti-patterns in software engineering to catch design and bad-fix problems that are otherwise impossible to find and eradicate.
  4. Provide actionable metrics that gives IT teams a sense of what to change (and in what sequence) to improve quality.
  5. Automate, automate, automate! If you do 1 through 4 above, you would then be automating design and code reviews — provably known to be the most effective insurance against unknown unknowns.

Tags: , , , ,

Enjoyed this post? Subscribe to our RSS Feed, Follow us on Twitter or simply recommend us to friends and colleagues!

Posted by admin

3 Responses to “Rumsfeld on Software – Handling Unknown Unknowns”

  • Joao Almeida April 4, 2011 at 5:50 am

    Hi,
    First of all, it is an interesting article.
    I have a doubt only on the green quadrant, why doy do say “Nothing Here”? What does it means?
    If there are unkown knowns, doesn´t this mean a lack of experience or trainning by the practitioner side?
    Best regards.

  • Jitendra April 4, 2011 at 8:02 am

    Good question Joao, thanks for pointing it out. You are correct — this square could list a practitioner’s lack of experience or training. In other words, he or she would not be aware of the things that they should be aware of.

    However, when I was writing the post I was thinking in terms of what the squares would look like, even to an expert. So I was constructing it as a best-case scenario to point out that even if we are all experts, a lot about how an application will change is unknown.

    Thanks again for your comment.

  • Alan April 8, 2011 at 12:06 am

    Have you read about the Five Orders of Ignorance (Philip Armour)? He covers this (and more) in his writings – definitely worth checking out.

    Oh – and your captcha shouldn’t erase the comment when someone mistypes :}

Leave a Reply