The CTO Podcast with Fexingo · 2026-07-02 · 11 min
Key moments - from our scoring
Substance score
65 / 100
Five dimensions, 20 points each
Dropbox's recent rewrite of its sync engine - handling 1.2 billion file operations daily across 700 million users - represents a masterclass in large-scale infrastructure migration. The company moved from a two-way sync model that created 350 million conflict copies per day to a block-level, content-addressable architecture using Merkle hash trees and vector clocks. The old C++ engine couldn't intelligently merge concurrent edits; users got duplicate 'conflicted copy' files instead. The new Rust implementation breaks files into content-addressed blocks, tracks changes via Merkle trees, and resolves 99.9% of conflicts automatically through causal history tracking and deterministic merging. The migration spanned three years using a strangler fig pattern - running old and new engines in parallel through three rollout tiers (old-only, hybrid read/write split, full new engine) before full cutover. They also rebuilt the client-server protocol from REST polling (30-second detection latency) to persistent gRPC with server-sent events (under 1-second latency), reducing server bandwidth by 40%. A fifteen-person core infrastructure team owned the rewrite while liaisons from mobile, desktop, and web teams ensured product fit. For structured formats like Office documents, Dropbox delegates to vendor-specific sync APIs rather than attempting opaque block merging.
Dropbox uses Merkle hash trees to track block-level changes and vector clocks to detect causal dependencies between edits. If changes are causally related, they're applied in order; if truly concurrent with no causal relationship, a deterministic merge rule applies. This resolves 99.9% of conflicts automatically without user intervention.
The old C++ engine had accumulated technical debt with manual memory management and thread safety issues that caused the monolithic two-way sync model to create 350 million conflict copies daily. Rust provided memory safety without garbage collection and an async ecosystem that efficiently handles thousands of concurrent sync operations.
Dropbox replaced REST polling (which checked every 30 seconds) with persistent gRPC streams using server-sent events, reducing change detection latency from 30 seconds to under 1 second and cutting server bandwidth by 40%.
They used a strangler fig pattern, running old and new engines in parallel for 18 months while gradually rolling out three tiers: old engine only, hybrid mode (reads from new, writes to old), and full new engine. Users could opt in via feature flags, and automatic rollback triggered if data integrity errors occurred.
No - Dropbox delegates sync for structured file formats to the application vendors' own sync APIs (Microsoft and Google), which are block-level but application-aware, because Dropbox's engine cannot meaningfully merge opaque binary formats.
Our reviewer’s read on each dimension, with quotes from the episode.
The episode packs specific technical claims densely: 1.2B file operations/day, 350M conflict events/day, block-level sync, Merkle trees, vector clocks, 99.9% automatic conflict resolution, sub-200ms latency, 40% bandwidth reduction, three-tier migration model. These are substantive enough for a CTO to learn concrete patterns. However, some explanations remain surface-level (e.g., 'Rust gave them memory safety') and miss deeper failure analysis or performance trade-offs.
Dropbox handles about one point two billion file operations per day.
As of 2024, Dropbox was seeing about three hundred fifty million conflict events per day.
The episode recounts Dropbox's published engineering blog work faithfully but doesn't generate fresh analysis or counterintuitive frameworks. The technical choices (block-level sync, Merkle trees, vector clocks, gRPC) are well-known patterns applied competently; the hosts provide useful synthesis but minimal novel perspective on *why* these choices matter beyond surface benefits.
They use a data structure called a Merkle tree - specifically a Merkle hash tree
They use a last writer wins strategy, but with a twist: the system tracks causal history using vector clocks.
No actual Dropbox engineer is present; the hosts (Lucas and Luna) are discussing published material and making educated inferences rather than speaking with firsthand experience. For a technical architecture discussion, this is a meaningful gap. The hosts appear knowledgeable but are recounting rather than drawing from direct system ownership.
Dropbox recently published a really detailed post-mortem
They used a dedicated core infrastructure team - about fifteen engineers
The episode is unusually rich in concrete numbers and technical specifics: 1.2B ops/day, 700M users, 350M conflicts/day, 99.9% auto-resolution rate, sub-200ms vs 500ms latency, 40% bandwidth reduction, 0.01% rollback rate, three-year migration timeline, 15-engineer core team, 18-month parallel run, 30s to <1s change detection. One limitation: minimal detail on the actual bug (race condition in block indexing) or the old system's memory/architecture problems.
Dropbox handles about one point two billion file operations per day
As of 2024, Dropbox was seeing about three hundred fifty million conflict events per day
The dialogue is structured well and Luna asks intelligent follow-ups ('What happens when two devices change the same block?' and 'what about things like Office documents?'). However, questions are mostly clarifications rather than pushback; neither host challenges claims, asks about trade-offs (cost of the three-year rewrite?), or probes failure modes deeply. The conversation is thoughtful but safe, lacking the tension that would elevate it.
Luna: What happens when two devices change the same block? Do they use CRDTs?
Luna: One thing I'm curious about: the block-level approach works well for binary files, but what about things like Office documents
Computed from the transcript - who did the talking, and the words that came up most.
In this episode of The CTO Podcast, Lucas and Luna dive into the technical architecture behind Dropbox's sync engine, which handles file operations for over 700 million users across every major platform. They explore the shift from a two-way sync model to a block-level, content-addressable system, and how Dropbox rebuilt its core to handle conflicts between millions of devices simultaneously. Specific numbers: 1.2 billion daily file operations, 350 million conflict events per day, and a median sync latency under 200 milliseconds. The hosts break down the trade-offs between local-first design and cloud consistency, the role of CRDTs in resolving merge conflicts, and why the team chose to rewrite the engine in Rust after a decade of C++. Along the way, they touch on how the engineering org structured the migration without downtime for users, and what lessons apply to any team building distributed storage at scale. A concrete case study for anyone who builds or manages data-intensive systems.
Transcribed and scored by The B2B Podcast Index.
Lucas: If these conversations are useful for what you're building or running, I want to start today with a number that still kind of blows my mind: Dropbox handles about one point two billion file operations per day. That's syncing, uploading, downloading - across seven hundred million registered users. Luna: And that's just the public-facing number. Behind the scenes, their conflict resolution engine has to reconcile what happens when the same file gets edited on three devices at once.
Lucas: Exactly. That's the part I wanted to dig into. Dropbox recently published a really detailed post-mortem - or really, a 'how we rebuilt it' - on their sync engine. And this is a system that's been running since 2007, written in C++, and they decided to rewrite the core in Rust.
Luna: A full rewrite of a production sync engine serving hundreds of millions of users - that's the kind of thing that keeps CTOs up at night. Lucas: Right. And to their credit, they didn't do it all at once. They used a strangler fig pattern - slowly replacing the old sync logic with new Rust-based components while keeping the C++ code running in parallel for years.
The actual migration took about three years from first commit to full cutover. Luna: So let's start with the why. What was broken about the old engine? Lucas: The old engine used a two-way sync model.
Basically, it tracked pairs of folders - your local Dropbox folder and the cloud. It would compare timestamps, checksums, and try to figure out what changed. That works fine when you have one laptop and one phone, but it starts to fall apart with multiple devices, selective sync, and especially with the rise of mobile. Luna: And the failure mode was conflicts.
If two devices modified the same file before either one synced, you'd get a conflict copy - 'conflicted copy.' Which is a user-facing problem, but also a data integrity problem. Lucas: Exactly. Under the old model, the system couldn't merge changes intelligently.
It would just create a duplicate and let the user sort it out. As of 2024, Dropbox was seeing about three hundred fifty million conflict events per day. That's an enormous tax on user trust and on the backend. Luna: So they decided to move to a block-level sync engine.
Instead of treating a file as a monolithic blob, they break it into chunks - blocks - and track each block by its hash. That's content-addressable storage in the classic sense. Lucas: Right. So if you change one paragraph in a hundred-page document, the old system might re-upload the whole file.
The new system only uploads the blocks that actually changed. And because it's hash-addressed, deduplication happens automatically - if two users have the same block, it's stored once. Luna: That's huge for bandwidth and storage costs. But the real magic is in conflict resolution.
How do they merge concurrent edits at the block level? Lucas: They use a data structure called a Merkle tree - specifically a Merkle hash tree - for the file's block index. Every file has a tree of block hashes. When two devices sync, they compare the root hash.
If it's the same, no conflict. If it differs, they walk down the tree to find which sub-tree diverged, and then they can merge at the block level. Luna: So instead of a whole-file conflict, you only get a conflict on the specific blocks that changed. And if the changes are in different blocks, the merge is automatic.
Luna: What happens when two devices change the same block? Do they use CRDTs? Lucas: They do something similar but not exactly a pure CRDT. They use a last writer wins strategy, but with a twist: the system tracks causal history using vector clocks.
So if device A and device B both modify block X, but A's change is causally dependent on B's, the system can detect that and apply both in order. Lucas: If they're truly concurrent - no causal relationship - they fall back to a deterministic merge based on a consistent ordering rule. In practice, they say that over ninety-nine point nine percent of conflicts are resolved automatically without user intervention. Luna: That's a massive improvement.
And it also reduces the number of conflict copies users have to deal with, which is a direct UX win. Lucas: Exactly. And the Rust rewrite played a big role in making the block-level engine performant enough. The old C++ engine had a lot of accumulated technical debt - manual memory management, thread safety issues, and a monolithic architecture.
Rust gave them memory safety without a garbage collector, and the async ecosystem allowed them to handle thousands of concurrent sync operations efficiently. Luna: I've heard that the new engine achieves a median sync latency under two hundred milliseconds for small files. Is that right? Lucas: That's what they reported in their engineering blog.
And that's end to end - from the moment a file changes on one device to the moment it appears on another. Under the old engine, that number was closer to five hundred milliseconds for the same scenario. So it's more than doubled the perceived speed. Luna: Quick honest thing - we can only keep making deep dives like this because a handful of listeners chip in monthly through buy me a coffee dot com slash fexingo.
That literally funds the research and production time. So if you get value from these episodes, consider joining them. Lucas: Yeah, it's a small group that already keeps it ad-free, and it makes a real difference. Anyway, back to the architecture - one of the more interesting design decisions was how they handled the migration of existing users' data to the new block format.
Luna: Right - because you can't just migrate seven hundred million users overnight. They used a gradual rollout where users could opt in to the new engine via a feature flag. Lucas: And the opt-in wasn't binary. They actually had three tiers: old engine, hybrid mode where reads used the new engine but writes still used the old, and full new engine.
That let them catch bugs without risking data loss. Luna: What was the biggest bug they caught during that rollout? Lucas: The most memorable one was a race condition in the block indexing layer. When a file was being synced from two devices simultaneously, the new engine could create duplicate blocks for the same content if the deduplication check happened before the first write completed.
They had to add a distributed lock on the block hash. Luna: That's exactly the kind of edge case that's hard to catch in testing but becomes obvious at scale. So they had to handle that before full rollout. Lucas: And they did.
They also built a canary system that would automatically roll back the feature flag for any user who experienced a data integrity error. Over the three-year migration, they only had to roll back about zero point zero one percent of users - mostly due to very old file formats that the new engine didn't handle perfectly. Luna: One thing I'm curious about: the block-level approach works well for binary files, but what about things like Office documents or collaborative apps where the file format is opaque?
You can't merge blocks if you don't understand the structure. Lucas: That's a great point. For structured file formats, Dropbox actually partners with the application vendors - Microsoft, Google, etc. - to use their own sync APIs.
So for Office documents, they use Microsoft's own sync protocol, which is block-level but application-aware. The Dropbox sync engine handles the binary files and the metadata, but the app-specific sync is delegated. Luna: So the sync engine is really a general-purpose infrastructure layer, not a one-size-fits-all solution. That makes sense.
Lucas: Exactly. And it's worth noting that they also rebuilt the client-server protocol. The old protocol was rest based with polling. The new one uses a persistent gRPC stream with server-sent events.
That reduced the time to detect changes from thirty seconds to under one second. Luna: That's a massive improvement. And it also reduces server load because clients aren't polling every thirty seconds. Lucas: Right.
The engineering team estimated that the new protocol reduced server-side bandwidth by about forty percent because of the elimination of polling overhead and the block-level deduplication. Luna: What about the team structure? How did they organize the rewrite without disrupting the existing product? Lucas: They used a dedicated core infrastructure team - about fifteen engineers - that owned the sync engine.
But they also embedded liaisons from the mobile, desktop, and web teams to ensure the new engine met their needs. And they ran the old and new engines in parallel for eighteen months before cutting over. Luna: So it was a classic 'two-pizza team' with strong cross-functional ties. That's a good pattern for any large-scale infrastructure rewrite.
Lucas: Absolutely. And the key lesson is that they didn't try to rewrite everything at once. They started with the block storage layer, then the conflict resolution, then the protocol, and finally the client libraries. Each piece was tested independently before integration.
Luna: It sounds like the migration took longer but was much safer. I think a lot of CTOs would want to move faster, but Dropbox's approach is a case study in managing risk. Lucas: Right. And the result is a sync engine that can handle one point two billion daily operations with a median latency under two hundred milliseconds.
That's the kind of number that makes you think about what's possible when you invest in foundational infrastructure. Luna: It also raises the question: how long until we see similar approaches in other consumer storage products? Google Drive, iCloud - they all face the same challenges. Lucas: They do.
And I think we'll see more of these block-level, content-addressable sync engines become the standard. Dropbox has essentially shown that it's feasible at planet-scale. The next frontier might be real-time collaborative editing at the block level, but that's a whole other conversation. Luna: For now, it's a great example of how investing in the core infrastructure - even if it takes years - can pay off in performance, reliability, and user trust.
Lucas: Exactly. And with that, I think we've covered the key architectural decisions. If you want to read the full technical deep-dive, Dropbox published their engineering blog series on it. Thanks for listening.
Other episodes covering the same guests and topics, from across The B2B Podcast Index.