20 April 2023
Half the challenge of software engineering in a startup is deciding what should be nailed down now and what definitely shouldn’t be.
You’re gonna get multiple at bats at the same code. Most code doesn’t need to be perfect today.
Doing this well is where speed comes from.
You can do this poorly in two ways and both slow you down, but slightly differently:
- Nailing too much down
- Not nailing enough down
Nailing too much down causes up front costs to balloon and you add unnecessary overhead to changing things that are likely to change (multiple times) in the future. The ease of changing the system stays relatively flat over time.
Not nailing enough down causes your up front costs to stay low, but over time your system becomes brittle and resistant to change, slowing you down in the long/medium term. The ease of changing the system dramatically increases over time as you add more features and complexity.
The sweet spot. Nailing the right things down. Up-front costs aren’t as low as not nailing anything down, but much lower than nailing everything down. The ease of changing does decrease over time, but not dramatically and will be easier (asymptote?) than nailing everything down.
From a Twitter thread.