Skip to content

Auditing a codebase before a cutover

Finding every hardcoded assumption, centralising configuration, and load-testing the target before traffic moves.

A provider migration is rarely difficult because the new API is difficult. It is difficult because the old one is spread out. A model string in a config file, another in a retry branch nobody has read since it was written, a token budget in a constant named MAX_LEN, a base URL in a Terraform variable, an exception class from one vendor’s SDK caught by name in three services. Each of those is a single line. Collectively they are the migration.

These pages are the work that happens before the cutover date: finding every copy of every assumption, moving them behind one configuration point, proving the target survives your real traffic shape, and reading the parts of the agreement that decide whether you are allowed to send the traffic at all. The order matters — the audit is what tells you how long the rest will take.

Auditing a Codebase for Every Place a Model Name Is Hardcoded

A search-and-inventory pass that finds literal model strings, base URLs, token budgets and provider-specific error handling — including the copies no repository grep can reach.

10 min read

Centralizing Model Configuration Before a Migration

Collapsing scattered model strings into one registry that carries capabilities as well as names, so the migration becomes a config change rather than a code change.

10 min read

What a Load Test Should Check Before a Provider Migration Goes Live

What to put under load on a migration target — sustained throughput, burst behaviour against two separate limits, and what happens when responses are long.

10 min read

Comparing Tail Latency Before and After a Provider Migration

How to measure p50, p95 and p99 against two providers on a fixed request set, and the arithmetic that says whether an observed difference means anything.

10 min read

Migrating Idempotency and Deduplication Logic Between Providers

What a provider-side idempotency key actually protects, why an unsupported header fails silently, and how to build the client-side deduplication that replaces it.

9 min read

What a Provider's Terms Say About Using Your Prompts and Outputs to Train

The clause types that decide whether submitted prompts and generated outputs can be used to improve a provider's models, and how to read your own agreement for them.

9 min read

Auditing Data Residency Requirements Before a Provider Migration

How to confirm where a migration target actually processes and stores request content, and how to verify the claim rather than accept the region label.

9 min read

What Changes About Data Processing Agreements During a Migration

The clauses a new processor agreement has to carry, why the old one does not simply transfer, and what a migration owes the customers named in it.

9 min read

Migrating Structured Logging Schemas for LLM Calls

Designing a provider-agnostic call log — canonical usage, cost and stop-reason fields — so that changing providers is not also a logging and dashboard rewrite.

10 min read

What a Provider Migration Does to A/B Test Validity

Changing providers mid-experiment breaks the assumption that an arm names one treatment, and the pooled result is then confounded with time rather than merely noisier.

10 min read

Migrating Prompt Templates Out of a No-Code Platform

A manual extraction procedure for pulling prompt text, variables and model configuration out of a builder UI into a versioned, code-based format that survives the move.

10 min read

What a No-Code AI Platform Doesn't Let You Export

The components of a builder-hosted application that have no serialised form to take with you, why they do not, and what each one costs to rebuild.

9 min read

Migrating Off a No-Code Chatbot Builder to Custom Code

Rebuilds a visual chatbot flow as an explicit code path by mapping each node type to the pattern that replaces it, including the failure behaviour the canvas hid.

11 min read

Mapping Webhook and Callback Payload Fields Between Providers

What an async job-completion notification contains, how the envelope and the status vocabulary differ between provider shapes, and which parts of a handler have to be rewritten rather than remapped.

10 min read

Migrating an Async Job Polling Loop Between Provider APIs

Rewrites a job-status polling loop for a different provider's status field and terminal states, with the backoff, the deadline and the terminal-state test adjusted to match.

10 min read

What Timeout Defaults Change When You Switch Providers

Where the effective timeout on an inference request actually comes from, why the shortest link in the chain wins, and how to reset it against a new provider's latency profile.

10 min read

Migrating a Prompt Injection Test Suite Between Model Families

Adapts an existing injection red-team suite to a new model family by separating each case's intent from its surface wording, and rewriting only the surface.

10 min read

Other topics