I'm doing some research on how teams think about older codebases, and I'd love everyone's take on this. No wrong answers, just trying to understand how different teams or organizations define this.
Having worked on code that was anywhere from 1 to 30 years old, in my experience "legacy" mostly means, "we wouldn't do it this way now, but it's not an easy thing to fix so we're either stuck with it, or stuck with it for a while anyway".
"Legacy" means "don't blame me, I'm not saying it should be this way, just that is is this way".
Which is interesting because outside of code, the word "legacy" is usually positive.
To me 'Legacy code' means the person who wrote it (or most of it) is not fixing / changing it.
It implies you cannot ask them WTF is this. Or more critically Why did you do this? Which of course is critical to avoid the 'Chesterton's Fence' Which I learned about here on HN and find it such a critical aspect of documentation now.
“legacy” means that tens if not hundreds of people made something absolutely ridiculously amazing that has stand the test of time and probably made lives better for millions of people (depending on how large the customer base is)
Legacy means that you can't change the software because that would impact existing agreements, generate an unsustainable amount of work, break compliance. So for these reasons, you resort on workarounds or cut away a business required feature or a due technical refactor or maintenance that would make sense in terms of RoI.
If senior developers make PRs and they get closed, that's a big red flag. The cumulation of things you cannot do because it would break "traditions" becomes your inherited legacy.
No one has maintained it in a while, and if a change is needed, it seems like a full re-write would be the better option.
Or the whole company has moved onto something new, and you’re maintaining the code to keep the legacy systems going until everything has migrated off it… so it needs to run, but no one really cares.
It’s important enough to the company that the code is kept going as unchanged as possible. But not important enough that working on it will improve your career.
"Legacy" means "don't blame me, I'm not saying it should be this way, just that is is this way".
Which is interesting because outside of code, the word "legacy" is usually positive.
It implies you cannot ask them WTF is this. Or more critically Why did you do this? Which of course is critical to avoid the 'Chesterton's Fence' Which I learned about here on HN and find it such a critical aspect of documentation now.
Or the whole company has moved onto something new, and you’re maintaining the code to keep the legacy systems going until everything has migrated off it… so it needs to run, but no one really cares.