Ruthless Prioritization
blackboxofpm.com
blackboxofpm.com
Prioritize, yes, but don't starve lesser priorities. Let individuals decide, say, 10%-20% of their effort spend and don't question it. That figure, conveniently, corresponds to the Friday they're spending not productively working anyway.
Maintenance is NEVER prioritized by anyone in management. They think "What, we put in the bug fixes, what more do you want!" but they never put in the "Hey, if we reorganize some code here, things will be a lot faster and easier to extend".
Devs on the ground can consistently see "Hey, this system right here, is a major issue that'll cause us a bunch of problems in the future" and that does not matter. Because, quantifying how much money is lost by not fixing the issue is really hard to do. You can't reliably say "If I spent 10 hours fixing this, I'd save 100 hours implementing new features".
It's this sort of short sighted vision that has dev teams running on 20 year old software with a bunch of known CVEs, handcuffed because the answer to "What will upgrading to the latest bring us?" is almost always "some bugs in transition but mostly piece of mind that we won't be vulnerable to a cyber attack."
Where it becomes more insidious is in planning for broader efforts, where even the ROI is nebulous. People seem hesitant to invest in experimenting to estimate ROI, which limits the topics and questions teams even bother to ask and gives a very skewed, short-sighted view to management.
I'm very much a fan of roadmaps, planning, and delivering big product changes quickly, but I'm also pretty aggressive about carving out time for things that are going to improve velocity overall. As an example, right now, one of my team's highest priorities is to remove a bunch of dependencies from local deployment and CI so that a developer can run the whole stack with just "go run main.go" and so that CI tests more of our stack. (Our team runs managed Kubernetes clusters with our company's software stack installed in it, so it's very easy to get into the state where you need accounts with 3 cloud providers and 25 secrets to do anything... and it's a big productivity killer to require all of those for every change. And it means that a lot of test coverage is manual, which is an amazing velocity killer.) No product manager would rate that as the top product priority, but as the engineering TL I know it's a productivity multiplier -- reduce development cycle times and get more story points out of each sprint going forward. An engineer can test 100 of their tweaks per day, instead of 10.
Another option is to schedule slack times into your sprints. Ruthlessly prioritize, figure out how many story points your team can do per sprint, and fill it up. But, if your team typically does 100 story points per week, only take on 80 story points of work, and use the other 20% for "things that come up" or "things that engineers feel like doing". I haven't actually done this, but I plan to in the future, so I don't know what the right number is. But people always feel bad when 100% of their work is chosen for them; so build in time to let people choose their own work. The business gets what they want, the team gets what they want, and everyone is happy.
Finally, slightly off-topic... this is my guiding light for anything related to planning: https://apenwarr.ca/log/20171213 I worked for the author, and our team got a lot of stuff done -- we hit our OKRs every quarter, people believed us when we said "we'll do that next quarter", and we had a lot of fun making a great product. Planning is not bad, planning is great. Don't let it scare you away; planning doesn't mean "the PMs control your life". It just means you know what goal you're working towards.
Including those factors in your decision making is only way this can work, otherwise you will get poor quality at the end of it. At least that has been my experience in the context of software delivery.