Donald Rumsfeld made the concept of “unknown unknowns” popular recently, but I actually first heard the comment back in 1985ish. One of the Microsoft program managers I worked with was discussing his idea of a concept of “hierarchy of problems”:
Basically his postulate was that all problems that can be solved fall into three categories:
1) Known problems.
2) Known Unknown problems.
3) Unknown Unknown problems.
Known problems are the kind of problems where you know the answer. These are problems like “How do I fix this bug”. They’re also problems like “We need to rebuild the Exchange security infrastructure to use NT ACLs”. The problems are pretty well scoped and the mechanisms to implement the feature are well understood – it just takes time to figure them out.
Known Unknown problems are harder. We know that we don’t know the answer to the problem, but we have some ideas on how hard it will be to solve them, and we have some techniques for solving them. These are the problems like “The NT networking system needs to be faster”. Or “We need to add diagnostics to help the user”. These are no less important than the Known problems, but their requirements are typically vague in scope. Another characteristic of Known Unknown problems is that sometimes their scope is much broader than expected – “Add filesystem access to Exchange”.
And then there are the Unknown Unknowns. These are the REALLY hard problems. These are the ones that make you cringe. These ones are so hard that you don’t know enough to make them known unknowns. Some famous “Unknown Unknown” problems are: “Design a computer program to translate between English and German”. And of course the classic: “Design a computer program that will tell if face of the person checking in at the airport reservation counter is the face of a known terrorist.”
And then there’s this classic: “Write a windowed operating environment on top of MS-DOS that would allow for multiple graphical applications to run simultaneously. Oh, and you’ve got to make it work on a 4.77mHz 8088 processor with 256K of RAM on a computer platform with a graphics adapter whose highest supported resolution is 640×200 with 2 colors (black and white).”