
Complexity feels like progress. You add a layer, a pattern, a clever generic — and for a moment it feels like you're building something serious. Then six months later nobody, including you, remembers why it's there.
Complexity is a debt
Every abstraction you add is a loan against the time of whoever reads the code next — often a tired version of yourself. The interest compounds silently.
Make it work, make it right, make it simple. In that order — and don't skip the last one.
The boring solution usually wins
A plain function beats a framework you invented on a Friday. Boring code is code you can delete, debug and onboard people into. That's not a limitation — that's the whole point.
Reach for clever only when boring genuinely fails. It rarely does.

