You don't have to have staff turnover for this to emerge.
If you just keep teams starved of resources so that they're working on keeping the lights on, then escalations, and then berating them for barely ever delivering features, then they'll have zero time to address tech debt and you'll build up lava layers over time.
A section of the codebase will get so bad and escalations or features will demand it get done better, so it does, but then the rest of the codebase never comes along. And then every new developer needs to be taught which bits of the codebase are good examples and which are the ancient layers that really need to be paved over and rebuilt. And often PRs come in copying from the ancient layers and the code submitted is poor and not up to standards (not helped by the fact that some of the most critical bits of the codebase are often the worst examples because upgrading them costs the most).
If you just keep teams starved of resources so that they're working on keeping the lights on, then escalations, and then berating them for barely ever delivering features, then they'll have zero time to address tech debt and you'll build up lava layers over time.
A section of the codebase will get so bad and escalations or features will demand it get done better, so it does, but then the rest of the codebase never comes along. And then every new developer needs to be taught which bits of the codebase are good examples and which are the ancient layers that really need to be paved over and rebuilt. And often PRs come in copying from the ancient layers and the code submitted is poor and not up to standards (not helped by the fact that some of the most critical bits of the codebase are often the worst examples because upgrading them costs the most).