Always spend at least 20% of the time on stuff you know is necessary, but will never be prioritized by marketing heads.
This is the way.
Leadership: Please don’t prioritize code cleanup, we have critical features we need to release.
Me: Oh. I didn’t realize you were taking ownership of (complex code no one wants to be associated with). I’ve got diagrams I can send you.
Leadership: No, that’s still yours. We just need you to focus on these features, and not any planned maintenance, for just the next sprint.
Me: So you’ll take over guiding maintenance on (complex source code no one wants to get near)? I can send you the backlog for your project plans…
Leadership: That’s not what we’re saying. Please just prioritize the feature.
Me: Oh. Sure. I will prioritize that feature, and I’ll only do the bare minimum cleanup that can’t be avoided, right now. (Which will turn out to be however much cleanup I damn well please, because their eyes glaze over if I explain it, anyway.)
Leadership: Now you’re getting it!
Me: Gee whiz. Thanks for talking it through with me.
This is the way.
Me: Oh. I didn’t realize you were taking ownership of (complex code no one wants to be associated with). I’ve got diagrams I can send you.
Me: So you’ll take over guiding maintenance on (complex source code no one wants to get near)? I can send you the backlog for your project plans…
Me: Oh. Sure. I will prioritize that feature, and I’ll only do the bare minimum cleanup that can’t be avoided, right now. (Which will turn out to be however much cleanup I damn well please, because their eyes glaze over if I explain it, anyway.)
Me: Gee whiz. Thanks for talking it through with me.
The programmer is the expert to make the decision on what’s necessary to implement a feature.
Exactly.