Startup Nugget #4: Choose the Inelegant Solution
Choose the hacky-inelegant-put-together solution before the good, well-thought one. There are plenty of times where there’s a need for a feature to be shipped, as we’re receiving pressure from stakeholders to have it available as soon as possible, or we have a deadline for a system integration with a partner and they make a last-minute change that in their eyes is “just this small tweak”.
A good engineer would spend a sensible amount of time thinking about a robust, generic, extendable, and testable solution, paying attention to all the moving pieces the aforementioned feature touches. But oftentimes there just isn’t enough time. It is counterintuitive but most of the time it pays off to have a hacky and half-baked solution with some duplicate code, hardcoding stuff around, and antipatterns all over the place. As long as it is ready to be shipped and resilient enough not to crash most of the time, it is better than wasting time with all the upfront preparation.
You are a startup, you need to go fast. There will be time to revisit this solution in the future with more time, a bigger dev team, etc...
I know this normally means that big pastiche of a feature will stay like that forever, and I agree that technical debt is bad, but you know what’s worse than having technical debt? Not having any because you lost momentum, ran out of funding and the project, unfortunately, died out.
Progress, not perfection.