I remember vividly this scene from Finding Forrester, which, in my memory, goes something like this: Jamal is stuck. Forrester grabs the typewriter and proceeds to type furiously. Jamal reads what Forrester has written, amazed. Forrester says, “No thinking – that comes later. You must write your first draft with your heart. You rewrite with your head. The first key to writing is … to write, not to think!”
I have just realized that I tend to be struck by analysis paralysis nowadays. When I first started out, it never happened to me: I simply hooked up UI events to SQL statements, and I was done. Then I read up about design patterns and worked with experienced developers who would separate different concerns into layers. As a result I would think and think before writing a single class declaration – and get absolutely nowhere.
One day I noticed, especially at the architecture and design stage, that I would start a little bit, then I would look something up, and then I would get lost reading for two hours. The truth is that I’ve been so scared of making a mistake that I don’t dare start.
So from now on I resolve to just type. If I’m not clacking away at the keyboard then I’m not programming. This doesn’t negate the Big Design Up Front philosophy; I will try to produce a couple of paragraphs of functional specs as far as I possibly can. But stopping to think too much is definitely not progress.
You might have heard that Fred Brooks once said, when building something, plan to throw the first version away; you will anyway. He has actually retracted that: he says we should plan to continually iterate on it.
And you can’t continually iterate if you’re not typing.