The B2B Podcast Index
Index
All categories
MarketingSalesSaaSFinanceHROpsLeadershipCustomer SuccessAI & DataProductStartups & FoundersRevOpsEngineering & DevTools
MethodologySubmit
Best of:MarketingSalesSaaSFinanceHROpsLeadershipCustomer SuccessAI & DataProductStartups & FoundersRevOpsEngineering & DevTools
An independent project byFame
SearchBest episodesGuestsInsightsMethodologySubmit a podcast
Index/Engineering & DevTools/The CTO Podcast with Fexingo
The CTO Podcast with Fexingo artwork

How Skyscanner Migrated 300 Microservices to Event-Driven Architecture

The CTO Podcast with Fexingo · 2026-07-02 · 10 min

0:00--:--

Key moments - from our scoring

Substance score

65 / 100

Five dimensions, 20 points each

Insight Density15 / 20
Originality13 / 20
Guest Caliber11 / 20
Specificity & Evidence14 / 20
Conversational Craft12 / 20

Skyscanner's migration from synchronous microservices to event-driven architecture offers a case study in managing complexity at scale. After a single service failure cascaded through their REST-based system and crashed the price search pipeline, CTO Tom Hinton led a two-year effort to decouple 300 services using Apache Kafka as the backbone. Rather than attempting a big-bang rewrite, Skyscanner used the strangler fig pattern, migrating critical data flows (price search, availability, booking) incrementally while maintaining parallel synchronous paths for rollback safety. The organizational structure shifted to align teams around 'value streams' - business events like PriceUpdated or BookingConfirmed - forcing a data contract-first mindset. Using Avro with schema registry versioning, teams established formal governance for event schemas. The technical challenge proved secondary to the social one: getting distributed teams to agree on event contracts and backward compatibility proved harder than operating Kafka itself. The payoff was substantial: 60% p99 latency reduction through eliminating synchronous fan-out, local event-driven caches, and graceful degradation replacing cascading failures. By mid-2025, 200 of 300 services were fully event-driven, with the remaining legacy services on a slower adoption track.

Key takeaways

  • →Skyscanner achieved 60% p99 latency reduction by replacing synchronous fan-out with event-driven caches that allow services to respond without network calls.
  • →The migration succeeded through the strangler fig pattern - running old REST and new event paths in parallel for six months per data flow, enabling rapid rollback.
  • →Data contracts and Avro schema governance proved harder than the Kafka infrastructure itself, requiring teams to shift from API thinking to event contract thinking.
  • →Teams were reorganized around value streams (business events) rather than service boundaries, aligning organizational structure with the new architecture before completion.
  • →The system became hybrid 'event-aligned' rather than purely event-sourced, keeping synchronous checks for high-consistency operations like bookings while accepting eventual consistency for price searches.

Topics in this episode

Event-driven architectureData contractsstrangler fig patternApache KafkaAvro schema registryCQRSEvent sourcingValue streamsKafka log compactionCascading failures

Questions this episode answers

How did Skyscanner migrate 300 microservices without a complete rewrite?

They used the strangler fig pattern, migrating one data flow (value stream) at a time - like price search or availability - while running both synchronous REST and new event streams in parallel for 6 months before cutting over the old path. This reduced risk and enabled rapid rollback.

What caused Skyscanner to move from REST microservices to event-driven architecture?

A cascading failure during peak booking season took down their entire price search pipeline for an hour when a single service failed, exposing the brittleness of their tightly-coupled synchronous HTTP system.

Why did Skyscanner achieve such significant latency improvements with event-driven architecture?

The migration eliminated synchronous fan-out (sequential HTTP calls to 5-6 services per query) and enabled downstream services to maintain local event-driven caches, allowing responses without network calls.

How did Skyscanner handle schema evolution with hundreds of teams producing and consuming events?

They adopted Avro with a Kafka schema registry, versioning all schemas with explicit opt-in required for breaking changes, and created comprehensive internal documentation standards for event contracts.

Did Skyscanner make everything event-driven, or did they keep synchronous operations?

They adopted a hybrid 'event-aligned' approach, using events for most operations but maintaining synchronous checks for high-consistency requirements like booking confirmations.

What our scoring noted

Our reviewer’s read on each dimension, with quotes from the episode.

Insight Density

