The project was supposed to take two weeks. Just move a small analytics service off the managed platform and onto a self-hosted instance. A simple cost-saving measure. Six months later, the team was staring at a whiteboard covered in a spiderweb of dependencies they never knew existed. Every data model, every API call, every asynchronous job was subtly, irrevocably tied to the proprietary quirks of the platform they had chosen for its convenience. They hadn't just used a service. They had fused their application to it at a molecular level.
This isn't the vendor lock-in your CIO used to warn you about. That was a conscious choice, a line item in a budget signed in triplicate. You bought the Oracle database, you paid for the IBM mainframe, and you knew exactly what you were getting into. The contract was the cage.
Today, there is no contract. The cage materializes around you slowly, invisibly, beginning with the free tier. The lock-in isn't a business decision; it’s a pre-existing condition you discover during a routine checkup, long after it has become untreatable.
The initial vector is almost always a solution to a genuine, tedious problem. Why manage your own user authentication when a service like Firebase can do it with a few lines of code? Why build a complex search infrastructure when an API call to Algolia is so clean? These services don't sell you a product; they offer you an escape from drudgery. The convenience is the bait. Once you take it, the hook is set. Your data is now stored in their proprietary format, optimized for their unique architecture. Getting it out isn't a matter of paying egress fees. It's a full-scale data archeology project, followed by a ground-up rewrite of every service that ever touched it.
Nowhere is this condition more acute than with AI models. A team spends a year building a product around a specific large language model. They meticulously craft system prompts, fine-tune it on their private data, and build complex logic to handle its particular voice, its peculiar failure modes, its distinct personality. The model's behavior is the product's specification. When a new, cheaper, or more powerful model appears, switching is not a simple matter of changing an API endpoint. It's a complete product transplant. The entire user experience is predicated on the ghost in one particular machine. Moving to another means starting over.
This isn't just a technical problem debated in pull requests. It has migrated to the term sheet. When your cloud bill shows that 95% of your operating costs go to a single provider, investors don't see an efficient architecture. They see a subsidiary. They see a business whose margins can be evaporated by a single price change, whose entire existence can be threatened when the platform provider decides to launch a competing feature. Your technical debt has become a strategic liability.
Engineers talk about building abstractions, about writing "cloud-agnostic" code, about using Kubernetes to maintain portability. This is a fantasy. It's the equivalent of rearranging the furniture in a prison cell and calling it freedom. These tools can soften the edges of the confinement, but they cannot break down the walls. The walls are made of proprietary APIs, unique data structures, and the accumulated knowledge of a dozen engineers who only know how to make one platform work.
The work of a senior engineer is no longer about preventing lock-in. That battle was lost the moment the first credit card was entered for a "serverless" function. The job now is to be a good patient: to manage the symptoms, to understand the prognosis, and to build a life within the confines of the diagnosis.
Generated by Reportify AI — Automate your team's status reports, standups, and weekly updates. Try free →