Reflecting back, the only time I’ve ever done something right the first time is when it wasn’t my first time doing it.
As a contractor, I encounter eerily similar situations at most places I involve myself with. Even businesses not in the same industry. Most businesses are trying to solve similar problems across multiple domains with slight variances. This is exactly the reason learning design patterns is a good investment of your time.
If I’ve ever come into a new project and nailed it on the first try, it’s only because I recognized the similarities from a previous project, employed the things that worked, and avoided the things that didn’t.
From the perspective of full time employees, it’s a challenge to be allowed to fail a few times at one employer. A contractor can have a few “challenging” gigs and then stumble upon the perfect redemption project for a win. A full timer would have to get a rare blessing from above to rewrite something for the third time.
Build something small and scale it
The axiom “build something small and scale it” is a great strategy. The problem is knowing exactly how something will scale. Users have a way of turning your well thought out schema on it’s head. Still, something small is far easier to rewrite. Build something small, release something small, rewrite something small, release a rewrite of something small, and scale it is not as fluid off the tongue. It’s more accurate, though.