|
|
|
|
|
by fifticon
1589 days ago
|
|
I have my own theory on this.
Green-field projects are usually whipped up and rolled out by the experienced devs in the shop.
Once the boat is in the water and floating,
the senior devs are posted off to next new-dev initiative,
and the following maintenance/deployment work is assigned to less and less senior devs, and/or student programmers.
Within 2-3 years, those inexperienced devs have mangled the original design into unrecognisability, and the application accumulates instabilities from their bolted-on "fixes".
A different perspective is that the original creators are never allowed back to fix their design mistakes.
I don't know if it's universal, but I have sure seen it in a lot of places, and I have myself been in most of those roles hinted at. |
|
I wouldn't necessarily blame it on a lack of seniority or inexperience, it's a matter of not knowing the initial style, decisions, and limitations, as well as the vagaries of time. I find myself creating duplicate functions not because I wouldn't reuse the ones that exist, but because the original one was hidden away in a different place than I'd ever think to look for them. My approach is different and drifts even further over the years, I can't help it, so that the project starts to look stranger and stranger comparing the old code to the new. The original designers would find their style drifting too if they had to take care of a system for that long. They are just lucky enough that their style drift has project cut-offs, so each slice seems more cohesive.
I also don't know if this is a current maxim or not, but there should be a software principle that matches Peter's - every successful system will grow until it reaches a point where it's no longer successful. More and more requirements get added on, and unlike initial requirements where you could justify keeping scope tight due to staying lean, a system needs to grow beyond it's current limitations or it dies.