We replaced ten SDKs with one. Here's what broke and what didn't
The engineering diary of consolidating mediation, bidding, and attribution into a single integration.
By early 2025, a typical BidRole title shipped with ten third-party SDKs for monetization and growth: several ad networks, a mediation layer, an attribution provider, a consent manager, and a couple of analytics dependencies. Each one had its own init path, its own threading assumptions, and its own opinion about when it was allowed to touch the main thread. This is the story of collapsing that into one.
Why it was worth doing
- App size. The ten SDKs added ~14 MB to the download. Install conversion is sensitive to size, especially on Android in emerging markets.
- Startup time. Uncoordinated initialization was adding 600–900 ms to cold start.
- Debuggability. A revenue discrepancy meant opening ten dashboards. Nobody could hold the whole system in their head.
What broke
Consent timing. Our unified SDK gates every network behind a single consent signal. The first integration attempt initialized bidders before consent resolved, and a strict network dropped us for a day. Fix: a hard barrier — no adapter initializes until the consent future completes.
Attribution parity. Moving attribution in-house meant our install counts had to match the MMP's to within a fraction of a percent before finance would trust them. It took three weeks of reconciliation and one timezone bug.
A/B test contamination. The old setup ran floor-price experiments per network. The unified auction made those experiments global, and our first run split traffic incorrectly across two title versions. We added an experiment-assignment service that is authoritative across the whole SDK.
What didn't break
Revenue. ARPDAU moved up a median of 22% across migrated titles within the first month, mostly from running one real auction instead of a waterfall of them. Crash rates went down because there was less native code and one owner for all of it. And onboarding a new title went from a two-day SDK integration checklist to an afternoon.
The lesson we keep relearning: most integration pain is coordination pain. Removing the need to coordinate — one init, one consent gate, one auction, one dashboard — was worth more than any single optimization inside it.
Turn the playbook into a campaign
We'll bring the inventory and the creative team. You bring the goal.