The Portability Audit: What It Costs to Leave a Vendor
Vendor lock in is usually invisible until the moment you need to leave, and by then the answer is always more expensive than anyone expected. The fix is running a portability audit while you have no urgent reason to switch, so the real exit cost is known ahead of a price increase, an outage pattern, or a contract renewal that goes badly.
This isn't an argument for avoiding every managed service. It's a way to know, with real numbers, which dependencies are cheap to leave and which ones would take a quarter of engineering time you don't currently have budgeted.
Separate proprietary API lock in from data gravity
These are two different problems with two different fixes. Proprietary API lock in means your code calls a vendor specific interface that has no direct equivalent elsewhere, so leaving means rewriting integration code. Data gravity means your data lives in a format or a location that makes moving it slow and expensive, even if the API itself is standard. A vendor can score low on one and high on the other. Object storage with a standard, widely compatible API has low API lock in but can still have real data gravity once you're storing a large volume and egress fees start to matter.
Audit both separately for each major dependency, because the fix for one doesn't help with the other.
How do you price egress and export, not just the monthly bill?
The recurring bill is the cost you already see. The exit cost is the one nobody prices until they need to. For each major dependency, find the actual egress fee per gigabyte for pulling your data out, and whether the vendor offers any bulk export tooling or if you'd be paginating through an API for weeks. Say your primary database holds several terabytes of production data. At typical cloud egress pricing, moving that out is a real, budgetable figure, not a footnote, and it should show up in any vendor comparison alongside the monthly subscription cost.
Getting this number in writing, even informally, turns lock in from a vague fear into a line item you can plan around.
Test the exit on something small before you need to
The cheapest way to learn your real exit cost is to actually migrate something low stakes off a dependency while there's no pressure to do it. Pick a small, non critical service and move it to an alternative, or at minimum export its full dataset and confirm you can reconstruct it elsewhere. This surfaces the undocumented gotchas, a proprietary field type, an implicit ordering your code relies on, a background job that assumes the vendor's specific latency profile, while the cost of being wrong is a delayed side project instead of a failed production cutover under a renewal deadline.
Teams that skip this step find out about these gotchas during the actual high stakes migration, which is the worst possible time to learn them.
How should you score each dependency's exit risk?
Not every vendor relationship deserves the same level of exit planning. Score dependencies on two axes: how hard it would be to leave, and how much pricing power the vendor currently holds over you. A dependency that's cheap to leave and where the vendor has little pricing power needs no special attention. One that's expensive to leave and where the vendor has raised prices before is where a real portability plan earns its cost. Put this scoring somewhere the team actually revisits, not a document written once during a single planning cycle and never opened again.
This is also the right lens for deciding where to invest in abstraction layers versus where a vendor specific integration is fine as is.
Decide your walk away price before a renewal, not during one
Vendor negotiations go differently when you already know, with real numbers, what it costs to leave versus what it costs to stay. Before any contract renewal for a dependency you scored as high risk, write down the actual exit cost you found in the audit and treat that as your walk away price in the negotiation. Without that number, a price increase during renewal negotiations gets evaluated on instinct instead of on a real comparison, and vendors know it.
The audit only pays off if the numbers it produces actually show up in the room when the contract gets negotiated.
Keep the audit lightweight enough to actually repeat
A portability audit that takes a month to run the first time will never get run a second time, and a stale audit is nearly as risky as no audit at all once egress pricing or export tooling changes underneath it. Keep a simple, living record per dependency: the egress cost, the export path, the score, and the date it was last checked. Updating that record after a small exit test or a pricing change takes minutes. Rebuilding it from scratch every couple of years, because nobody kept it current, takes days and usually happens right when there's least time to spare for it.
Keep one record per dependency with these fields:
- The egress cost per gigabyte for pulling your data out, taken from the vendor's current pricing rather than memory.
- The export path, meaning whether bulk export tooling exists or you would be paginating through an API for weeks.
- The score, combining how hard the dependency is to leave with how much pricing power the vendor holds over you.
- The date it was last checked, updated after each small exit test so the record never goes stale.
What Good Looks Like
A good portability posture means every major vendor dependency has a known, priced exit cost and a documented walk away number ready before its next renewal.
Building The Capability (5-Stage Skill Ladder)
How to Get Started
Frequently Asked Questions
How often should we redo a portability audit?
Redo it for a specific dependency whenever your usage of it changes materially, more data stored, a new critical feature built on top of its specific API, or ahead of any contract renewal. A full audit across every dependency once a year is a reasonable baseline even without a trigger, since egress pricing and export tooling both change over time.
Is testing an exit on a small service a waste of time if we never plan to leave?
The point isn't necessarily leaving, it's knowing the real number. An hour spent confirming you can export and reconstruct a small dataset is cheap insurance against discovering, during a real crisis, that the export tooling doesn't work the way documentation implied. Think of it as validating an assumption before it becomes load bearing.
Should every workload avoid vendor specific features to stay portable?
No, that trades a real, current cost, slower development and worse use of the platform, for protection against a hypothetical future cost that may never materialize. Use the scoring approach: accept vendor specific features where the exit cost is low or the vendor's pricing power over you is low, and reserve the abstraction effort for the handful of dependencies that scored high on both.
About the numbers
This guide doesn't quote a sourced benchmark. Figures in it are estimates or general guidance, so check them against your own numbers.
Related Guides
Redis Locks, Postgres Advisory Locks, or etcd: Picking a Locking Pattern
How to choose between a Redis lock, a Postgres advisory lock, and a dedicated coordination service like etcd when two processes must not run the same job twice.
The Real Cost of Vendor Lock-In (and When to Actually Migrate)
How to tell whether a vendor dependency is a real business risk or just an inconvenience, and what a realistic exit actually costs you.
The Vendor Exit Checklist: What to Verify Before You Depend on a Platform
A checklist for CTOs to run before adopting a platform vendor, covering the export paths, contract terms, and pitfalls that turn dependence into lock-in.
Reducing Vendor Lock-In Without Going Multi-Cloud
Vendor lock-in mitigation is mostly about contract terms and data portability, not a full abstraction layer. Here is where to actually spend the effort.
How to Ship a Risky Change Without a 2am Rollback
A concrete walkthrough of how to plan a risky production deployment: how to split it, what to watch, and when to decide the rollback trigger.
Spotting Vendor Lock-In Before It Costs You an Exit
A practical checklist for spotting vendor lock-in in your identity, API, and infrastructure stack before switching costs become the deciding factor.