My manager says that the code simply is too big and old to change for the better, also many developers have an EE background and can't be bothered to learn modern practices. Is he right? Is the best solution no solution, instead just to keep slapping on requested features and bug fixes?
I have skimmed through: How to approach the BIG BALL OF MUD pattern from the architectural POV
There you will find good advice.
But one aspect is not mentioned -or I overlooked while skimming through- : Money - In your case €uros.
Even if you are well intentioned and have good strategies of how to transform the nightmare into a shining piece of diamond: Who is going to pay for this? and even more interesting Why should anybody want to invest money for this now?
If it worked for the last 20 years it will perhaps do so for some more years.
And when you tell us »My manager says that the code simply is too big and old to change for the better« there are no signs of pain your manager has or perhaps should have, meaning there is no economic reason to change the running system.
This may seem horrible for a young software engineer who loves good craftsmanship. But at the end of the day, you are payed to deliver running software and nobody cares about craftsmanship unless you could translate that into an economic perspective.
Without knowing the exact details I guess the calculation goes like this:
To make this thing pretty and shiny you need to invest the ammount of x €. After you went down this road you won to this point nothing. And more: The developers doing this job are hindered from doing productive stuff aka earn money with their work not costing something (opportunity costs).
Perhaps from that point in time - when everything shines - developers would be happy - which earns no buck. And changes to the code may also be cheaper.
But is there a sure way to calculate how much €uros are really saved going down that road?
The other perspective is: How is the projected lifeline of the whole project? Is there an expectation to run another 20 years with this system? Or are there changes at the horizon of other machines coming needing another system?
There is the cost of running the system as long as possible and develop before EOL a new system (where you could help design a better system) vs weeding out the ugly parts.
And perhaps the former is better than the latter.
tl;dr
Is the best solution no solution, instead just to keep slapping on requested features and bug fixes?
Depends on how you define best: it could be economically more efficient to live with that Monstrosity and abandon it in the future completely for another system. But for that one has to crunch numbers.
At least you could make sure, new features are implement with craftsmanship in mind.