That sounds painful… but also really familiar. You're not alone in this situation, it's actually quite common to feel the company doesn't care about the accumulating Tech Debt.
After all, do customers care about the state of the code? Well I'd say they do, indirectly.
As you mentioned, this codebase is making you slower to add new features and bugs are more and more frequent. That's a problem because you'll hit a tipping point when you won't really be able to move anymore, it will cost too much!
"There's no budget to reduce technical debt" is classic unfortunately. However, there's budget to fix bugs it seems. That sounds paradoxical when you take a step back. The thing is: non-technical people might not correlate the quality of the code with the cost to the company. If you try to sell them some big "refactoring of the codebase", they'll not see the value in that—but they'll see the cost!
Therefore, I usually recommend to people who care to adapt their communication. Speak their language! A few things that proved to work for me:
- Measure the impact of quality issues on your work. How many points per Sprint are you doing? Is it going down? How many bugs do you receive/tackle per week? Are they accumulating? Can you translate that into money (consider developers salary). Show management the cost of bad quality.
- Use a metric that matters to your company that could be tied to quality. Customers NPS, support First Response Time or your Time To Market… Explain how investing 20% in code quality will have a positive ROI (that is business language to say "it worth it"). So you can clean code and still ship more!
- Focus on a quick win first. Present a reasonable plan and back it up with data. Then communicate on success and go for another quick win. People need that to get convinced of the actual benefits. E.g. I proved front-end devs were waiting 1 minute between each change to see the results. I proposed to spend 3 days on making that down to 30s, making developers waste less time (~30s / dev / change). That time invested only took a few days to have a positive ROI = clear win.
Finally, I'd recommend to watch this great talk from J.B. Rainsberger: The Economics of Software Design. It's a good complement to help you convince non-technical people on the benefits of that kind of work.
I wish you the best. I'm sure you can manage to get some quick wins first. This won't be solved overnight, but if you can progressively turn the approach you'll be working in a more desirable environment with a better mindset towards Legacy Code. And you'll feel less frustrated!
Let me know if I can help you further, I'd be happy to help =)