15 / 20

The episode packs substantive technical and organizational insights - strangler fig pattern, value streams, data contracts, CQRS/event sourcing enablement, eventual consistency tradeoffs, Kafka log compaction - delivered with specific context. However, roughly 15% of airtime is filler (the sponsorship plug, throat-clearing questions like 'so that was the trigger?', and some back-and-forth confirmation), which moderately dilutes density.

They reorganized their engineering teams around those flows, not around their old service boundaries.
The technology was the easy part. Kafka is well understood. The hard part was the data contracts - getting every team to think about what events they produce, what guarantees they offer, and how to handle backward compatibility.

Originality

13 / 20

The episode covers well-documented migration patterns (strangler fig, CQRS, event sourcing, Kafka schema registry) without significant reinterpretation or contrarian framing. The emphasis on data contracts and organizational alignment is somewhat fresher than typical infrastructure porn, but the overall narrative follows familiar industry playbooks (Netflix, Uber, and others have executed similar migrations).

They used a strangler fig pattern - exactly.
They called them 'value streams'. Each value stream had end to end ownership of a business event

Guest Caliber

11 / 20

The episode discusses Skyscanner's CTO Tom Hinton and the migration, but Hinton is not present as a guest - the hosts (Lucas and Luna) relay secondhand accounts of Skyscanner's decisions and metrics. There is no direct practitioner voice, which materially weakens credibility and depth. The hosts appear knowledgeable but are acting as interpreters rather than primary sources.

Luna: I remember that.
Their CTO at the time, Tom Hinton, made the call

Specificity & Evidence

14 / 20

The episode includes concrete figures (300 microservices, 2-year timeline, 6 services per cascade, nearly an hour downtime, 60% p99 latency reduction, 200 of 300 migrated by mid-2025, 6 months for first flow, zero cascading failures post-migration) and named technologies (Kafka, Avro, Protobuf, CQRS). However, specificity is limited by secondhand reporting - no raw data, no links to public postmortems or benchmarks, and some claims lack supporting detail (e.g., 'six months to fully migrate price search' but no breakdown of effort or team size).

three hundred microservices from synchronous REST calls to an event-driven architecture
a sixty percent reduction in p99 latency for price searches

Conversational Craft

12 / 20

The hosts ask reasonable follow-up questions ('where did the latency savings come from?', 'what about consistency?', 'why Kafka over Pulsar?') and gently probe organizational tradeoffs. However, questions are largely confirmatory rather than challenging - the hosts rarely push back, fact-check, or expose tension (e.g., no pushback on whether zero cascading failures is realistic, or whether eventual consistency tradeoffs are fully understood by all teams). The tone is collegial and explanatory rather than investigative.

Luna: That's a great question. The savings came from eliminating synchronous fan-out.
Luna: That's a pragmatic approach. Not every operation needs to be asynchronous.

Conversation analysis

Computed from the transcript - who did the talking, and the words that came up most.

Most-used words

lucas20event20luna19services14data12kafka10service8synchronous7search7migration7events7hundred5driven5skyscanner5price5teams5

Episode notes

Lucas and Luna dig into how Skyscanner, the travel meta-search giant, moved 300 microservices from a synchronous REST model to an event-driven architecture over two years. They cover the concrete trigger (a 2022 outage caused by cascading HTTP failures), the decision to adopt Apache Kafka as the backbone, the strangler fig pattern used to migrate incrementally, and the key metric: a 60 percent reduction in p99 latency for price searches. The hosts also discuss the organizational challenges - how Skyscanner reorganized engineering teams around business events rather than service boundaries, and the surprising lesson that the hardest part wasn't the tech but the data contracts. This is a practical look at a real-world event-driven migration at scale. #Skyscanner #EventDrivenArchitecture #ApacheKafka #Microservices #TechMigration #SystemDesign #LatencyReduction #DistributedSystems #EngineeringOrg #StranglerFig #DataContracts #TravelTech #Scalability #Architecture #BusinessAndTechnology #FexingoBusiness #BusinessPodcast #CTOPodcast Keep every episode free: buymeacoffee.com/fexingo

Full transcript

10 min

Transcribed and scored by The B2B Podcast Index.

