The invoice that never shows up in the SOW
Every vendor decision looks cheap on the day you make it. The managed database costs less than running your own. The serverless platform ships the MVP in six weeks instead of six months. The proprietary workflow engine solves a real problem today, with a demo you can show a client on Friday. None of that is wrong. It is usually the correct call in the moment. The mistake is not knowing what you are buying alongside the convenience: a bill that does not arrive until the day you try to leave.
That bill is vendor lock-in, and in 2026 it is a bigger line item than most engineering leaders budget for. It shows up as unplanned migration spend, as data you cannot afford to move, as a roadmap you no longer control because it belongs to someone else's product team. We have rebuilt enough client systems after the fact to know the pattern: nobody chose lock-in on purpose. It accumulated, one convenient managed service at a time, until leaving became more expensive than staying.
What the 2026 numbers actually say
Flexera's 2026 State of the Cloud Report found cloud waste rose to 29 percent this year, the first increase in five years after a steady downward trend, driven in large part by generative AI workloads that are harder to size and optimize than traditional compute. That waste is not the same thing as lock-in, but it is a symptom of the same root cause: organizations committing to platform-specific services faster than they can govern them.
The lock-in-specific numbers are sharper. Industry estimates put global public cloud spend at roughly 723 billion dollars for 2025, and against that backdrop, teams report an average cloud budget overrun of 17 percent, with unanticipated migration spending adding another 14 percent to project costs in 2024 alone, according to figures compiled by Selleo. Separate research into enterprise AI vendor dependency puts the average cost of a single migration project at 315,000 dollars. And in Parallels' 2026 State of Cloud Computing Survey of 540 IT professionals across the US, UK, and Germany, 94 percent of respondents said they were concerned about vendor lock-in, with nearly half describing themselves as very concerned. Fifty-seven percent worried specifically about inadequate future support, and 46 percent cited uncertain product roadmaps outside their control.
The concern is not hypothetical. Enterprises that leaned hard into a single AI vendor felt Azure OpenAI's pricing increases in early 2025 directly in their unit economics, and a ChatGPT outage that same January took down workflows for companies that had no fallback provider wired in. Builder.ai's collapse in 2025 left customers who had built on its proprietary platform with no clean exit at all. These are not edge cases. They are what lock-in risk looks like when it stops being theoretical.
Four kinds of lock-in, and how each one bites
Lock-in is not one thing. It is a spectrum from mildly annoying to existential, and the type matters more than the vendor name when you are deciding how much risk to accept.
| Lock-in type | What creates it | Risk level |
|---|---|---|
| Proprietary APIs and SDKs | Business logic written directly against a vendor's event model, SDK, or function signature, so migrating means rewriting code, not just redeploying it | Medium-High |
| Data egress and storage fees | Per-gigabyte charges to move data out, layered with cross-region and gateway processing fees | High |
| Managed-service-specific tooling | Proprietary databases, queues, or workflow engines with no open equivalent to migrate to | Medium-High |
| Closed-source and low-code platforms | Core product logic that only runs inside a vendor's engine, with no exportable source | High |
| Contract and operating-model lock-in | Multi-year agreements, undocumented architecture, and admin access held only by the vendor or a single outside team | Medium |
The first two are the ones we see catch clients off guard most often, because they feel like pure infrastructure decisions rather than business risk. A team picks a managed NoSQL database because it is fast to prototype with, bakes its data model into that vendor's specific query patterns for two years, and only discovers the true cost of leaving when a pricing change or an outage forces the question.
The last row on that table is the one engineers underrate the most. Contract and operating-model lock-in has nothing to do with code. It is what happens when a single outside agency holds the only copy of your architecture decisions, or when your infrastructure admin access sits behind an account you do not control. We have taken over projects where the incoming team's first task was not writing new features, it was negotiating access to the client's own production environment. That is a self-inflicted version of lock-in, and it is entirely avoidable with a contract clause instead of a rewrite.
Cloud pricing is not symmetric. It is close to free to move data in and metered by the gigabyte to move it out: roughly 0.085 to 0.12 dollars per GB across AWS, Azure, and GCP's standard tiers, before NAT gateway processing on AWS adds another 0.045 dollars per GB on top. Move 10 terabytes off a single provider and you are looking at over a thousand dollars in egress fees alone, on top of engineering time. That asymmetry is not an accident of engineering. It is a pricing decision, and it is the single biggest reason 'we will migrate later if we need to' quietly turns into 'we never did.'
How to build so an exit is possible, not just cheap on day one
Avoiding lock-in does not mean avoiding managed services. It means being deliberate about which decisions are cheap to reverse and which ones are not, and putting the abstraction where it actually pays for itself.
- Wrap vendor SDKs behind your own interfaces. A repository or ports-and-adapters pattern around your database and messaging layer means swapping a managed queue for an open one touches one module instead of two hundred call sites scattered through the codebase.
- Default to open standards where they exist. OpenAPI for service contracts, Terraform or OpenTofu for infrastructure as code instead of click-ops in a vendor console, Kubernetes over a fully proprietary container platform, and standard SQL over a vendor's proprietary query dialect all keep your exit door unlocked without slowing anyone down today.
- Reserve proprietary managed services for the layers that are genuinely hard to build. Object storage behind an S3-compatible API is low risk; most providers now offer S3-compatible endpoints, so switching is closer to a config change than a rewrite. A proprietary low-code workflow engine holding your core business rules is a different category of risk entirely, because there is nowhere else to run that logic.
- Negotiate the exit before you sign, not after you need it. Shared repository and infrastructure admin access, documented architecture decisions, clear IP ownership terms, and a written data export format should all be conditions of the contract, not favors you ask for later.
- Treat multi-cloud as a targeted tool, not a mandate. Running every workload twice across two providers adds real cost and operational complexity for most teams, and Flexera's data shows a lot of multi-cloud today is unintentional sprawl from mergers and siloed teams, not deliberate strategy. The useful version is narrower: keep your control plane and your data portable, so no single vendor can hold your own information hostage, without duplicating infrastructure you do not need.
This is exactly the kind of architecture review our cloud and DevOps team runs with clients early, when it is a design conversation instead of an incident response.
When lock-in is the right trade
None of this is an argument for building everything yourself. A five-person team running its own Kafka cluster instead of paying for a managed queue is not avoiding lock-in, it is trading vendor risk for operational risk it cannot afford to carry. Managed services exist because undifferentiated infrastructure work is expensive and distracting, and for most companies, the speed you get from a proprietary managed service is worth more than the theoretical migration you may never actually need to do.
The goal is not zero lock-in. It is conscious lock-in: knowing which decisions you are making that would be expensive to reverse, pricing that cost honestly against the speed you are getting for it, and making sure you could still afford to leave if the vendor's roadmap, pricing, or reliability stopped working for you. A useful test is whether you could name the exit cost off the top of your head. If nobody on the team can estimate what it would take to move off a given service in dollars and weeks, that is usually a sign the trade-off was never actually evaluated, it just happened.
When we scope a new build with a client, that trade-off is one of the first conversations we have as part of custom software planning, before a line of business logic gets written against anyone's proprietary API. It is a lot cheaper to have that conversation on a whiteboard than to have it during a vendor outage, a surprise price increase, or a migration nobody budgeted for.
Don't find out what your exit costs during an outage
We build cloud architecture with the exit already priced in: abstraction layers where they matter, open standards where they are available, and contracts that do not leave you begging a vendor for your own data. Get an honest assessment before you are locked in.
Frequently asked questions
Is vendor lock-in always a bad thing?
No. Some lock-in is a reasonable trade for speed, especially for small teams that cannot afford to run undifferentiated infrastructure themselves. The problem is unconscious lock-in, where nobody weighed the trade-off and the exit cost was never estimated in the first place.
How do we know if our architecture has lock-in risk?
Ask whether your core business logic could run somewhere else with a config change or whether it would need a rewrite. Also check who holds your infrastructure admin access and architecture documentation. If the answer to either question is 'only the vendor knows,' that is a risk worth pricing out.
What does it actually cost to migrate off a locked-in vendor?
It varies widely by scope, but research on enterprise vendor dependency puts the average migration project at around 315,000 dollars, on top of per-gigabyte egress fees that commonly run 0.085 to 0.12 dollars per GB before gateway processing charges are added.
Should we go multi-cloud specifically to avoid lock-in?
Usually not as a blanket strategy. Running every workload twice adds real cost and complexity, and most multi-cloud environments today happen by accident rather than design. It is more effective to keep your data and control plane portable so you could leave a given vendor if you needed to, without paying to run everything twice just in case.