Under-abstract to begin with

It's much easier to recover from no abstraction, than the wrong abstraction.

Abstractions come with a significant cost and a significant risk.

It's better to under-abstract to begin with.

Start with a few abstractions and lots of repetitions. Find repetitive patterns. If the pattern doesn't lead to bugs, don't fix it. It might look ugly but it's not hurting anyone. Try to generalize it and you risk adding bugs in the generalization. It only adds surface area to everyone.

Minimal API Surface Area