A Tale as Old as Time
I think it’s more than a bit silly to talk about Vulcans and Apes. For one, the Vulcans, being unemotional, shouldn’t feel anything towards Apes. The Apes, being — well — Apes, shouldn’t care too much about the Vulcans. It’s an imperfect analogy to say the least. More importantly, this distinction fails to capture what’s really happening in the process of producing software. Software isn’t some binary distinction between mathematics and great user interfaces. In fact, I’d suggest that it’s just the opposite; it’s the synthesis of carefully reasoned, abstract thought with the quirks and strangeness of the “real world”. Software, when you look at it at a certain angle, in the right light, in the right company, might almost be considered a kind of philosophy.
Debates about quantifying this or that, whether this or that is “elegant”, about “perfect” and “imperfect” — all are completely beside the point. Great software doesn’t have to conform to any of these (essentially) false distinctions. Instead, great software is born when many people build a common understanding, a common foundation of knowledge, a consensus, maybe even a culture — and this consensus-like thing is then captured in computer code. That’s it. There’s no reason such a consensus, such a common knowledge base couldn’t appreciate both elegant algorithms and great UIs. (See Google, I think, for a company that actually tries to put this into practice even if they don’t always succeed.) Software is a way of bringing many different people together under a common understanding. It is primarily an exercise in knowledge generation and distribution. That this knowledge is captured in code that computers can understand is ultimately an implementation detail. (Though this “detail” has very significant consequences for, well, the planet.)
Again the real sin with most software engineering isn’t so much cleverness as it is a kind of short-sighted selfishness or, more precisely, a lack of respect. A failure by one party to give serious thought to the concerns of another. Clever programmers (Vulcans) don’t respect practical programmers (Apes). Most programmers don’t respect users. Users, frankly, don’t know what to think because they often don’t quite grasp what’s really at stake. This isn’t due to some genital defect though; users can be educated. The end result is that nobody is happy and the software is a failure so much as it fails to capture any kind of meaningful consensus.
Ironically, there is not anything new happening here. This is a tale as old of time. A bunch of tribes who think they hate each other but must, for various reasons, find a way to work and live together. And it’s a tale that doesn’t have to end badly and indeed many times it hasn’t. What’s necessary though, that crucial first step, is that absolute commitment that, no matter what, they will work together. Yes, you can’t make everybody happy all the time… but you can damn well try.