In my last blog post, I made a case for the powerful combo of APM and Analytics that you shouldn’t miss out on. Today, I’m going to explain what I mean by that with an example on how you can build better apps and write better code leveraging this powerful combination.
There is a common misperception that the only way a developer can write better code is by running profilers and by painstakingly collecting every call graph of their application to learn how its code is actually behaving. Cutting edge developers have started using application performance management (APM) to understand code performance and identify bottlenecks. The problem with both these approaches is that this often results into testing just the happy-path of your code. Negative or failure testing will catch exception scenarios but that is rarely coupled with stress testing scenarios. Rarely do testers test combine the two (negative and stress) to uncover scenarios that develop over time with cumulative or sequential failures.
Any DevOps professional will attest to the fact that no test plan can replicate the actual action that happens in the production system. DevOps can spend hours, if not days, attempting to reproduce scenarios for debugging and resolving issues. In today’s fast changing application environments where dev → test → prod cycles are getting shorter and faster, application behavior in production environments is where the proverbial rubber meets the road. And developers and testers are willing to give an arm and a leg to gain insights into their production apps without introducing large overhead.
There is a better way…
Application Analytics in conjunction with APM can provide you perspectives that ensure production readiness earlier in the development cycle.
A decent APM tool will alert you that a certain set of transactions are not performing per expectations. A great APM tool will go a step further and provide you automatically captured snapshots with detailed call graphs to help you better investigate that particular transaction. In some cases the challenge is to not only determine the symptoms of how performance is degrading, but also how the user journey, or series of steps that resulted into the problem. An easy view of the cumulative set of preceding activities that resulted into this condition can prove very beneficial. This is where an analytics solution that captures performance and business data of every transaction over the life of the application will come to your rescue. It will help you easily string together a series of related and seemingly unrelated transactions and analyze the cumulative impact on application performance. This multidimensional view on your application performance and behavior can prove to be priceless particularly in today’s day and age of fast moving, agile development methodologies.
A couple of simple and easy to relate to code bugs would be thread contention, thread exhaustion, or connection handle leaks. The symptoms of these issues don’t show up for each transaction but can accumulate over time to create devastating results. For instance, if a DB connection handle is not returned back to the connection pool in some corner case erroneous condition, the pool may get exhausted to result into poor performance or complete stalls. An APM solution will alert you that threads are waiting on getting a connection out of the connection pool and hence performance has slowed down or stalled.
Troubleshooting with an analytics-based approach
Let’s walk through an example and then watch my colleague Steve Sturtevant demonstrate the solution using both AppDynamics APM and AppDynamics Application Analytics.
Wrapping up, you’ll see that the combo of APM and Analytics can be a very powerful one, especially in today’s fast moving world of DevOps.
For more information on how AppDynamics Application Analytics solution can help you run your software and your business better, download this white paper today.