The best time to find and fix bugs is when developers are creating them. Developers can leverage the detailed transaction tracing available from APM type tools as a fast feedback loop to understand what their code is doing and how long it takes.
Lightweight code profilers and other data collect methodologies can be used to provide developers a wealth of information about what their code is doing including logging statements, errors, SQL queries, web services, and other dependencies.
Today’s applications are complex and typically connect to multiple dependencies like SQL databases, MongoDB, ElasticSearch, Redis, queueing, and many other services. These tools can help developers instantly understand if their code is using them correctly and how they impact the performance of their app.
Here is a good quote from one of the users of one of these tools:
“When informed about a problem whilst in the moment, I’m in a much better position to make corrections or come up with alternative solutions. Without a quick feedback loop, the passing of time makes it difficult to get into the initial mindset which caused the problem to begin with.” — Vince Panuccio
As an example, developers can find common problems like N+1 database query patterns caused by SQL queries running in a loop.
Screenshot from the open-source Miniprofiler.
Developers now have access to free, low cost, and even some open source tools that can help them as they write and test their code. Depending on the programming language being used, there are several different tools available:
Miniprofiler (.NET, Ruby, Go, Node.js).
Stackify Prefix (.NET, Java).
Scout Devtrace (Ruby).
Rack trace (Ruby).
Zend Z-Ray (PHP).
New Relic developer mode (Ruby).
This instant feedback can help developers validate that their code is doing what they expected it to do. Profiling and performance tuning is something developers don’t typically do until the tail end of a project. Most of the time, they don’t even do it unless there is a known performance issue in the code or they are doing stress testing.
By using these APM tools, developers can continually be looking for performance problems in their code as part of their natural development process.