This is a fairly well-written post with some good ideas and some generalizations that are going to get somebody in trouble if they follow all of them, e.g.
> TL;DR — Duplication is better than the wrong abstraction
Woah, horsey, hold on a moment!
While it's true that an abstraction can get you into trouble, that's not always true.
Over my many years I've heard a number of people say: "We have 100 copies of the same site, but slightly altered for each client, and we don't have time to go back and refactor them, we can't upgrade them, and we're three major versions behind. Want to come work for us? (Silence.)"
I've only heard one person say, "We refactored X and it bit us in the ass, because the developer didn't check when he/she was altering it and accidentally changed behavior for everything."
Partially because once people realize that they're in dependency hell, and no one can guess at how many thousands of places across 100 sites might be affected by a minor change in one spot, they don't even try. That minor change has become impossible (until the next full rewrite), or at least not feasible within a reasonable budget.
So instead changes must be made outside the generic shared code and you end up with 100 slightly different sites that can't be upgraded.
The trade-off isn't about the dangers of not refactoring v.s. refactoring. The trade-off is about time plus the aspect this article hammers, which is lack of knowledge about the future--i.e. if you made a multi-purpose multi-client framework to start with you might still be building things and rewriting them to fit them into even more unforeseen situations instead of having live code running for 100 clients.
* If you want to copy a site 100 times, go for it. But I know very few that ever thought that was a great idea, and each time it was a very specific case. Yes there are client-specific features and multi-tenant sites, but that's not what he said. He said "copy vs. abstraction" which is the opposite of refactoring.
As an aside, I'm really having trouble understanding how people in the HN community could be thinking I'm wrong on this.
I think I need to go to a forum that's more grown-up if this is how things are here now.
> TL;DR — Duplication is better than the wrong abstraction
Woah, horsey, hold on a moment!
While it's true that an abstraction can get you into trouble, that's not always true.
Over my many years I've heard a number of people say: "We have 100 copies of the same site, but slightly altered for each client, and we don't have time to go back and refactor them, we can't upgrade them, and we're three major versions behind. Want to come work for us? (Silence.)"
I've only heard one person say, "We refactored X and it bit us in the ass, because the developer didn't check when he/she was altering it and accidentally changed behavior for everything."