Lucas: If you're running an engineering org and someone tells you they want to move three hundred microservices from synchronous REST calls to an event-driven architecture, your first reaction might be to ask if they've lost their mind. Luna: Yeah, that's not a trivial lift. But Skyscanner actually did it over about two years, and the results are pretty telling. Lucas: Exactly.

Skyscanner - the travel meta-search platform, hundreds of millions of queries per day - they started this migration in 2023 after a particularly nasty outage. A single service failure cascaded through synchronous HTTP calls and took down the entire price search pipeline for nearly an hour. Luna: I remember that. During peak booking season, too.

So that was the trigger? Lucas: That was the trigger. They'd been running a fairly standard microservices setup for years - each service owned its own data, communicated via REST, some gRPC. But as the number of services grew, the dependency graph got more tangled.

A failure in one place could ripple through five or six services before anyone could stop it. Luna: And the travel domain is particularly nasty because every query touches multiple services - flights, hotels, car rentals, pricing, availability, user preferences. It's a fan-out scenario. Lucas: Right.

So their CTO at the time, Tom Hinton, made the call: they would move to an event-driven architecture with Apache Kafka as the backbone. The idea was to decouple services so that if one goes down, the others can still process messages from the queue and catch up later. Luna: But a full rewrite of three hundred services is insane. They must have done this incrementally.

Lucas: They used a strangler fig pattern - exactly. They didn't rewrite anything from scratch. Instead, they identified the most critical data flows: price search, booking, availability. For each flow, they introduced a new event stream alongside the existing synchronous path.

Over time, new consumers subscribed to the event stream, old consumers were migrated, and eventually the synchronous path was cut. Luna: So they ran both systems in parallel for a while. That's a lot of operational overhead. Lucas: Huge overhead.

But it meant they could roll back quickly if something broke. The key insight was that they didn't try to migrate all services at once - they migrated data flows. A 'data flow' is a set of services that participate in a specific user-facing feature, like 'get flight prices'. They reorganized their engineering teams around those flows, not around their old service boundaries.

Luna: That's actually a really interesting organizational change. You're basically aligning the team structure to the new architecture before the architecture is fully built. Lucas: Exactly. They called them 'value streams'.

Each value stream had end to end ownership of a business event - like 'PriceUpdated' or 'BookingConfirmed'. The teams were responsible for producing and consuming events for their domain. That forced them to think in terms of contracts, not just APIs. Luna: And contracts are where things get messy.

What format did they use? Avro? Protobuf? Lucas: They went with Avro, with a schema registry on top of Kafka.

Every event had a schema, and the schema was versioned. Breaking changes required a new major version, and consumers had to explicitly opt in. That gave them confidence to evolve schemas without breaking downstream services. Luna: So the hard part wasn't the Kafka infrastructure - it was getting teams to agree on schemas and handle versioning properly.

Lucas: That's exactly what they said in their post-mortem. The technology was the easy part. Kafka is well understood. The hard part was the data contracts - getting every team to think about what events they produce, what guarantees they offer, and how to handle backward compatibility.

They had to create an entirely new internal documentation standard for event schemas. Luna: I've heard similar stories from other companies. The social challenge often outweighs the technical one. Lucas: And if you're finding these kinds of deep-dive conversations valuable for what you're building or running, it's worth knowing that there's a simple way to support the show.

A couple of dollars a month is genuinely what keeps these going - buy me a coffee dot com slash fexingo, if you've gotten something out of them. Luna: Yeah, it really does make a difference. Keeps us ad-free and focused on the stories that matter. Lucas: So back to Skyscanner.

One of the more surprising metrics they shared after the migration was a sixty percent reduction in p99 latency for price searches. Luna: That's huge. Where did the latency savings come from? I'd expect event-driven systems to be more resilient, but not necessarily faster.

Lucas: Right, that's a great question. The savings came from eliminating synchronous fan-out. In the old system, when a user searched for flights, the search service would make HTTP calls to five or six downstream services in sequence or parallel - pricing, availability, airline data, etc. Each call added network latency, queueing delay, and potential retry overhead.

In the new system, the search service publishes a 'SearchRequested' event, and all the downstream services consume that event asynchronously, process it, and publish their own events back. The search service aggregates the results from the event stream. The key is that the downstream services can precompute some data and cache it, so when the event comes in, they respond faster. Luna: So it's not just about moving from synchronous to asynchronous - it's about enabling new patterns like event sourcing and CQRS that weren't feasible before.

