According to our data, most projects run with a manageable number of errors. A couple of interesting notes:
Around 90% of all projects have less than 10 different types of errors per month
Around 5% of all projects produce multiple thousands of errors every month
In addition to a manageable number of errors, these projects are able to keep adding features to their code without growing their error counts drastically.
16.8% of all projects closed errors with relative immediacy (within 24 hours)
32% of all projects manage to close errors within the same sprint (2-week window)
37.5% of all projects closed errors after 90 days
*Some issues require immediate attention, while others can be factored into sprint plans or be left alone.
According to our data, languages typically associated with backend projects seem to capture more errors than frontend languages. What might be causing this?
Are frontend languages less mature when it comes to error logging? Perhaps they don't capture as many errors compared to backend languages?
Can the high number of errors in backend languages be explained by the complexity and interdependence of microservices? Simply put, do these errors make more noise?
Can the high number of errors in backend languages be explained by the complexity and interdependence of microservices? Simply put, do these errors make more noise?
What do you think? Tweet your opinion and tag @airbrake
Tweet the ReportIn this section, we'll dive into patterns and errors associated with the following programming languages: Golang, Ruby, Java, JavaScript, and Python.
In Golang, expect some transient errors that will resolve themselves. This is due to issues related to design patterns within a micro-service environment. For example, 57% of errors involve the MPD client failing to connect, most likely due to a migration event. Because of this, knowing WHEN to raise an error in Go is key.
The top errors in Ruby projects all tend to have the same theme: a missing or unexpected object or argument. The best way to fix this is to double-check operations before an operation runs. The idea is to make sure the job can be done before attempting to do the work. Save time and use an error monitor to check for missing or incorrect objects.
As an object-oriented language, Java tends to have issues declaring objects and passing data. For example, the majority of Java projects include the "NullPointerException." This exception tends to pop up when the object does not point anywhere. The amount of "IOExeption" errors within Java projects also show issues with network connections. If you are a Java programmer, focus on declaring objects and resource management of external dependencies.
What do the "NotFoundError," "SecurityError," and "TimeoutError" have in common? They're all related to failures interacting with external dependencies. Keep this in mind as you're coding in JavaScript. "Is my code written correctly so that it can read cookies?" "Do I have permission to read these cookies?" "If there's an increase in transactions being timed out, could there be an issue with the UI?"
In Python projects, errors related to data processing are prevalent. Many projects are issuing errors like "IndexError," "JSONDecodeError" and "DataError," which suggests that data processing is a common and challenging task for Python. The simple solution here is to look at your data processing setup. Is the problem the code or something on the end?
Errors are a part of the daily life of software engineering teams and projects. Whether you're a frontend, backend, full-stack developer, errors are inevitable, but you can control how you respond to them. As we saw in this report, many projects do fantastically well in responding to errors in a swift manner, likely leading to good user satisfaction, low cost, and limited technical debt associated with latent errors, while others have a good opportunity to shape up their debugging process.
Airbrake was founded in 2008 (originally called Hoptoad) and defined the error monitoring category. Since then, Airbrake has developed into a full suite of error and performance monitoring capabilities - but kept true to their saying "by developers for developers." In 2021, Airbrake was acquired by LogicMonitor, and is now part of a larger family of monitoring solutions, but operates independently. See more