I find that many of us that work in technology want a solution to be great. Often perfect. Computers are so good at following instructions that we expect them to work as we intend all the time. We aim for being perfect in our code and we find “good enough” to be a low bar.
I think this is because many times we deal with code that barely works and gets deployed because it’s good enough. Maybe the code can’t handle a load or corner cases and that’s caused us some sort of stress or pain. So we don’t want “good enough”. because we’ve been burned in the past, either by our code or someone else’s.
However, good enough means to me that it is good enough for most situations. It’s not leaving something unfinished or undone, but finishing something that works well. I often tackle small projects or minor tasks in this manner, usually because of time crunches. I consider the performance impacts, but in a realistic sense. Not all of my code will be accessed by thousands of users trying to process millions of rows. There are plenty of systems where we know the code will be thousands of rows and dozens of users. We should write the best code we can, and spend time improving our coding skills over time, but we don’t need to over-engineer code too early.
At the same time, we should not be satisfied with code that we think will not meet the needs of our customers. Whether in function or performance. Sometimes we make quick decisions, knowing we will need to rework the code. In that case, we need to allocate time, file a bug ourselves, or do something else to ensure we revisit this code. That has been the case often with administrative code that I need to run today, but I know this will need to be run regularly over time. I might shortcut code with a cursor or loop, but plan on finding a better solution that performs better and is more robust. If the task can be automated, this means I need to include error handling, logging, and more.
Life is a series of trade-offs. I rarely get something done as perfectly as I’d like, but that doesn’t stop me from trying to be better over time. I can chase perfection, especially in code. If I regularly learn and change how I code, I find that my “good enough” becomes better and better every month.