Sometimes, C/C++ projects have a long development cycle. When working on such a project, it can be easy to take our development environment for granted, and forget about the effort invested in its bring-up. The build environment works like magic, the test framework is neatly integrated, and the CI/CD pipeline relieves us of tedious, repetitive tasks.
Tracing and debugging microservices is one of the biggest challenges this popular software development architecture comes with - probably the most difficult one. Due to the distributed architecture, it's not as straightforward as debugging traditional monolithic applications. Instead of using direct debugging methods, you'll need to rely on logging and monitoring tools, coding practices, specific databases, and other indirect solutions to successfully debug microservices.
When it comes to debugging performance related issues, the range of these issues together with their root cause can be overwhelming to developers.
I’ve been a firmware engineer at two wearable companies in the past, Pebble and Fitbit, and there was always one class of customer support tickets and user complaints that never went away: issues around battery life. It was a constant game of whack-a-mole with every new firmware version introducing a battery regression.
Debugging in production is always a necessary evil. No matter how well your code is written and reviewed, bugs are bound to appear, and their consequences are there for your users to see. While debugging any app has challenges, debugging legacy systems is a different ballgame. From unfamiliarity with the codebase to a lack of knowledge about the tech, your developers can find themselves aimlessly searching for solutions where solutions don’t exist.