Comment on Reality check: Our Go backend stack
MajorHavoc@lemmy.world 11 months ago
Everybody thinks that this time will be different, and we will definitely build an elegant solution from the ground up.
It’s a helpful delusion, because we feel good knowing we won’t have to waste time refactoring later, once we actually understand the problem space.
Actual elegant code earns it’s existence by retaining and enabling thoughtful developers to work from one hack to another, with enough breathing room to try out the fixes they think of.
If I inherited your team tomorrow, our top priority would be fixing anything that causes slowdowns - especially lack of CI/CD and lack of test coverage.
My top priority would be enforcing collaboration patterns over grandstanding (and probably building the case to fire my worst grandstander), while telling every stakeholder that their pet project is on hold while I put the delivery pipeline in order.
Fun times, but also extremely usual in development shops.
colonist@programming.dev 11 months ago
Define elegant. I think in this case the first devs built elaborate structures. Maybe seen as elegant in the beginning. But it doesn’t really make sense to introduce abstractions and structures when you don’t know yet where the domain boundaries are, etc.
MajorHavoc@lemmy.world 11 months ago
You just defined it perfectly.
“Elegance” early on ends up being a mistake. The chosen abstractions look really nice, but turn out to be the wrong ones for the unique problem domain.
The first six times I encountered it, I thought the team got unlucky. Then I recognized that it’s a pattern/mistake that pretty much every new formed development team falls into.
Even when I’m on the team, I end up being “old man yells at cloud”, and they add early abstractions anyway. (Which I don’t mind… As they point out, there’s no harm trying to get it right on day one. The harm comes from believing we got it right.)
The benefit I can bring is introducing patterns that support refactoring: regression test automation, strong ruthlessly fast test pipelines, and chat-ops.