I work as a developer on a 15-year-old software product, which has been continuously under development for all that time. The code base is enormous. We have over 500mb of code, which I suspect is multiple millions of lines of code. That is not including images or the database with over 500 tables. The demand to expand the code is high. Customers constantly want to see new features. That is not good for the technical debt, of course. The programmers would often joke that something that would take an hour to create in a normal code base takes a week in ours. A new programmer is expected to take over a year to get familiar with a module. Upper management wants us to improve the performance of the software and has instructed lower management to do so, but this is not directly visible in the ticket system.
I work on one of the development teams, with four other programmers and a manager. Three of us believe lots refactoring is necessary, at least in the parts that are used often and developed on often. One of the other programmers, who has been working on the program since the dawn of it and the manager are opposed to it. They are opposed to it for different reasons, though. The manager does not believe code-refactoring or otherwise reducing technical debt helps customers or our team's numbers (which may influence his paycheck), while the other programmer believes much of the code is already perfect and variables and functions are evil and should be avoided. The other programmer is not senior to the rest of us, but has been working here longest. There is one senior developer working on another module, not managed by this manager, who we may be able to recruit to our cause.
Over the years, customer expectations have changed too. While they were fine with a module taking 5 minutes to start 15 years ago, they are not happy with that time right now. I think a lot can be gained. I've spent an hour refactoring a single function that I was expanding anyway a while back, which reduced the loading time of one process from 10 minutes to 10 seconds. Other teams do work on reducing the technical debt, which increases performance, reduces bugs and increases the ability to expand. Our team is the only team that doesn't. We are the 'best' team on the ticket dashboard, as we have most tickets resolved, yet to upper management, performance is the most important issue at the moment. Part of their solution is moving the code to a newer language, so it can actually be (unit) tested, as lots of the old code has never been tested and is failing with customers upgrading to 64 bit systems.
How can I (and the other two programmers) convince our manager (and the other programmer) that we need to work on technical debt?
I'd like to emphasise that upper management does believe that we need to work on performance, but has not published certain targets. My manager on the other hand focuses on numbers directly visible on the ticket dashboard. Performance is mainly bad because queries are all over the place, often being executed many more times than necessary. I've suggested to tackle queries and move them to seperate functions or classes, but the main issue is the other developer not believing in classes or functions and the manager trusting him.