Engineering

Why we chose JavaScript over CEL

One of the most powerful features of incident.io is our Catalog. Catalog is an in-house repository of all of the domain objects that make your company what it is — from metadata about your product data and team structures, down to the finest details of your infrastructure, with rather magical links for everything in-between.

What is the Catalog importer tool?

The catalog is one of those things that ✨ just works ✨ incredibly well… when it’s set up correctly. This is the only potential stumbling block — setting up the catalog takes a bit of concentrated effort up-front. But fear not! We’ve made this simple with our Catalog importer tool.

The powerful thing about the importer is that it allows you to transform any existing structured data you have into a collection of catalog types and entries. We enable this by letting you write expressions in the configuration of the importer. These let you navigate through your existing data picking out attributes.

When we first built the catalog importer, we let you write these expressions written in CEL, Google’s common expression language, because it is relatively simple and easy to read. Unfortunately, CEL is not very commonly used. This meant that newcomers to the tool would often lose momentum on working out CEL syntax… and frankly, we have no time for that. So, although we still think CEL made sense as an initial decision, we’ve now decided it’s time to move exclusively to Javascript.

Why JavaScript?

JavaScript is everywhere. I would guess that a huge majority of developers have at least seen, if not used JavaScript at some point during their careers or side projects. And if not — many of us have wrestled with this powerful, occasionally infuriating language over the years, and the artefacts are easy to find. It would be an understatement to say that there is an abundance of JavaScript documentation and questions answered online.

JavaScript is flexible. In a few cases, we needed to implement some basic functions on top of CEL locally for ease of use, eg. trimPrefix or coalesce . Introducing JS expression evaluation removes the need for these extras; you can instead rely on plain JS to easily manipulate objects, arrays and strings as needed.

JavaScript expression evaluation is also consistent with other parts of our product — specifically alerts. Making our product even more cohesive was an obvious choice for us.

Ultimately, this all comes down to us doing everything we can not to slow you down. If you’re familiar with our ethos, you know that slow things make us unspeakably sad, and presenting a barrier to getting started with our Catalog — however small — isn’t something we felt good about.

If you’re keen to use Catalog to speed up incident response, but haven’t gotten started yet, the importer tool has lots of documentation to help you get set up!

Picture of Macey Baker
Macey Baker
Product Engineer

Operational excellence starts here