Intent Media Tags Now In Google Tag Manager Library

  • Posted by Intent Media

First a short primer:

In order to serve Intent Media ads on their pages, our Publishers need to insert our code snippet (or JavaScript ‘tag’) into the code of their web pages. They can either do so by placing our tag directly in amongst their own code (which builds the web page that their visitors see), or they can use an intermediary system to manage the insertion of the tag into the page code.

There are 2 types of such system, the ‘Ad Server’ (such as Google Doubleclick) and the ‘Tag Management System’ or ‘TMS’ (such as Google Tag Manager aka GTM). While both these softwares can do the job of inserting 3rd party code such as the Intent Media tag into the 1st party code which constructs the Publisher’s web page, the TMS is the product that is really designed for the purpose of allowing more complex tags such as ours to operate with their full functionality when they’re delivered into the page.

The key benefit of using a TMS is that the work of deploying a new tag into a web page no longer needs to be done by an engineer, opening up the web page’s Continue reading

The Intent Media Engineering Ladders

  • Posted by Bobby Pearson

Mike Roberts, VP Engineering

Last year I was inspired by several engineering leaders, including Camille Fournier (at the time CTO of Rent the Runway) and James Turnbull (CTO of Kickstarter) to roll-out ‘career ladders’ within the Engineering organization at Intent Media. The technology team grew large enough, and aged enough, and changed enough that the team members lacked clarity about (a) what expectations everyone had of each other’s work; (b) what opportunities people had to grow within the company; and (c) what areas of their work they could focus on in order to best move into those new opportunities.

I read how various teams overcame these challenges (especially Rent The Runway’s work here, here and here, and Kickstarter’s work here) and created, with the assistance of the rest of the organization (especially PJ (Paul Julius), CTO), our own version. In the spirit of giving back to the community that helped to inspire me, I present our model here. Enjoy!

Download – Intent Media Engineering LaddersContinue reading

Improving Code Design by Replacing isA(…) Matchers in Tests

  • Posted by Intent Media

When I practice Test-Driven Development, I use the feedback from my tests to improve the design of the production code.  One particular source of feedback I find useful is the expectations and assertions used in the tests.  I’ve become particularly sensitive to the use of one particular expectation – the isA(…) matcher.  Whenever I see the isA(…) matcher used in an assertion, I’m usually suspicious that there might be a way to change the design that allows me to more precisely specify my assertion and reduce the coupling in my production code.

Here’s a brief introduction to matchers, the isA(…) matcher, and an example demonstrating how I used the feedback from a test to improve the design of the production code.

A Brief Introduction to Matchers

Test double libraries like JMock, Mockito, EasyMock, or RSpec Mocks allow you to make assertions about the arguments to a given method call using matchers.  For example, if we were building a mailing list application, you might find some code like this (using EasyMock):

Customer customer = aCustomer();  // A valid customer with some default configuration
Catalog catalog = createMock(Catalog.class);
expect(catalog.subscribe(same(customer), eq(Frequency.WEEKLY))).andReturn(...);

This test creates a test double for a … Continue reading

Engineering Your Own Education: Part 3

  • Posted by Intent Media

What is the coolest thing a team of engineers can build together?
Better engineers.


In two previous posts, I talked about all of the ways that you as an engineer can take personal responsibility for your growth and development. I went through a range of suggestions, things like textbooks, MOOCs, study groups, and pair programming. In this post, I’ll expand a bit on those suggestions, focusing on how we use these techniques as a technology organization.

Software engineering is a team sport, and these strategies are a part of any great team’s playbook.

Why communities?

You can read a textbook or do a massively open online course (MOOC) on your own. Why are these activities different when you do them as a team?

  • You hold each other accountable. You don’t let your teammates down when it comes to work, so you’re not likely to let them down when it comes to a study group. This can make a huge difference in your odds of finishing a MOOC. Without this sort of social reinforcement, your chances of finishing a MOOC can be quite low.
  • You learn from each other. This is why pair programming is so useful. MOOC
Continue reading

Growing Software

  • Posted by Intent Media

Let’s stop thinking about software the same way that we think about building other products. Let’s start thinking about software in terms of growing something.

I was recently reading The Mythical Man-Month. I’ve been trying to read software engineering classics to reflect on the evolution of software engineering. In 1975, Brooks was talking about incremental development in terms of growing software instead of in terms of building it.

I thought that this was a very interesting way of looking at software development. There is a lot of buzz right now around fast incremental development and fast iteration, but people in the tech industry still speak in terms of building software. I think that when you think about growing software instead of building it, it has a positive impact on your daily tasks. It helps you plan your work differently and changes your attitude towards your work and co-workers.

Building vs. Growing

Building something implies that you have a clear plan, a path to success. If there is a plan, by definition, decisions have been made ahead of time. Most of the requirements are set in stone. Only the small details are yet to be ironed out. The construction worker might … Continue reading

Choosing the Right Auction for You

  • Posted by Intent Media

