Kill your darlings…
This post was written for the Fleck.com blog where I posted it on March 16, 2006. I’m posting it here so it is more easily accesible. The original post can still be found here, including some comments and pingbacks.
This last week I have been trying to finish the layout for the main user interface screens. And I just couldn’t finish them. I kept postponing my work, checking my mail, staring out the window and finding reasons to do other things instead. At first I thought I just had a (code)writers block but after 3 days I still didn’t feel like finishing my work.
I couldn’t even explain why I didn’t finish the design, after all, I had 90% of the screens finished and we only needed a few more pages. So yesterday Patrick and I were in the car and suddenly I blurted out ‘The design isn’t good enough. I want to start over’. Patrick looked shocked and confused and I explained to him that we were making things to complicated for users in the current design and we needed to go back to the basics of the service.
We went back to the office and decided to spend a few hours just trying to look at the whole thing with a fresh look. After 2 hours we were sweating, high on caffeine and extremely excited because of what we sketched on our whiteboard. We decided to throw away my 2 weeks work and implement a much simpler design. It reminded me of this great story which I’m going to ask you to read now:
From Folkore.org: MacPaint was good at drawing text, allowing the user to specify characters at any position, with any font, size or style. But once the text was instantiated, it just became pixels like everything else; you couldn’t go back and edit it as text. In June 1983, Bill thought he could do something about that.
Bill decided to try to turn pixels back into characters when you selected them with the text tool. He wrote a lot of elaborate code, probably as much as for any other MacPaint feature. First, he wrote assembly language routines to isolate the bounding box of each character in the selected range. Then he computed a checksum of the pixels within each bounding box, and compared them to a pre-computed table that was made for each known font, only having to perform the full, detailed comparison if the checksum matched.
Bill got his character recognition routines working well, and it seemed like magic, if you were used to the earlier MacPaint, to be able to recover and edit previously placed text. It wasn’t perfect, because it would fail to recognize a character if a single dot was out of place, but it was still very useful. Everyone loved the feature, and congratulated Bill for pulling off another miracle.
I was surprised a few days later when Bill told me that he decided to remove the character recognition feature from MacPaint. He was afraid that if he left it in, people would actually use it a lot, and MacPaint would be regarded as an inadequate word processor instead of a great drawing program. It was probably the right decision, although I didn’t think so at the time. I was amazed that he was able to detach himself from all the effort that he put into creating the discarded feature; I know that I probably wouldn’t have been able to do the same.
So why is this story so important to me? Because it shows a lot of courage to throw away your work when you realize that the final product will be better without it. And I was lucky that it was MY work that I thought we should throw away and not someone else’s. How would I have felt If I would have been happy with my work and Patrick would have suggested we throw MY work away? I would have resented the suggestion and been offended. Which I shouldn’t be. I should welcome the suggestion. That is why I think every developer should read the story about Bill Atkinson and MacWrite. Every day you should ask yourself
‘am I doing the right thing? Should I start over? Is this feature really cool or do I just like it because I CAN build it?’ and if the answer is no, you should be able to detach yourself from your work and throw it out of the window.
Like a rabbit chewing off its leg to get out of a trap…