The Illusion of Progress19 Dec 2014
Progress secularized, progress which pursues only the next invention, progress which pulls thought out of the mind and replaces it with idle slogans, is not progress at all. It is a beckoning mirage in a desert over which stagger the generations of men.
Loren Eiseley, The Firmament of Time
One of the hardest things I have had to learn as a programmer-entrepreneur is the idea that code is not as nearly important to the business as we like to think. After all, even the cleverest algorithms and finest software architecture must necessarily be subservient to the business. Certain aspects may be more important for the business at any given moment: marketing, relationships, customer service, structuring deals... the list goes on.
Indeed, focusing on programming can be a seductive trap in a startup, for it gives the illusion of progress.
That Old Saw...
There is a programmer joke which goes like this:
Weeks of programming can save you hours of planning.
Of course, this joke can apply to almost any other task, really.
I have had this painful 'joke' hammered into me over and over again. When I do not take the time to think, when I do not re-assess goals on a periodic basis, when I do not make long-term plans, Things Go Awry. It doesn't matter how much code I have written, how many problems I have solved in the interim: without a good long term plan, most of that work is simply wasted. Believe you me when I say that I have swallowed that bitter pill a great many times.
Nonetheless, even with that experience under my belt, taking the time to think and plan is still hard to do!
Why? I think it is because it is rather difficult for most of us, being human, to focus on long-term consequences. We view our future selves as strangers. Because of this, short-term expedients may be more satisfying than "doing it right," especially if one does not wish to think deeply about the problem at hand. And sometimes, addressing long-term issues requires great sacrifice and patience.
The Rationalist Delusion
Lately, though, I've been thinking that there may be another factor at work here.
I think that programmers and engineers are generally prone to the rationalist delusion, by which I mean most participate in the Western worship of reason and progress. (It must be said that this seems to be an uniquely Western phenomenon, from Plato and his pure rationalist fantasy of Philosopher-Kings, to Immanuel Kant who drove a stake through metaphysics with his first Critique.)
Computers are the very embodiment of progress, and we as programmers control these instruments. The habit of problem solving is simple and seductive: iteratively split a given domain into smaller logical chunks until these chunks can be individually dealt with. Most of the time, we obtain immediate feedback, and if we are lucky, good results. Logic prevails. As such, there is something very satisfying about this.
Alas, as everyone knows, working in the real world is messy and incoherent. In bitter counterpoint to the world of computers, there is neither rhyme nor reason to the order of living things. People are by turns ill-tempered, immoderate, and insensate. Dealing with vague and ever-changing intangibles can try the souls of the most doughty and stalwart.
Yet 'progress' of all kinds usually depends most on this irrational front. And that can be hard for programmers and engineers to accept.
We're All Delusional, Really
To return to the issue of long-term planning, the danger of the rationalist delusion is that we chase progress for progress' sake. In other words, fulfilling short-term goals can become an end unto itself.
This may seem obvious -- one should always keep the long-term in mind -- but you'd be surprised at how many people, particularly programmers and engineers, fail to either set a long-term goal or check in with that goal periodically.
For me, long-term planning means setting time aside to stare off in space, even as a thousand things need to be done yesterday. For me, it means foregoing elegant code for a dirty, real-world solution. For me, it means an explicit acknowledgment that not all problems can be solved, that there are indeed limits to my reach and ambition. And finally, for me, it means sacrificing my short-term desires for the (possibly unrealized) hope of a particular future.
Strange as it may seem, I have seen some start-ups flounder precisely because they fall into this trap. A clear symptom of this is when highly trained and motivated engineers focus exclusively on the minutiae of a project to the detriment of the company itself.
In the end, code is not important. Programmer time is cheap. What really matters are the long term plans of the business itself.