Here's a secret: I'm often wrong. I'm wrong many times a day. In fact, like most programmers I am so often wrong I have automated processes that tell me just how wrong I am. That's a pretty heavy frequency of wrong-ness.
I have (with some difficulty) come to terms with the fact that I am often wrong. It's an important step on the way to being right. In his book iPhone SDK Development, Bill Dudney describes writing software like this:
- First your code won't compile.
- Then, it will compile, but it will crash.
- Then, it won't crash, but it won't work right.
- Then it will work right, but it will be slow.
- Then it will be fast.
- Then it will be freaking awesome.
The point here is that it's very difficult to get to steps five and six without going through the first four. But "wrong" is only "wrong" if you leave it that way. If you don't stop at wrong, then wrong is just another way of saying "almost right."
I now embrace being wrong. And I think you should, too. Here's why:
Being wrong is better than being nothing.
Getting started on something new is one of the hardest things in the world. You want to start, but you want to start right -- you know, be efficient. Not have to redo anything. But that can leave you stuck in planning or research phases as you try to figure out on which foot to get started. Under most circumstances it's far less time consuming to get started, realize you made a fundamental error, then get started again.
Being wrong points the way to being right.
It can be frustrating when you don't know what the right answer is. But you know what? The wrong answer often reveals itself as wrong in pretty short order. At worst, you have one less possible solution. But more often than not you'll also have even more information about what it is you're trying to solve. And that's information you would never have had without taking a chance on doing something.
That trick is especially useful in a team, because:
Being wrong engages other people.
A lot of people are worried about making any decisions. They're concerned that if the idea is bad or the decision turns out to be poor that they will get blamed and ridiculed for it. But what almost everyone enjoys is the opportunity to correct someone else.
It's a little sad that the urge to criticize is stronger than the urge to contribute, but it is something that you can use to your own advantage. If you're relying on someone to make a decision but they seem paralyzed between choices, help them out by making an arbitrary decision for them. People who couldn't make a decision before will suddenly realize not only that you are wrong but what the right answer is and why. And they'll be more than happy to tell you about it.
Finally, you learn so much from being wrong.
Not making a decision is the same as making no progress. "Wrong" might seem like a step backwards, but in most cases it's really a step forward.
When my fellow programmers tell me they're having difficulty starting on a project because they don't know the "right" way to go about it, I tell them to do it the wrong way. Just do it. When you do it the wrong way the right way becomes apparent. Get it working, then get it working right. Get the problem out of your head and out where you can see it. Do the first steps, even if you're not sure they're the right steps.
Of course, I could be wrong about all of this. Am I? If you have an important decision to make -- or even a bunch of small ones -- what's keeping you from making those decisions? Why do you absolutely, positively, have to be right the first time?



Thanks, John
You can always learn from your kids. And thanks for getting thru to me. I’ll start.
Posted by dad on 04/09/10 at 4:00PM