The worst thing about complexity in software is that it doesn’t announce itself. It accumulates quietly, one reasonable decision at a time, until one day you’re staring at a pull request and realizing you can’t confidently say what will break if you merge it.
I’ve started thinking of it like debt. Small interest payments at first. Then suddenly you’re spending more time servicing the debt than building anything new.
The hardest skill I’ve had to develop is recognizing when something is genuinely complex versus when it just feels complex because I designed it that way. If I can’t explain a piece of code to someone in five minutes, the problem is almost always the code. Not the explainer, not the listener. The code.
Simple doesn’t mean easy. Simple usually takes longer to write. But it’s worth it every single time.