Production debugging is one of the hardest tasks for any developer as it involves finding the point where the expected outcome and actual outcome diverge.
It can be challenging because it usually looks like the bug can quickly be fixed but in the long run; it becomes harder to recreate the exact environment.
Any dev will readily admit that debugging is hard and that it is a scenario we all have to deal with at some point. Here are the five common ways to approach production debugging.
–Gathering Debt (Don’t worry, be happy)
When most developers encounter an issue, the first thing that comes to mind is to simply ignore the problem with the hope that it will go away.
It is typically peculiar to inexperienced developers who are optimistic that if the project has worked so far, then there should be no cause for concerns.
The problem with it only becomes obvious when they try to scale, translating the approach’s results directly to technical debt.
–Ultra orthodox testing (If you test it, it will run)
This approach is widely adopted by followers of the TDD cult who believe that everything should be tested to eliminate doubts.
The goal of this approach is to detect issues before bugs surface, which can go a long way to potentially help devs save time and money.
While this is a proactive measure to deal with problems before they arise, there is only so much it can achieve as it is impossible to remove the potential for bugs and problems completely due to the human nature.
–PokeMonitor (gotta catch’em all!)
This approach involves planning and writing all the log lines you will ever want beforehand so you can have the information you need to understand and resolve when things go wrong.
Apart from helping you detect where the problem lies, it can also aid developers gain fresh insights into the details of the project.
However, this approach is often criticized because it is demanding as one needs to collect every piece of data all the time and process the data gathered to find the relevant pieces per time.
Another demerit is that it requires high infrastructure and maintenance costs.
–Move fast (and break things)
Disciples of this approach believe that there will always be bugs in any project and that the best course of action is to increase the speed of software updates to address the issues rather than fix them during the development process.
The key advantages of this approach include response speed and cost reduction but this is usually at the detriment of software quality.
Another downside is this approach is that while it appears to be speedy, it actually results in a heavy, slow and complex system due to the many complex processes involved.
–Agile Data-layer (visibility set free)
This approach, which is a blend of other approaches, gained popularity recently as it involves taking apart the data layer from the rest of the application so it can the issue can be fixed.
The goal is to bring the needed visibility into production on demand, preferably with minimal effects and dependency on other software aspects.
In all, developers often face a number of issues during software development, and they can all be solved by adopting one or more of the approaches explained above.
Should you encounter a problem that proves to be difficult, don’t hesitate to ask for help from co-workers or the community.