To decide which ads to serve, our GumGum ad server needs to make decisions not just based on different targeting requirements, but also based on other factors such as the ad goals, RPM (revenue per million), viewability, click through rate etc.

Recently we had a goal to increase the viewability of slot ads. To do this, we decided to add scoring based on the slots’ performance. This required us to store the performance data for slot ads, which means we wanted to record how many times the slot ad had an impression and how many times it was viewable.

Implementation options

  1. When…

Light vs dark theme mode meme: 2 options of buttons to press, one saying light mode and and one saying dark mode. man sweating.

Light or dark mode? Which to make your site default?

With a simple css media query, prefers-color-scheme, you can read the minds of users (well their operating system preferences).

Light and dark mode has become a widely adopted appearance setting found in most operating systems today. Users have already taken the time to set their OS preferences, so don’t make them have to click around to change the theme of your app/site.

With prefers-color-scheme you can control more than just color, but for the purpose of this conversation, we will demo changing the root CSS variable of the background color.

Image of the word SQL being held up by a crane


In the relational database world, SQL is the magic language that enables us to retrieve insightful information from data. Misinterpretation can easily happen if we don’t query data properly. For example, data inflation can occur when joining two tables in a one-to-many relationship. When a table has one record, while the other table has multiple matches on the join, the one record is going to be duplicated in the result set. If we apply aggregations such as sum, count, etc. on the duplicated column, those aggregations are going to be inflated. One could argue that we can always find ways…

What if I need full control over my cluster size?

Photo of a building
Photo by Kletis Roy on Unsplash

Apache Spark Structured Streaming deployed on Databricks is the perfect framework for running real-time workflows at scale. However, the Databricks jobs clusters use Optimized Autoscaling which can be somewhat aggressive for many 24–7 streaming workloads. Even though there are a few tuning parameters that can be used to slow down the default behavior, we can easily run into situations where we need tighter control over the cluster’s size mainly for cost-saving purposes.

For example, if the streaming query contains shuffle operations, e.g. when the query involves an aggregation or a…

Prebid.js is arguably the most popular header bidding platform in the ad tech space. It currently has the top spot in the header bidding market share, surpassing Amazon’s Transparent Ad Market. Prebid’s open source community, wide range of features, and many demand side sources make it a tantalizing choice amongst its competitors. This article briefly touches on Prebid’s origin story, its general architecture, and its future with SharedID and UnifiedID 2.0 (UID).

Prebid.js — An Origin Story

In its early days, programmatic digital advertising has been handled with a waterfall method. Publishers (known as “supply side” in ad tech) defined a list of advertisers (part…


In this post we will discuss Testcontainers, a Java library for building more robust testing. When talking about testing, we are familiar with unit testing and integration testing. While the first aims to guarantee the testing of a single piece of code, the second one aims to test the functionality for a set of components integrated. In this second scenario is where the challenges appear more often. For GumGum’s main Advertising API, we have always done unit testing using mocks for service layers and controllers, however we wanted to expand our integration coverage. This includes things like testing the DAOs…

“With great models comes slower inference speeds”.

Deep Learning has evolved immensely and it has Transforme(r)d NLP completely in the past 5 years. Although these models do achieve state of the art results on various NLP tasks, the models are really big and slow. Bringing these models to production can be a pain because of their large memory footprint and slow speeds. At GumGum, we spend a considerable amount of time building models that are not just accurate but are also lean and fast. Verity, which is the engine that powers our contextual targeting capabilities, requires models that can scale…

A complete demo for developing locally and deploying on Databricks

Photo by Hunter Harritt on Unsplash

Real-time machine learning inference at scale has become an essential part of modern applications. GumGum’s Verity engine powers the industry’s most sophisticated contextual targeting product by analyzing thousands of digital content every second around the clock. This is a challenging undertaking that requires deploying deep learning models using an event-driven streaming architecture on an elastic cloud-native cluster.

At GumGum, we use Apache Kafka’s high throughput and scalable streaming platform to connect various components of our machine learning pipelines. Up until recently, we deployed the underlying inference micro-services solely on Amazon ECS, which is a great choice due to its security…

Comic about how much is involved with Kubernetes. A dinosaur expresses excitement at starting Kubernetes and plunges into the deep end of a lake as you see all the elements involved with Kubernetes.
Figure 1: Kubernetes comic

The main goal of writing this article was to gather personal and team experiences and challenges when implementing a production-grade fleet of Kubernetes clusters at GumGum. I hope you enjoy the reading!

The Tip of the Iceberg

Everyone is in love with Kubernetes. It’s the most popular high school student, and no one can escape their enchants. It seems to be perfect, as it aims to solve most of the problems modern companies face when dealing with complex microservice architectures and cloud-native applications. …

An article by Lisa and Xiaobin Ran

Girl scout badges (img source: <>)


Troubleshooting web-based issues can quickly become exercises in patience and extreme outside-the-box thinking, especially when there are multiple technologies, codebases, and partners at play. That’s why any tools that allow us to troubleshoot our case-specific problems can be so important. Here at GumGum, our Ad Server team has created an internal tool called “Badges” that allow various teams here to easily see useful data that is collected or created while requesting and serving our ads.

GumGum Tech Blog

Thoughts from the GumGum tech team

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store