Personalization For The Good Of All

by Antti Aalto - 16 May 2017

In the Fall of 2016, five senior software engineers found themselves in cold water. Not only was the freezing Finnish winter approaching fast, but the whole vision for their team was about to raise chills: revolutionize the whole personalization approach for customers shopping on Zalando. The bar was set high. The user stories were endless. The key metrics set for product evaluation bewildered even the most analytically minded developer.

On the other hand, this was a greenfield project–the dream of any programmer. This meant that Team Picasso, who look after content personalization, would have significant influence on how the end product would look like. They were also given free reign on all technological choices with little dependant systems to worry about. The young and cozy Zelsinki office proved to be a peaceful and distraction-free nest to focus purely on the engineering challenges this project presented, although spontaneous Nerf wars tended to occur in the late afternoon.

The journey was a twisting maze of little passages, all different and varied. These new hires had travelled on average 5,000 kilometers from all around the world, from different cultures, speaking different languages, with nobody being able to pronounce anyone’s name exactly right. Nevertheless, linguistic problems didn’t prevent our team from spending hours arguing about requirements and solutions. These debates often developed emotional undertones when everyone advocated for their brainchild. It’s natural for people to identify and become attached to their ideas, and now they were openly poking holes in each other’s designs.

During the course of development, something remarkable happened: people started to detach themselves from their babies and rejoice when being proven incorrect. After all, you thought you had the perfect solution to the problem at hand, and now you were handed a better one. What an opportunity for learning!

Armed with this strong drive for technological excellence and fact-based decisions, the team started work on content personalization.

The Product

The Zalando Core Platform consists of a plethora of small components, and content personalization is a vital piece of it. The previous iterations of the Fashion Store’s recommendation system were mostly focused on products and brands. Now we wanted to extend this concept to all content, including blog posts, hand-curated collections, and advertising.

Team Picasso was tasked in building a microservice called Content Broker. Content Broker provides various customer-facing applications with a single endpoint for retrieving a dynamically configured selection of A/B tested and personalized content. This collection of content will be carefully selected to maximize certain KPIs, be it basket size, user retention, or plain old click-through rate.

The dynamic configuration allows modifications to the content selection and ordering logic during runtime, without re-deploying any application components. The configuration also makes it possible to implement various business rules for content selection in different contexts, for example, by different applications or demographics.

To verify that the content selection works as intended, Content Broker provides tooling for easy A/B testing between configurations. Zalando already had excellent tooling for A/B testing–of course, implemented as yet another microservice–which could be incorporated in personalization products, too. Using these battle tested solutions ensures the tests are done free from sampling errors and other issues in statistical analysis.

The Content Broker is a Zalando Core Platform component, which means that it will be used by both Zalando internal applications and third-party applications. The first version went live in February 2017 on the Zalando website, and the work will then continue with extending the configuration options, more content sources, and some very interesting new applications.

If you’d like to ask any questions, feel free to get in touch via Twitter at @aaltoantti.

Similar blog posts