Interview with ConfigCat Engineers
Tags: featuremanagement, interview, featureflag, configcat
Published: 2023-11-19 19:22:51

As a front-end developer, I spend most of my time writing code and developing front-end applications. Several months ago, I wondered what it would be like to run a tech startup. It turns out that I spend my spare time writing blog articles for such a company. Meet [ConfigCat](https://configcat.com/), a thriving tech startup that offers a cloud-hosted feature flagging solution to other tech companies.

Most importantly, I was curious to know how the company was created and the secret behind its success, as well as how they are able to handle high-end user demands while delivering a seamless feature flagging solution. To answer these questions, I decided to conduct an online interview with the core engineering team to satisfy my curiosity and to share what I found with you, the reader.

## But first, what is ConfigCat?

[ConfigCat](https://configcat.com) is an online feature flagging service that allows users to manage feature flags from a [central dashboard](https://app.configcat.com). A feature flag is a boolean value that is linked to a feature in a software application. Most often, it is used in a conditional statement to show or hide the feature when it is true or false, respectively. This means I can control what features to show or hide in my app remotely with a few clicks without editing and redeploying my app.

The company makes available an extensive list of [SDKs](https://configcat.com/docs/sdk-reference/overview/) that allow developers to use their feature flag services in many programming languages and frameworks.

Being a front-end guy, I mainly used the [JavaScript SDK](https://configcat.com/docs/sdk-reference/js/) in my apps. I was amazed by how seamlessly the SDK works and wanted to see what the architecture supporting these processes was like.

## The architecture

Here is a diagram of ConfigCat's architecture.


![ConfigCat's architecture](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/pjp72841p91076w32y83.jpg)

It may appear as a simple diagram, but how do each of its parts work independently, and how do they interact? Here's what I've learned, and I've also incorporated some information from the [respective documentation](https://configcat.com/architecture/) to provide a clearer explanation.

### The Dashboard

The dashboard is a central user interface for creating and managing feature flags. Apart from toggling a feature flag on or off, I can also target a specific group of users based on country, email, and any custom attribute, which is a neat feature. The configurations I set in the dashboard are stored in a database for later access.

### The API

ConfigCat offers a [Public API](https://configcat.com/docs/advanced/public-api/) for managing configurations. It allows you to do pretty much the same things as you would using the [dashboard interface](https://app.configcat.com/). But this half of the company's API is primarily used for testing and scripts. The other half of the API is responsible for serving up your feature flag values to requests coming from an SDK client installed in your app (more on this soon). To shorten and optimize the requests and response time to and from the API, ConfigCat relies on [Cloudflare's CDN cache](https://www.cloudflare.com/) network.

### The CDN (Cloudflare Edge Cache)

After taking a look at Cloudflare's documentation, I understood why using it would make sense when it comes to added security and optimized performance. Cloudflare is a large network of servers working together. The servers can process huge loads of user requests with this combined power. This allows ConfigCat to serve millions of user requests.

Here's how Cloudflare is helping ConfigCat:

**Traffic Security and Filtering** - Because Cloudflare functions as a reverse proxy, meaning it sits in front of ConfigCat’s public API, it can apply security rules and filter traffic. This is to counteract and protect the API from malicious and direct HTTP requests. A service like this is critical in a world where Distributed Denial of Service (DDoS) attacks are prevalent.

**Caching** - Cloudflare also employs a network edge cache for shortening response time by storing ConfigCat’s data in a Cloudflare data center closest to the user.

### The SDKs

The [SDKs](https://configcat.com/docs/sdk-reference/overview/) are merely software packages that can be installed in a software application. They provide a connecting link between the application and ConfigCat. The SDK is then able to access the API through the Cloudflare Edge Cache to download and cache the feature flag values from the dashboard for evaluating feature flags and targeting rules.

The feature flag values are downloaded in the form of a JSON file by the installed SDK. This file is downloaded periodically based on a time interval that you can modify. When the application code queries the value of a feature flag, the SDK parses the downloaded JSON file and returns the feature flag value without uploading information about you or your users.

With the optimized power from Cloudflare's CDN, their service is capable of handling a large volume of requests. Here's a short dialect from Lali, one of the core engineers:

> Our CDN infrastructure is pretty simple as we only serve small .json files. We put CloudFlare's edge cache above our CDN nodes, which can handle a huge amount of requests without any trouble. ConfigCat values your data privacy and security, so the infrastructure is set up to only query the users' feature flag configuration. However, it never exposes personal user data like email and billing information.

## Optimizing for faster code releases

As a developer myself, I came to understand that the work of software development doesn't stop after the initial build. That's just the beginning. Because the company's entire operation is based on software, I was curious to know how they release new updates and bug fixes.

ConfigCat leverages the power of automated tasks that execute every time an update is made to their code base. These automated tasks all work in tandem towards the end goal of releasing the updated software to users. The overall term used to describe this is called [DevOps](https://en.wikipedia.org/wiki/DevOps).

### Github Actions

One of the tools used as part of the DevOps process is [**GitHub actions**](https://docs.github.com/en/actions/learn-github-actions/understanding-github-actions). Here is an overview of how the company is using it:

When code is pushed or a new feature branch is merged, it triggers a GitHub Actions workflow configured by the engineers.

The workflow consists of individual tasks that run asynchronously, one after the other. Each task is simply an action that needs to be executed. The company's typical GitHub workflow includes tasks such as:

**Code reference scanning**: This is a tool developed by the team to scan the source code of an application and report on feature flag usages. It tracks where specific feature flags are used and points out the unused ones, hence avoiding the accumulation of technical debt. This tool is available to anyone; you can read more about it [here](https://configcat.com/docs/advanced/code-references/overview/).

**Deploying to Cloudflare Pages**: Apart from changes to the backend code, it is beneficial to interact with a live preview of the frontend changes. The company uses Cloudflare Pages to build and deploy a preview of each commit to the company's website.

### Azure DevOps

Another DevOps tool that the company uses is [**Azure DevOps**](https://azure.microsoft.com/en-us/products/devops). It functions similarly to GitHub Actions. This tool monitors the repository for code updates and executes a series of tasks defined in an Azure pipeline .yml file. The difference is that it runs on Azure's DevOps platform as opposed to GitHub.

The pipeline contains tasks for scanning the source code to ensure it is securely written and free of known security vulnerabilities. It also contains tasks for running the code in a Docker container which is later deployed to the Azure cloud platform.

Now that my curiosity about the technical side was satisfied there was also the non-technical side, the soft skills of running a company. More specifically, I wanted to understand how they dealt with the challenges of running a company.

## Overcoming challenges

In my experience, taking on any feat comes with challenges. Sige, a co-founder of the company, told me that together, they formed a strong and willing team, backed by mutual trust and respect, and this has paved the way for possibilities. Here's what he mentioned:

### Challenges of starting and running the company

**Working together and sharing responsibilities**: At first, everyone on the team had different opinions. While there was an immense amount of work to be done, it was a challenge deciding who was doing what.

**Technical hurdles**: As a team of engineers passionate about building high-quality software, We took what we already knew to a different level. We focused on creating a scalable software infrastructure that could adapt to the growing number of users.

**Accounting and legal**: Scalability and software were indeed crucial, and we had to put our business caps on, learning how a company works. We shifted some of our focus toward understanding the accounting and legal aspects of running a thriving and profitable company.

**The first paying customer**:

> "Our first customer subscribed to a paid plan came around 1-1.5 years after we started to build ConfigCat. We loved building ConfigCat but it was pretty hard to wait for the first paying customer that could 'validate' our idea of building ConfigCat." - Lali, Core Engineer at ConfigCat.

As a tech user, sometimes parts break or I need some help using a piece of tech. Now that I understand the challenges and the tech side of things, I was eager to learn how the company handles customer-related issues and general support.

## Customer relations

A famous quote I found reads:

> "Nobody cares how much you know until they know how much you care." - Theodore Roosevelt

To get some other perspective from others who are using ConfigCat, I looked at the [company's reviews up on Capterra](https://www.capterra.com/p/187099/ConfigCat/). From what I saw, most of them were positive. Was ConfigCat capable of providing a speedy response to users having issues using their product?

### Can ConfigCat react quickly to customer support requests?

From my experience, I found that reaching out to the company's support team was easy. I was able to use the [contact form](https://configcat.com/support/) on their website to fill out a message and chat directly with the developer team on [Slack](https://configcat.com/slack/). If you need an almost instant reply, I would recommend using Slack. After joining their Slack community, I saw developers posting issues they encountered and receiving quick assistance from the core engineers and customer success team.

## Closing thoughts

Building a feature flag service can come with challenges, but the rewards can be substantial. One of the key insights I gained from this interview (apart from the technical aspects), is the team's unwavering passion for creating an exceptional product and providing top-notch customer care.

This dedication serves as their primary motivation. From my interaction with the team, it is evident why ConfigCat has garnered a significant user base, including myself, who rely on their platform to efficiently manage and release new features. When I asked, "What would be different if ConfigCat started over?" I got the following response:

> "I wouldn't change anything. I think we learned a lot of things during our journey with ConfigCat and I wouldn't want to change anything." - Lali, Core Engineer at ConfigCat

## Stay up-to-date

For more posts like this and other announcements, follow ConfigCat on [X](https://twitter.com/configcat), [Facebook](https://www.facebook.com/configcat), [LinkedIn](https://www.linkedin.com/company/configcat/), and [GitHub](https://github.com/configcat).