This weekend I cheerfully went to lose at a fencing tournament.
That’s not negativity, I’ve been fencing off and on for 30 years and I just started up again after a multi-year hiatus. I fenced terribly, which I already knew from practice. What I didn’t know, what practice couldn’t tell me, is where I would break down when I fenced for real.
I was just competent enough at the things I knew to watch for, that my opponents destroyed me in ways I didn’t even remember to practice.
What does this have to do with software and my mantra of Never Rewrite?
After years of not doing maintenance, I am a legacy system. Practice is literally a testing environment. If I had spent months working on my known problems, when I finally got to production, I would still have been destroyed by my blind spots.
You can choose to spend months rewriting only to have your system fail when you finally make it to production.
Or, you can choose to cheerfully go to production with what you’ve got so that you can see what breaks and iterate.