This could be stating the obvious, but legacy code does not necessarily correlate to age. A really bad situation is where your team is actively writing legacy code: written today, needs to be replaced tomorrow.
I have been involved with a greenfield project which replaced a legacy system which was actively being used. My team's decision was to scrap the old and start from scratch. This resulted in a massive delay before we were able to start adding value for our users. While we spent over a year using (learning) newer tech to build a system from scratch, they were stuck using the old system. And of course the new release was buggy.
A much better approach would have been to incrementally introduce the new tech were possible until it replaces the entire system. I think the pattern is called strangler vine.
Working Effectively with Legacy Code by Michael Feathers is a classic. It might be helpful or get you more interested if you are not already familiar.