IndustrySOC 2 for SaaS: A Practical Compliance Roadmap
Discover a practical roadmap for achieving SOC 2 compliance in your SaaS business, ensuring data security and trust with enterprise clients.
Discover how to navigate vendor lock-in risks and ensure your IT strategy protects against costly disruptions and compliance challenges.

Vendor lock-in happens when switching costs, whether technical, financial, contractual, or data-related, become high enough that leaving a vendor is practically impossible without major disruption. The single most useful thing you can do right now is map your high-risk dependencies: data gravity, proprietary managed services, and identity integrations. Regulatory pressure is building fast. The UK Competition and Markets Authority has formally investigated cloud switching barriers, and the EU Data Act imposes portability obligations that now affect contract negotiations even with non-EU vendors.
Vendor lock-in is a measurable commercial risk: the combination of egress fees, proprietary data models, and identity dependencies can make switching costs prohibitive long before a vendor relationship turns adversarial.
| Point | Details |
|---|---|
| Map dependencies first | Inventory every proprietary service, API call, and data format before evaluating mitigation options. |
| Egress costs are real | At $0.08–$0.09/GB, moving 1 PB costs $80,000–$90,000 at list prices; negotiate waivers before you sign. |
| Negotiate exit clauses upfront | Data portability, egress waivers, and 180-day transition access must be in the contract, not promised verbally. |
| Accept lock-in selectively | Use the five-dimension scorecard: accept proprietary services only when strategic value outweighs switching cost. |
| AI contracts need special terms | Model weight portability, prompt ownership, and operational guarantees require explicit clauses beyond standard SaaS language. |
| Kreante builds for portability | Architecture reviews, containerized delivery, and contract negotiation support reduce lock-in risk from day one. |
Vendor lock-in occurs when a customer’s dependence on a vendor’s technology, data formats, or commercial terms makes switching prohibitively expensive or operationally risky. The distinction worth drawing early: technology lock-in is about proprietary interfaces and formats; vendor-specific lock-in layers on commercial terms, identity constructs, and organizational inertia. Both are real, and they usually compound each other.
The main types you’ll encounter in enterprise environments:
Each type is manageable on its own. The problem is that most production environments carry three or four simultaneously, which is why a migration that looks straightforward on a whiteboard turns into a multi-quarter program.
Lock-in reduces your bargaining power and raises total cost of ownership in ways that rarely show up in the original business case. When a vendor knows switching is expensive, price increases become easier to justify and roadmap decisions stop reflecting your needs.
The concrete impacts land across several dimensions:
Egress economics at scale: At common list prices of $0.08–$0.09 per GB, migrating one petabyte of data costs roughly $80,000–$90,000 before you account for engineering time, parallel-run infrastructure, or application rework. That figure alone is enough to kill a migration business case.
The compliance angle deserves its own sentence. Regulations like the EU Data Act and GDPR impose data residency and portability obligations. If your vendor’s architecture makes clean data export difficult, you carry that compliance exposure, not them.
Vendors rarely design lock-in maliciously. They build features that are genuinely useful, and those features happen to create switching costs. Knowing the mechanism helps you spot it during evaluation.
A simple illustration: an application that initializes a storage client using a vendor-specific SDK, then calls proprietary batch-write methods, has embedded that vendor into every write path. Replacing it means finding every call site, writing an abstraction layer, testing equivalence, and validating data integrity. That is not a weekend task in a production system.
Financial lock-in deserves a separate note. Enterprise discount tiers are structured so that reducing spend below a committed threshold triggers penalty pricing. Non-transferable credits expire if unused. These mechanisms are not incidental; they are designed to make the economics of staying better than the economics of leaving, even when the technical migration is feasible.
The following examples show where lock-in appears in practice and what migration typically involves.
| Technology area | Where lock-in appears | Switching cost / migration complexity | Mitigation approach available |
|---|---|---|---|
| Cloud networking (AWS, Azure, GCP) | VPC topology, IAM roles, proprietary load-balancer configs | High: network redesign, IAM rebuild, DNS cutover | Terraform/OpenTofu IaC; standard CIDR patterns |
| Managed NoSQL (e.g., DynamoDB, Cosmos DB) | Proprietary query model, partition key design, SDK calls | High: data model redesign, query rewrites, export pipeline | PostgreSQL JSONB or MongoDB as portable alternative |
| Serverless/edge functions | Execution model, event triggers, cold-start behavior | Medium-high: logic rewrites, trigger mapping | OCI containers; portable function frameworks |
| Managed AI/ML platforms | Model weights, pipeline orchestration, inference endpoints | High: model re-training or re-hosting, pipeline rewrite | Open model formats (ONNX, GGUF); self-hosted inference |
| Enterprise SaaS (Oracle, Salesforce) | Proprietary data schema, workflow engine, reporting formats | Very high: data extraction, schema mapping, user retraining | Standard export formats; API-first integration layer |
| Redis (managed vs. self-hosted) | Managed add-ons, proprietary modules, cloud-native failover | Low-medium: Redis OSS is portable; managed extras are not | Self-hosted Redis or Valkey on Kubernetes |
| Kubernetes (managed vs. self-managed) | Managed control plane, cloud-specific node pools, CSI drivers | Low: OCI standard; control plane migration is the main cost | Cluster API; portable Helm charts |
| Docker/OCI containers | Registry-specific features, build caches, signing workflows | Low: OCI standard is widely supported | Standard OCI images; portable registry (Harbor) |
Cloud networking. A workload built around AWS-specific VPC constructs, security group rules, and ALB configurations is not portable by copy-paste. The migration effort is primarily an infrastructure redesign, not a data move. Data gravity compounds this: if your databases are also AWS-managed, the egress cost of moving them simultaneously can easily reach the $80,000–$90,000 per-petabyte range cited earlier.
Managed databases. Managed services and proprietary platforms are where database lock-in hits hardest. A DynamoDB table designed around single-table patterns with proprietary GSI configurations cannot be lifted to another document store without redesigning the access layer. MongoDB’s query model is more portable, but a managed Atlas deployment with proprietary search indexes adds its own switching cost. Redis is relatively portable at the OSS level; the managed extras are not.
Serverless and edge. Cloudflare Workers, AWS Lambda, and Azure Functions each have distinct execution models. A Lambda function that reads from an SQS queue and writes to DynamoDB is coupled to three AWS services simultaneously. Moving it to Cloudflare Workers requires rethinking the trigger model, the storage layer, and the deployment pipeline. Cloudflare’s own edge network is genuinely differentiated, but that differentiation comes with its own tooling dependencies.
Managed AI platforms. This is the fastest-growing lock-in category. A fine-tuned model hosted on a proprietary inference endpoint may have weights that are not exportable in a standard format. Prompt templates, evaluation pipelines, and RAG configurations built on a vendor’s orchestration layer add further coupling. Stanford Law’s guidance on AI vendor contracts is explicit: standard SaaS contract language is insufficient for production AI workloads. You need explicit clauses covering model portability, prompt and data ownership, and operational guarantees.
Enterprise SaaS (Oracle, Salesforce). Oracle’s database licensing and its proprietary PL/SQL extensions create some of the deepest lock-in in enterprise software. Migrating off Oracle typically involves schema translation, stored procedure rewrites, and extensive regression testing. The switching cost is not primarily egress fees; it is engineering time and business disruption.
The goal is not zero lock-in. That is neither achievable nor desirable. The AWS whitepaper on unpicking vendor lock-in frames it well: treat lock-in as manageable, distinguish high-value proprietary services from low-utility, high-switching-cost ones, and engineer your architecture accordingly.
Negotiate these before you sign, not after a dispute:
For AI contracts specifically, Stanford Law’s guidance recommends adding explicit clauses for model weight portability, prompt and training data ownership, and operational continuity guarantees. Standard SaaS boilerplate does not cover these.
Pro Tip: When evaluating no-code or low-code platforms, check whether the platform exports runnable code or only a proprietary project file. Platforms that export standard code give you a genuine exit option; those that export only their own format do not. The Kreante guide on enterprise no-code tools covers this distinction in detail.
Accept lock-in only when the strategic value of a proprietary service clearly outweighs its switching cost. For commodity infrastructure and data-layer services, require portability by default.
A simple scorecard helps make this decision repeatable. Rate each dependency on five dimensions, each scored 1–5:
| Dimension | What to assess | Score guidance |
|---|---|---|
| Strategic value | Does this service deliver a capability you cannot replicate with open alternatives? | 5 = unique differentiator; 1 = commodity |
| Switching cost | How much engineering effort and business disruption would migration require? | 5 = multi-quarter program; 1 = days |
| Operational cost | What is the ongoing cost premium vs. an open alternative? | 5 = significant premium; 1 = cost-neutral |
| Compliance risk | Does this dependency create regulatory exposure (data residency, portability mandates)? | 5 = high exposure; 1 = none |
| Time-to-replace | How long would it realistically take to replace this service if needed? | 5 = 12+ months; 1 = under 4 weeks |
Decision rule: If strategic value (score 4–5) exceeds the sum of the other four risk scores, accepting lock-in is defensible. Otherwise, require a portable alternative or negotiate exit protections.
Worked example: managed ML endpoint vs. self-hosted model. A team evaluating a proprietary managed inference endpoint scores it: strategic value 3 (the model is available in open formats), switching cost 4 (pipeline rewrite required), operational cost 3 (meaningful premium over self-hosted), compliance risk 4 (model data residency unclear), time-to-replace 4. Total risk score: 15. Strategic value: 3. The math says: require portability. The team chooses to host the model on Kubernetes using an open inference server, accepting slightly more operational overhead in exchange for full control.
The same logic applied to a managed Kubernetes control plane (strategic value 2, switching cost 2, operational cost 1, compliance risk 1, time-to-replace 2) produces the opposite answer: the managed control plane is fine to accept because the switching cost is low and the operational savings are real.
A migration off a locked-in vendor follows a predictable sequence, but the effort at each stage varies enormously based on a handful of drivers.
Discovery is where most teams underestimate the work. The goal is a complete inventory of every service, API call, data format, and identity dependency touching the vendor. Automated scanning tools (cloud asset inventory APIs, dependency graph tools) help, but they miss application-level SDK calls embedded in code. A manual code audit of the critical path is not optional.
Export and parallel run come next. Export your data in the target format and stand up the replacement environment in parallel. Run both environments simultaneously for a defined period, comparing outputs. This phase surfaces data fidelity issues, missing features, and performance differences that a lab test will not catch. Budget at least four weeks for a non-trivial workload; complex database migrations with proprietary schema dependencies often run 8–12 weeks in parallel before teams are confident enough to cut over.
Cutover and rollback require a documented rollback plan before you flip the switch. Define the rollback trigger conditions, the rollback procedure, and the maximum acceptable rollback window. Teams that skip this step discover their rollback plan during an incident, which is the worst possible time.
Egress economics at scale are the most common budget surprise:
These are list-price figures. Negotiated egress waivers can reduce or eliminate this cost, which is why the contract clause matters before migration, not during.
Post-migration validation checklist (prose form). Verify that all data exported completely and matches row counts and checksums from the source. Confirm that application behavior is equivalent under load testing, not just functional testing. Validate that identity and access controls replicate correctly and that no permissions have been silently dropped. Check that monitoring, alerting, and logging pipelines are fully operational on the new platform. Run a compliance review to confirm data residency and audit logging requirements are met. Document the new architecture and update the ownership map.
Timeline drivers: data volume, number of proprietary features in use, depth of identity integration, and number of third-party integrations that need reconfiguration. A migration with low data volume but deep identity integration can take longer than one with high data volume and standard interfaces.
The questions below should go into every RFP and every contract negotiation for a service that will hold production data or run critical workloads.
| Question / clause | Why it matters | What a good answer looks like |
|---|---|---|
| “What formats can you export our data in, and are they open standards?” | Determines whether you can actually use the export | Named open formats (CSV, Parquet, JSON, SQL dump) with documented schema |
| “What is the timeline and process for a full data export?” | Surfaces hidden operational complexity | A documented procedure with a defined SLA (e.g., 30 days for full export) |
| “What are the egress fees during a migration, and will you waive them?” | Quantifies the financial exit cost | Written waiver for a defined migration window (90–180 days) |
| “What migration assistance do you provide post-termination?” | Defines the vendor’s exit support obligations | Named transition services, read-only access period, and a named contact |
| “Do you support export validation (checksums, row counts, schema verification)?” | Ensures data integrity during migration | Yes, with documented validation tooling or a third-party audit option |
| “Who owns the model weights, prompts, and training data in an AI engagement?” | Critical for AI workloads; often missing from standard contracts | Customer owns all inputs and outputs; vendor has no license to retain or use them |
| “What notice will you give before changing APIs, pricing, or service terms?” | Protects against surprise changes | Minimum 90 days’ written notice for material changes |
Sample plain-language contract clauses (adapt with legal counsel):
Data portability: “Vendor will provide Customer with a complete export of all Customer Data in [named open format] within 30 days of written request, at no additional charge, at any time during the contract term.”
Egress waiver: “Vendor will waive all data transfer fees incurred during a 90-day migration window following Customer’s notice of termination.”
Transition services: “For 180 days following contract expiration or termination, Vendor will maintain read-only API access to Customer Data and provide reasonable technical assistance for migration at no additional charge.”
AI-specific portability: “Customer retains full ownership of all model weights, fine-tuning data, prompt templates, and inference outputs. Vendor will provide exportable model artifacts in [ONNX/GGUF/named format] within 30 days of request.” This clause reflects Stanford Law’s recommendation that AI contracts require explicit IP and portability terms beyond standard SaaS language.
Document all promised exit assistance in a commercial side letter or technical annex attached to the main agreement. Verbal commitments from a sales team are not enforceable. A technical annex that specifies export formats, timelines, and validation procedures gives you a contractual basis for enforcement if the vendor’s support team later claims the migration assistance was never agreed.
When evaluating AI development partners specifically, the Kreante guide on choosing an AI development agency covers the questions worth asking about IP ownership and portability before engagement.

