This comment speaks to me. I'm in a weird point at my job where I'm right at the tail end of supporting this legacy app I've worked on for years, and a brand new app my team will be building from scratch.
It's pretty surreal, because I've been dealing with many of the negative long term effects of decisions that were made for this app years ago, meanwhile I'm about to have to make a whole host of similar new decisions for the next app. I know there are going to be compromises, I know I won't be able to make it perfect, so finding that balance is going to be critical.
I'd love to hear from someone who's had to find that balance and what they've learned.
I'm sure you learned a lot about the problem from maintaining the legacy app.
There is some intuition that develops over the years, but honestly the only reliable way I've found of knowing how to properly solve a problem is solving it multiple times.
From my own experience maintaining legacy systems and then re-implementing them — strive for a system that future maintainers will be able to refactor instead of wanting to replace it, whatever that entails. Even if all of what you write will be refactored away, you've accomplished something if they're able to continue using the code base in some form.
It's pretty surreal, because I've been dealing with many of the negative long term effects of decisions that were made for this app years ago, meanwhile I'm about to have to make a whole host of similar new decisions for the next app. I know there are going to be compromises, I know I won't be able to make it perfect, so finding that balance is going to be critical.
I'd love to hear from someone who's had to find that balance and what they've learned.