When deciding on ranking rules for display ads, be it the ads alongside search engine results or sponsored search ads on e-commerce sites, one needs to choose the auction strategies that are best for the publishers and advertisers involved. Anyone who browses the web is familiar with ad units that have multiple slots ranked by varying “desirability” or click-through-rates. Advertisers place their bids to have their ads displayed in these slots and pay only if the ad is clicked. The auction designer’s job is to determine the ranking, and how much each displayed advertiser pays, that will yield the highest expected revenue. In this post, I will discuss how to approach this problem and some related concepts that we found interesting. Note that the display ad setting requires discussion of multi-item auctions. While revenue optimization of single-item auctions has been a well-researched area, our auction setting is interesting in its own merit, not only because of the the exciting, ongoing research, but also due to the massive revenue impact:  one small optimization can make a million dollar impact to your annual revenue, or a $500 million impact if you are Google! We, at Intent Media, addressed the auction design problem … Continue reading

One Up: Building Machine Learning Pipelines with Mario

  • Posted by Intent Media

As data engineers, we are often constructing large-scale pipelines to learn models of user behavior. These model learning pipelines are crucial to our business, so we need them to run reliably and efficiently at scale.

The challenges we encounter developing and maintaining sophisticated data processing pipelines are often around code clarity, testability, and extensibility. Based on our experiences with these challenges, we’ve developed solutions for various common pipeline construction problems, one of which we’re open-sourcing today. In this blog post, we’ll introduce Mario, a Scala library for constructing type-safe pipelines using functional idioms. It’s a small library that asks very little of its users but provides a great deal in terms of composability, safety, and concurrency.

Down the Warp Pipe: Introducing Mario

Mario is a Scala library focused on defining complex data pipelines in a functional, type-safe, and efficient way. It is applicable in all sorts of data pipelines, but we’re currently focusing on Spark as a primary use case.

We recently transitioned to using Spark after years of using Hadoop for our data pipelines. Our continued investment in Spark is driven by our overall happiness with Spark as a platform. It offers powerful abstractions that allow us to more … Continue reading

Data Engineering Principles & Practices

  • Posted by Intent Media

Intent Media takes its culture and values very seriously.  We want to continue to build a company full of energetic, collaborative people who are driven to make an impact.  As part of our value of openness, we on the data engineering squad decided to publicly share our thoughts around our team-level principles and practices.

What do we do on the data engineering squad?  We’re responsible for building large scale machine learning models using terabytes of eCommerce data and massive clusters of servers.  These models are used to predict user behavior on travel sites and optimize revenue for our partners.  For a deeper dive into some of what we do, check out our blog posts on the following topics:

The material below  is adapted from an internal document that we drafted over the course of months, discussing with all of our team members and stakeholders.  It’s divided into our principles, the things that we value, and our practices, the tactics we use to uphold those values in our work.

Principles and Practices


We collectively own the codebase.

Individuals are empowered to make … Continue reading

DevOps Principles Series: No-Brainer Deployments

  • Posted by Intent Media

At CITCON North America in Austin last year, I conducted a session to show the approach Intent Media uses for doing TDDevops (my name for ATDD combined with DevOps). The room filled, leaving only standing room for latecomers.

Via the CITCON mailing list, Andrew Parker asked me to elaborate on how we determined our “DevOps ground rules” at Intent Media. I was compelled to write about the approach we used.

In this blog post, I want to drill into a key aspect of that approach.

Deployment Should Be a No-Brainer/Almost Zero Risk

Software entropy impacts deployment processes like any other software. We must apply constant vigilance to ensure that they do not become something that only one person understands. Our industry calls that risk the “bus factor”. I get nervous when only one person knows how to deploy an application. We have a critical problem when one person’s luck, happenstance, illness, or disappearance, can bring things to a halt.

We engineers that adhere to a DevOps philosophy (I call us DevOps philosophers) must ensure that deployments have the following properties:

  • Accessible
  • Discoverable
  • Understandable
  • Usable

That usually means planning for the following activities:

  • Automation
  • Promotion
  • Continuous Execution
Continue reading

Making the most of your code test!

  • Posted by Intent Media


During the technical interview process at most companies, software engineering candidates are generally expected to provide evidence of the quality of their work. That demonstration often consists of a code sample or a coding test. That test serves both as a measure of the candidates skill at problem solving and an opportunity to showcase their proficiency and professionalism.

The intention of this article is to shed some light on Intent Media’s code test evaluation process, and reinforce positive qualities in the code submissions we receive. While these tips are presented in the context of an Intent Media code review, they are broadly applicable and should serve as a reasonable baseline for code submissions to any company.

The code test at Intent Media consists of a simple problem to be solved using one of our core programming languages: Clojure, Ruby, or Java. Build tools and testing libraries are allowed, other third-party libraries generally are not.

With no more instruction than that, it’s no surprise that we receive solutions that vary greatly in focus, scope, and quality. Evaluating submitted code then becomes an exercise in balancing the candidate’s interpretation of the instructions with our own internal expectations.


Here are some … Continue reading