Pause and recovery as one mechanism
A deliberate pause and a dropped connection leave the system in the same state. Building one mechanism instead of two removed a class of divergence between paths that are meant to behave identically.
Resumable uploads, a faster migration path and a dedicated download service. All three sit where users notice reliability and speed straight away.
A notes product lives on moving user content in and out: uploading it, importing it from a competitor, downloading it back. Each is a place where a failure is immediately visible.
An interrupted upload that restarts from zero is a data-loss event as far as the user is concerned. A migration that runs through conventional per-item API calls is slow enough to deter people from switching at all. And download latency is felt on every single request.
Shared ownership stated as such. Nothing here claims sole authorship of a platform.
Make transfer state explicit and durable, so resuming means reading a record instead of guessing what arrived. It also means a deliberate pause and a dropped connection are the same operation.
Bypass the per-item API path for migration. The bottleneck was the number of round-trips, not the work inside each one, so tuning them individually would not have moved the result.
Separate download serving from general request handling, because a path with different characteristics is easier to optimise once it is no longer sharing one.
The ones with a real cost on the other side.
A deliberate pause and a dropped connection leave the system in the same state. Building one mechanism instead of two removed a class of divergence between paths that are meant to behave identically.
Transfers that survive interruption, a materially faster migration path from a competing product, and roughly 30% lower download time.