With a title like that you may expect me to say the uncertainty principle is the fact that nobody knows how long it will take to develop a piece of software. Well it’s not, it’s quantum mechanics, man, and you’re never going to understand it.
I may not understand it either but I can still blog about it!
Apparently, the quantum mechanics view of the world is that of the possible alternatives, each unknown future exists simultaneously until an act of measurement is made and the matter is decided, whereupon this cloud of possible futures collapse into the “actual” one that was observed. WTF? Yeah I know.
Heisenberg.jpg
Usually this kind of craziness is discussed at the subatomic level where our standards for common sense are much lower. If you’re completely lost, you should go read about Schrodingers Cat.
So what has that got to do with software?
Here’s an interesting tweet from Jason Yip on productivity without testability:
What does it even mean to have high developer productivity but very low testability?
And I thought “Good question”. But I had no witty response to clog up twitters servers with and so left it to percolate in my mind.
Then I realised is that unit testing is a measurement which decides whether or not a feature is present. If the test fails, the feature is absent.
Untested features exist in a quantum state where each of the possible states of implementation are simultaneously true until the point at which a test is written (or a user tries to use the feature) and the matter is decided.
So untested features may exist, or they may not, but you won’t know until you write the test.

Quantum Mechanics and Unit Testing