Just Don't Build Crap
At my first consulting client assignment ever I was struggling with the design of a software component I had been tasked with. I remember thinking about it for at least a couple of hours, trying things out, and then wondering if this was actually the way to go forward.
Looking back, I am sure there was an unhealthy dose of impostor's syndrome involved, and the expectation on myself for it to be perfect.
And I think, most importantly: none of the options were really significantly better or worse than the other options. Looking back, it was impossible to foresee how the system would continue to evolve, and the interface was possibly way too irrelevant to have any major impact on anything directly business-critical.
I decided to ask a more experienced dev and consultant for his opinion. I presented the options I had come up with, listed the pros and cons and finally rounded it up with a: "So what do you think makes the most sense?". My colleague just stared at the screen for a few seconds, then another few seconds at me. Finally, dryly, with a shrug and a smile, he blurted out:
"Man... Just don't build crap".
I also stared at him for a few seconds and then chuckled nervously. Did I maybe not explain it properly? I knew he was technically competent and respected by clients and colleagues for his extensive experience and technical expertise. Was this the worst piece of advice I had ever received? Or actually the best?
Taking a step back and stopping the analysis-paralysis train from going full steam ahead might be the only really productive thing you can do at certain points in time. This applies even more if you, like me, consider yourself an over-thinker and a perfectionist.
As I read somewhere a few years later: "Perfect is the enemy of good".
As software engineers, our code will very likely not remain in a drawer forever. Chances are extremely high that at least one other person will have the pleasure (or horror) to stumble over our creation. The second we finish writing our code and check it in, it is already obsolete and at the mercy of whoever comes after you. If the code needs to be changed - don't doubt it for a second - it will either be changed as needed or be scrapped together with the rest of the ball of mud that has formed over the years. Without the gift of clairvoyance, with your current knowledge, some daring assumptions, and the best of intentions, this is genuinely the best you can do right now.
Does that mean we should not put any thought into anything we design? Of course not - the mantra provides the answer: the result would be crapâ„¢. Just don't build crap.
Next time you are stuck, instead of thinking: "Is this really the way it is supposed to be? Is this already good enough?", maybe you could stop working on it the exact second you manage to turn it into something that is just "not bad" anymore. Then wait some months and look back at it. Was it really that bad?
Let me know how it went!