The gap between “we have a portability policy” and “our systems are actually portable” is where most organizations lose ground. The following patterns reflect what a delivery-focused team actually implements on projects where portability is a stated requirement.
Architecture review gates. Before any new vendor dependency enters production, it passes a review that scores it on the decision framework above. If the score does not justify lock-in, the team either finds a portable alternative or negotiates exit protections before the dependency is committed. This gate prevents lock-in from accumulating silently across sprints.
IaC hygiene. Every infrastructure resource is defined in Terraform or OpenTofu. No manual console changes. Provider-specific resource types are wrapped in modules with documented alternatives. When a provider-specific resource has no portable equivalent, it is flagged in the ownership map with a migration path.
Containerization by default. All application workloads run in OCI-compliant containers. The Kubernetes layer abstracts the underlying cloud. This does not eliminate lock-in at the managed-service layer, but it means the application tier is portable even when the data tier is not.
Database exportability. PostgreSQL is the default. Where a managed NoSQL service is used for performance reasons, a documented export procedure and a tested migration path to PostgreSQL or MongoDB are required before the service goes to production.
Portability testing in CI/CD. The pipeline includes a periodic job that runs a data export, validates checksums, and confirms the export can be imported into a reference environment. This catches format changes and permission issues before they become migration blockers.
Delivery checklist for portability-first engagements:
Anonymized client example. A SaaS company came to Kreante after discovering that a managed AI inference platform they had been using for 18 months did not support model weight export. Their fine-tuned model was effectively owned by the vendor. The engagement involved re-training the model using open-source tooling, migrating inference to a self-hosted endpoint on Kubernetes, and adding an API façade layer so the application code required no changes. The migration took 11 weeks. The new contract with the replacement infrastructure provider included an explicit model portability clause and a 90-day egress waiver. The team also adopted the low-code scalability patterns Kreante uses for governance, which helped them maintain portability discipline as the product scaled.
Most of the industry conversation about vendor lock-in treats it as a problem to eliminate. That framing is wrong, and it leads teams to over-engineer portability for services where the switching cost is genuinely low and the operational benefit of the managed service is genuinely high.
Accept lock-in when a proprietary service delivers a capability that would take your team six months to replicate, when the vendor’s roadmap is aligned with your product direction, and when the switching cost is documented and budgeted. A managed Kubernetes control plane on a major cloud provider is a reasonable lock-in to accept. The switching cost is low, the operational savings are real, and the OCI standard means your workloads remain portable even if the control plane is not.
Avoid lock-in for data-layer services, identity infrastructure, and AI model hosting. These are the three areas where switching costs are highest, regulatory exposure is greatest, and vendor leverage is most acute. A proprietary managed database with a non-standard query model, an identity platform with no SCIM export, or an AI inference service with non-exportable model weights: these are the dependencies that turn a vendor relationship into a hostage situation.
The one-line recommendation for procurement and engineering alignment: require portability by default for data, identity, and AI; accept managed-service lock-in only when the strategic value is documented and the exit cost is budgeted.
Vendor dependency is a commercial risk, not just a technical one. Kreante’s AI solutions development and web and mobile application services are built around portability by design: open model formats, containerized workloads, PostgreSQL-first data layers, and IaC-defined infrastructure. Every engagement includes an architecture review that scores vendor dependencies before they enter production, and every contract negotiation includes the data portability and egress waiver clauses described in this guide.