Lucas: Exactly. They also adopted a pattern where some services maintain local caches that are updated via events. That means the service can respond to queries without making any network calls at all - just read from its own cache. That's where the big latency wins came from.

Luna: What about consistency? If you're caching data updated asynchronously, you're accepting some degree of staleness. Lucas: They accepted eventual consistency for most data. For price searches, a few seconds of staleness is acceptable - users often refresh anyway.

For bookings, they kept synchronous checks. The system wasn't purely event-driven for all operations; it was a hybrid. They called it 'event-aligned' rather than event-sourced. Luna: That's a pragmatic approach.

Not every operation needs to be asynchronous. So what was the migration timeline like? Lucas: They started in early 2023 with the price search flow - it was the highest traffic and most painful when it failed. That took about six months to fully migrate.

Then they moved to availability, then booking, then ancillary services like recommendations and user profiles. By mid-2025, about two hundred of the three hundred services were fully event-driven. The remaining hundred are on a slower track because they're lower traffic or have legacy dependencies. Luna: So they're not forcing a full migration.

They're letting teams move at their own pace as long as they adopt the new patterns for new features. Lucas: That's the strategy. And it's working. They've had zero cascading failures since the migration.

The system degrades gracefully - if a downstream service goes down, the events queue up and get processed when it comes back. Users might see slightly stale data, but they don't see errors. Luna: One thing I find interesting is that they chose Kafka over something like Pulsar or RabbitMQ. Any idea why?

Lucas: They evaluated a few options. Kafka won because of its mature ecosystem, strong durability guarantees, and the fact that they already had some Kafka experience from their data pipeline team. The operational complexity of Kafka was a concern, but they figured they could manage it with their existing infrastructure team. And they use Kafka's log compaction feature heavily for state restoration.

Luna: Log compaction is really useful for event sourcing - it lets you replay events to rebuild state without keeping every single event forever. Lucas: Exactly. They use compacted topics for things like 'FlightScheduleChanged', where they only need the latest state per flight. That keeps their storage manageable.

Luna: So what's the one lesson you'd take away from Skyscanner's migration for a CTO considering a similar move? Lucas: I'd say: don't start with technology. Start with data contracts. Get your teams to agree on what events exist, what they mean, and who owns them.

If you can't get that right, the Kafka cluster won't save you. Skyscanner spent the first three months just defining event schemas and governance before writing a single line of streaming code. Luna: That's a good lesson. And it's easy to overlook when you're excited about the infrastructure.

Lucas: Yeah. The infrastructure is the fun part. The contracts are the hard work. But if you do the hard work first, the migration becomes almost mechanical.

Related episodes across the Index

Other episodes covering the same guests and topics, from across The B2B Podcast Index.

  • Durable Execution for Real‑World Failures with Temporal’s Cornelia DavisPlatform Engineering Podcast · on Event-driven architecture96 / 100
  • Data Marketplace, Data Products and Data ContractsCaSE: Conversations about Software Engineering · on Data contracts95 / 100
  • #25 - Tanner Linsley: TanStack DBlocalfirst.fm · on Event sourcing87 / 100
  • Navigating AI's Ethical Nightmare Challenges (Reid Blackman)What’s the BUZZ? - AI in Business · on Cascading failures84 / 100
  • Why Your AI Strategy Is Failing (And What to Do About It) | AI for the C-Suite EP 66AI For the C Suite with Chad Harvey™ · on Value streams80 / 100
  • The space between the Commits with Zed and DeltaDB's Nathan SoboHanselminutes with Scott Hanselman · on Event sourcing75 / 100

More from The CTO Podcast with Fexingo

All episodes →
  • How GitHub Migrated 100 Million Repositories to a New Storage Engine76 / 100
  • How Dropbox Rebuilt Its Sync Engine for 700 Million Users85 / 100
  • How Palantir Rebuilt Its Foundry Ontology for Government AI Deployments85 / 100
  • How Netflix Rebuilt Its Content Delivery for 300 Million Subscribers85 / 100
  • How Coinbase Rebuilt Its Blockchain Node Infrastructure72 / 100
Explore the best B2B Engineering & DevTools podcasts →
All The CTO Podcast with Fexingo episodes →