In the beginning there was only Code. And the Code was in text files.
Sometimes there was a lot of files so you zipped them and hopped about the place sharing the Code.
With all that Code in hand, you might as well have been moving on crutches...
Nobody really knew who, what or when something changed.
So we added Version Control
It made it easier to lug Code around. It got us places. Not very far to be sure and sometimes the wheels came off (I'm looking at you vss). You got to find out who changed what and when, but still, there was only Code and a lot of work was needed to push the cart around.
So we took our rickety cart of Code and added B.S. - a build system that is...
The wheels did not fall off that often and we got to lug more Code around faster. And we got the Binary! Easier to get off the ground, but still a bit of work to setup and test.
But it finally looked like we had something promising.
So we added Continuous Integration
Ah! This actually reduced the pain of testing to bearable levels. If you are lucky, you get to drive your Code and Binaries to their dates with their Unit Tests in a spiffy Delorean.
It is this infrastructure that gives us the time and the resources to talk about test drivers, performance, scaling, testability. Hell, it gives us the time to go to conferences and talk about...
This post is a somewhat expanded version (sans the gesticulations) of a lightning talk I gave at GTAC 2010.