If you are planning a migration off a locked-in platform, or building a new system and want to avoid the problem from the start, Kreante offers a scoped architecture review that maps your current dependencies, scores them on the decision framework above, and produces a prioritized migration or mitigation plan. Reach out at Kreante to start the conversation.
Vendor lock-in occurs when switching to a different provider becomes so costly, technically or financially, that you are effectively forced to stay. In cloud environments, it most commonly arises from proprietary databases, managed services, and provider-specific tooling.
Use portable primitives: OCI containers, PostgreSQL, open API standards, and Infrastructure as Code. Negotiate data portability and egress waiver clauses before signing, and run annual portability drills to catch hidden dependencies early.
Yes. Beyond engineering complexity, lock-in reduces your bargaining power on pricing and roadmap decisions. At list-price egress rates of $0.08–$0.09/GB, a single petabyte migration costs $80,000–$90,000 before engineering time, which is enough to make many migrations commercially unviable.
It typically means the vendor commits to data portability in open formats, waives egress fees during migration, and provides transition services after termination. Without specific clauses covering export formats, timelines, and egress waivers, the phrase is a marketing claim, not a contractual protection.
Yes. Fine-tuned model weights, prompt templates, and inference pipeline configurations can be non-exportable under standard AI platform terms. Stanford Law’s guidance on AI vendor contracts recommends explicit clauses for model weight portability and training data ownership, which standard SaaS agreements do not include.
Go further
Don't let your tech watch stop here. Explore our other resources to master your technology stack.
IndustryDiscover a practical roadmap for achieving SOC 2 compliance in your SaaS business, ensuring data security and trust with enterprise clients.
IndustryCompare the best AI agencies in France by model: consulting firms, technical studios, training bodies and full-coverage partners measured on ROI.
Industry