Where does an ad-serving stack break as formats keep multiplying?
Uber Ads started with Sponsored Listings, then grew to Sponsored Items, display, banners, and video. Retrieval, scoring, and bidding logic forked per surface, and with a shared codebase, deployments became coupled. A bad change on one surface could force a rollback of an unrelated one.
The turning point was to rebuild ads around capabilities rather than per-surface features. A supply layer normalizes each surface's request into an AdSpec, a marketplace layer picks an auction or a preferred-deal strategy, and demand providers bid. Surface-specific context is split into extensions, and only the providers that need them use them.
Traffic is then split into environment-based fleets running the same codebase. Deployments and rollbacks are independent, and if a provider fails, the auction completes with the remaining candidates.
"Build capabilities, not features" and "push complexity to the edges" carry over to any multi-surface platform.
Note: this is a blog post, and it reports no quantitative results.
Title: Designing a Generalized Ads Marketplace Platform
#
SystemDesign# #
AdTech#