Over the years of working as a product developer, that is, a software engineer who works directly on software products, I have discovered that I can have a bad day or a good week depending on what kind of task I work on. Below is the list of tasks that excite me, compared to the ones that drag me down.
3. Fixing fun bugs ๐
Not all bugs are made equals. Some bugs are more fun to catch that others. These bugs usually are easy to reproduce, have moderate impact on users, and come from such an unexpected place that I am genuinely entertained by the detective work involved in the debugging process, and also learn another way software can be flawed. The fixes for these bugs improve the codebase.
The opposite are the bugs with seemingly random occurrence. Though they never are random, it can be hard to reproduce them and thus to debug. They may have too little impact that I am questioning the worth of debugging effort, or have such a critical impact that I am shitting myself. When the root cause is found, at times it is too obvious and I can't help but blame myself for not foreseeing them. Other times it is completely out of my control (i.e. caused by a browser bug reported 4 years ago, or our own legacy code that would take months for a proper fix). Their fixes may force me to write ugly patchy code.
2. Refactoring fun way ๐งผ
When you get to clean up the mess that has been annoying you for a long time, it's the best feeling in the world. Refactoring is more rewarding when it entails a creative solution and it is easy to verify that the new code does not introduce any regression. Some refactoring requires little effort compared to the massive problem that it's solving - this is golden!
Refactoring can be frustrating too, when the new code I'm introducing is nothing innovative and I can't quite shake out the feeling that it should never have ended up this way initially. Also when it's hard to test the change. Sometimes it's just tedious and repetitive as well.
1. Building new fun features ๐ต
This one requires little explanation - building something new is exciting, especially when it isn't like any existing thing in the codebase, when there are many known unknowns and when it requires sophisticated design solution. Sometimes I have to learn a new piece of technology too. I also find it motivating when I know how much love the new feature will get when it's released.
Sadly, some new features are extremely predictable. I can come up with a boring implementation plan soon enough, and all I got to do is to stick to it. This doesn't necessarily mean that the feature is small, so it can go on for weeks.
(Note: When you end up in this situation what you should do is to pray that the next project will be fun. What you may be tempted to do but shouldn't do is to find a way to make the task fun. A mature developer accepts that boring code must be written!)