Advice on a major tech upgrade that seems impossible

Posted by ish123@reddit | ExperiencedDevs | View on Reddit | 46 comments

I work at a smaller company that has been very successful over the last 25 years, but has been kicking the can down the road on tech debt for a long time. The sheer volume of the system is hard to describe. We have older J2EE apps that are stuck on Java 7 and an old middleware. We have a modern microservices+angular stack, and some functionality from the old apps has been rebuilt in the new stack, but for the most part, there is a very large number of pages and code that has not moved.

We are now getting pressure from the organization to update to a modern middleware and supported JDK. The problem is, it's tech debt all the way down. The web layer is on Struts 1. DB Layer uses an unsupported, very old ORM with no upgrade path. Code is spaghetti: There is some attempt at separation of concerns, but lots of JSPs have scriptlets and directly access the database. Stuff like that. We're talking hundreds of JSPs, thousands of classes, business logic in JSPs and Action classes, ORM objects used and updated everywhere, minimal unit testing, etc.

My job is to help the organization understand the task before us. Right now executives have the opinion that we can just swap out the middleware for something else. That does not seem possible. Going to modern middleware requires a modern JDK, which means we can't bring the old libraries with us.

Furthermore, I see no way to migrate one thing at a time and keep things working. The app can't run some pages on struts 1 and some pages on struts 7 or whatever modern MVC we choose. So to me, that means we are talking about a rewrite, where we start a new app and move over functionality that we do want to keep. That will be a monumental undertaking.