As online marketing grows more complex, it’s difficult to get all the details right on the first try. With dozens of decisions to make for each ad, it is no surprise that there’s often room for improvement. Fortunately there’s a way to consistently make better decisions: A/B testing. However, running randomized controlled trials typically requires a good understanding of statistics, and most of our customers are not statisticians. We saw a clear need for a more understandable, automated solution especially for statistical significance calculations—so that’s what we set out to build.
Streaming is an efficient method of handling large collections of data. Working with streaming data in Ruby using blocks is clunky compared to Node.js Stream API where streams can be easily composed. In this blog post we share how we combined the ideas from Node.js Streams with Ruby enumerables to build composable streams in Ruby. This has helped us scale our feed processing to a whopping pace of over 1 million products processed each minute.
Online advertisers are moving to optimizing total revenue on ad spend instead of just pumping up the amount of conversions or clicks. Maximizing revenue is tricky as there is huge random variation in the revenue amounts brought in by individual users. If this isn’t taken into account, it's easy to react to the wrong signals and waste money on less successful ad campaigns. Luckily, Bayesian inference allows us to make justified decisions on a granular level by modeling the variation in the observed data.
The user interface of Smartly.io’s SaaS application was started as an Angular-based single page application back in 2013. We chose Angular, because it was an all-in-one solution and it had a seemingly straightforward data flow, which allowed rapid development and experimentation. Lately, we’ve been seeking ways to renew our front end stack without compromising our development speed or customer satisfaction.
Recently, we packed our 30-person developer team into a bus and drove them into the middle of nowhere for a one-day offsite. We wanted to take ourselves out of the day-to-day working environment, and focus on learning—and teaching—new skills and knowhow. Smartly.io’s first ever Engineer.io was a success.
Automation is becoming more and more prevalent in the world of online advertising. Online shopping sites may have tens of millions of products in their product catalogs, and making ads for these products manually is simply not feasible. A key part of automation is feed-based advertising, where ads get created automatically based on files containing product information such as names, descriptions, prices, pictures and so on. This blog post describes how we built the infrastructure to handle the volume of image rendering requests our advertising automation requires.
Python and R are some of the best open source tools for data science. They can be easily used for scripting and custom analysis but running them automatically as part of an online software requires more consideration. At Smartly.io, we’ve been using them both extensively. In this blog post, I’ll share some of our experiences of integrating them in production.
Finding the best way to allocate a campaign’s budget between multiple ad sets can be difficult and time-consuming. Our Predictive Budget Allocation, which was initially released last summer, uses machine learning to automate this work for you. In this blog post we'll look at recent improvements that make it even better. Using Predictive Budget Allocation remains as easy as it's always been: you only have to choose the goal that Predictive Budget Allocation should optimize towards.
Editor’s note: The original blog post was published in June 2015. We’ve since opened an office in Singapore, which made it possible for us to launch 24/5 customer service.