You're a software developer. You've been tasked with fixing a bug in the Sign-In workflow. You start investigating what is causing the bug. You spelunk around the code a bit trying to familiarize yourself with these files that haven't been touched in a while.
As you're following a trail of function calls and tracing the flow of data through some components, you get this nagging feeling. You have a pretty good hunch as to what is causing the bug, but you just can shake this feeling. That feeling is your developer-sense tingling -- there is a refactoring opportunity and it is up to you to do something about it. You push pause on the bug fix and start spiking out the refactoring.
This refactoring is what I'd call a software side-quest.
This use of the term side-quest I learned from Jake Worth. The idea is derived from role-playing games. A side-quest is
"a quest given to the player that has no direct bearing on the main story/campaign of the game."
In terms of our efforts to add features, fix bugs, and ultimately build a product, a side-quest is a task, that we often give to ourselves, that has no direct bearing on the task at hand.
Side-quests in video games are often a way to get gold and items, and they can even unlock further side-quests. Similarly, our software side-quests can add value. Be careful though because they can also be a huge distraction pulling us way off course.
Happening upon an irresitible refactoring is just one example of a software side-quest. Here are some others:
- You notice a dependency is out of date and you attempt to upgrade it. These can often snowball if the dependency bump involves breaking changes.
- You see a TODO in the code that feels like it'd be a quick fix.
- You see an opportunity pull an abstraction out of this code and some other parts of the codebase that you feel are related.
- Your team has been trying to wipe out a now out-of-fashion pattern (e.g. replacing stateful class components with function components that use hooks) and you notice a chance to do that as you're investigating the code.
Beware the software side-quest, you may find yourself lost in a labyrinth of code instead of addressing the bug you said would be a quick fix.