Let me introduce Sally

Sally is an engineer working in a team as web frontend specialist. Her team has mobile developers, designers, backend developers and a product manager. Her team is one of many other teams, focusing on one particular feature in a big product. Every few weeks she discusses features and improvements and agrees to complete them.

Sometimes, during the sprint, she finds technical limitations, specific to the web platform she works on, where the feature design did not consider them during the design phase. Sometimes she recognizes a UX mistake that crept in during the design phase, which only becomes obvious once you see how the app works in real life.

Sometimes there’s a question that needs to be answered by the colleague who wrote the code, because the code doesn’t explain why it does what it does and the colleague is on vacation.

This time though is different: She discovered that in order to implement the feature properly in the way it is designed, she needs to refactor a number of modules used by other features. Sally is in trouble. She already committed to accomplishing the feature in two weeks and one week is already gone.

Sally knows her manager doesn’t have time to understand the technical side of the problem since he operates on a different level of abstraction. She feels obligated to find a solution that doesn’t require additional weeks of work since refactoring other features is not part of her current sprint and the product manager cannot really value something he doesn’t touch directly. He cares much more about getting the feature implemented on time as estimated.

So what can Sally do? She finds a workaround to implement a feature. She does it in a way that is neither clear nor good. She knows this will clearly create a headache for her co-workers, so she creates a ticket to fix this technical debt later. During a code review, her colleagues understand the problem, since Sally said this is a very urgent feature and she needs to have it done tomorrow — otherwise her product manager will be very unhappy. Her understanding colleagues approve the pull request and the code gets merged.

Sally continues to increase technical debt while product management fails to see the importance of reducing technical debt, since management doesn’t have to deal with code and engineers neglect to explain the problems due to their complexity.