Working @Fandom.com: Ad Engineering

Katarzyna Pudełko
Fandom Engineering
Published in
6 min readJan 12, 2022
Time Square with many billboards visible

If you’ve ever searched for facts about your favourite game, a TV show, a movie, a comic book, or an anime series, then you probably visited one of our pages served by our core product, Community Platform. Hope you enjoy it! And keep in mind that maintaining it wouldn’t be possible without the revenue we are generating from ads placed in the free content you’ve seen. But it doesn’t mean we always want to disturb you with ugly useless banners! Ad Engineering heroes do everything they can to provide Fandom users with the best possible ads. We want to make sure ads look nice and match your interests. Read the article to see how we do it on a daily basis.

About the team

Patience you must have, my young padawan

In Fandom, in general, we are responsible for an amazing community platform and other products available for free for every fan across the globe. Our users can create and enjoy high-quality content related to their favourite topics, discuss the last season of a favourite series or find solutions to the newest game. The mission of the Ad Engineering team is to build and maintain ad products that generate a huge part of our revenue. This revenue lets us build our outstanding platforms that are available for free for every fan across the globe.

Working with ads means having a lot of product knowledge and enjoying many different areas of product development. In our team we are responsible for:

  • Integrations with multiple ad providers and ads-related services
  • Building premium ad products, including first impression takeover product family
  • Using segmentation and targeting to provide personalised content
  • Integrating AdEngine with new Fandom products
  • Developing tools facilitating our daily work
  • Keeping an eye on GDPR and TCF compliance
  • Monitoring new features’ releases including adding new rules to our anomaly detection engine
  • A/B testing using Fandom experimentation layer
  • Gathering ads-related data
  • Analysing the data to find answers for both product and business-related questions — currently, we can base our decisions on 2.5TB of data per month!
  • Caring about Core Web Vitals
  • … and many others!

As you can see it’s hard to get bored! A multitude of topics means that everyone can find a field in which they feel best. Of course, that also means that it’s hard at the beginning when there is a lot of domain knowledge to acquire, but then you quickly start speaking “AdEng language”.

Our values

You have my sword! And you have my bow! And my axe!

Since we are talking about “AdEng language”… To dive into it you need a lot of collaboration. And we strongly believe that this collaboration is our key to success. In our team, you are never left alone to solve a problem on your own. Everyone is happy to help and explain. We value brainstorming, pair programming, and just talking. We know that the best ideas come out from conversations.

The other thing we value is versatility — if you like solving different kinds of mysteries each week, becoming an AdEnger is a good way to follow.

And last but not least: We hope you like putting memes into demo slides. ;)

Our daily work

How you doin’?

We work in 2-weeks sprints to focus on the features we want to deliver. Our typical meetings are: dailies, technical refinements, plannings, demos, and retros. Sometimes we gather in smaller groups to work on particular problems to not involve the whole team in smaller tasks.

Our project owner and stakeholders are from San Francisco but it doesn’t mean we are staying late at work — all team meetings last by 4:30pm CET at the latest. We are flexible when it comes to working hours as well.

Currently, we are working remotely so our main communication tools are Slack and Zoom. Additionally, we use Jira for project management and Jenkins for deployments which happen every working day except Fridays. Friday is also a special day in terms of focus — that’s a holiday of not-being-disturbed-by-any-meetings!

Tools we use

Tools and technology overview

Have you tried turning it off and on again?

Most of our code has been written in TypeScript / JavaScript, all is bundled with Webpack, we use sinon for testing… but front-end stack is not the only thing we are focusing on. We are very familiar with Google Ad Manager which is an ad exchange platform. We use some libraries typically associated with advertising such as GPT, Prebid.js, and Google IMA. But don’t worry, you don’t have to know the ads-related stack — you can learn everything while being here!

For the backend services we mostly use our Fandom Java-based microservices stack. As we integrate our AdEngine with the whole Fandom product portfolio, we touch a whole range of backend and frontend technologies from PHP 7 (MediaWiki) and Python, through Java to Vue.js and React.js. But for our backends we choose to stick with JVM.

Additionally, we work with AWS in terms of storing (S3) and processing data (Athena). We also use Python for data analysis and internal tools (along with Pandas framework and JupyterHub).

Moreover, if you are interested in deployment — I hope you like Docker, Kubernetes, and Jenkins. Both data and services layers leverage Docker containers. Jenkins is also helpful in running automated tests which are written in Webdriver.IO.

Technologies we use

Example projects

Great job, 10 points to AdEng!

If you are still interested in our team, here you can find the description of two example projects we were working on lately.

Native Ads

Such ads are ads that look and feel like they are a part of content. They are not typical banners, they are styled like the rest of the page to make the user’s ad experience better. And they are not only delivered in-content, but could click through to a custom micro-site/page that is hosted by Fandom. At the time of writing, we are testing integration with Nativo, a native ads provider. That includes i.a. writing integration code, adapting our current logic hidden behind ad layout to the new ad slots, releasing the code to production, and checking metrics like viewability or Click Through Ratio to find out if the project is successful. Further, we are going to apply more sophisticated logic to find the best in-content placement for a native ad. We consider basing it on data and users’ behaviour.

Fan feed with native ad

Anomaly detection

Another totally different project is anomaly detection which is developed occasionally when there is a need for better monitoring some metrics. It’s a system that pulls daily data from our data warehouse, looks for big drops or other anomalies, and alerts us on Slack when it finds suspicious behaviour in numbers. It runs on Airflow, is written in Python, and uses the Pandas framework for data processing. Sounds interesting?

Anomaly detection scheduled tasks

Call to action

Hope you liked the article. If you find our work fascinating check open roles at https://about.fandom.com/careers#positions. And after joining our team, remember to ask who:

  • Likes knitting, baking, and making preserves and IS NOT a grandmother
  • Can’t make coffee without a stopwatch, thermometer, and kitchen scale
  • Plays in a brass band and plays ping-pong half-professionally
  • Dreams about getting into USS Enterprise 1701 to find A’Tuin
  • Can prepare a whole meal from the vegetables growing on his own balcony
  • Gets bored quite quickly after establishing an order, despite having a Ph.D. in the area tightly connected with logic
  • Tries to strangle his friends while not getting strangled himself a few times a week and considers it perfectly normal
  • Once got on the wrong plane and ended up in Hong Kong instead of San Francisco
  • Took part in a charity and was killed while being alive

All inside one team!

You can also reach me out with any questions on kpudelko@fandom.com

Thank you for reading!

--

--