The best laid plans of mice and men often go awry.
If I can, I would like to take you into my imagination. Let us pretend we work at Widgets Inc. Now, Widgets Inc has been around for awhile and is going through a phase in it’s life where the technical decisions made by previous generations no longer seem viable. Our company struggles keeping it’s current infrastructure going, while at the same time wants to make some serious changes to it. One of the biggest challenges, we believe, is our lack of leadership in the company. If we had leadership with a grand vision to unify and replace all of our old architecture things would be so much better!
If this sounds like more than imagination, then that’s because it is. I have worked with multiple companies in the past that struggle with this. The tech field is changing rapidly. If that wasn’t enough, the turnover rate for high level tech leadership changes pretty quickly as well. With both of these factors to consider; how can a company come up with a unified plan to resolve old architecture and produce new functionality that will out-live the previous generation?
The answer is we probably can’t. At least not in the magical way we wish we could. Every software developer loves the idea of green fielding a project to fix and unify the problems of the past. This only serves to perpetuate the problem as we re-discover the underlying issues in old projects. By the end, we’ve normally produced a more up-to-date mutation of the previous generation software. It will solve most of the problems we had and introduce new exotic issues.
How can we avoid this technological hamster-wheel of misery? So far what seems to work the best that I’ve found is to avoid grandiosity. Plans to alleviate pain points in small steps through refactoring are the longest lived, best changes. Grand plans are an anti-pattern that we can easily fall into. Try to solve small things by changing them, not replacing them. You’ll find that in time you will have done that anyway as a side-effect, but without the end result of painting yourself into a new corner.
TLDR; If you have a solution with a grand plan that requires months of work and is meant to completely replace your current software you’re probably doing it wrong.