Automation · Platform engineering
How to roll out integration changes to every customer
A new required setting goes out, and every customer who set up before it existed starts failing the same afternoon. How to ship changes to an integration hundreds of customers run, the prompts that build the rollout, and how to keep a change that needs the customer from breaking everyone at once.
Built with Tray Headless
- System New version
- Step Test as a customer
- Step Does it need the customer?
- Step Release in waves
- System Customer instances
A change that needs nothing from the customer reaches them on its own. A change that does goes out in waves, with a prompt to finish setup.
The short answer
How do you roll out a change to a customer-facing integration?
Rolling out an integration change to every customer has four parts: testing the new version as a customer in a separate environment before it is published, sorting the change by whether it needs anything from the customer (a fix to the logic doesn't, a new connection, permission or required setting does), releasing changes that need the customer in waves so a mistake reaches ten customers rather than all of them, and a record of every version so you can go back. In Tray Embedded a change with no new settings reaches every instance on its own a few minutes after it is published. A change that adds a connection or a required setting needs each customer to upgrade. Most teams find out which kind they shipped from the support queue.
Stage 6 of 7: Ship changes to every customer. Part of Embedded integration, end to end : every stage, the systems it runs on and the guide that builds it.
What matters here
- Test the new version as a customer, through the real setup screens, in a separate environment.
- Know before publishing whether the change needs the customer. A new connection or required setting always does.
- Give every new setting a default where you can. It turns a change that needs every customer into one that needs none.
- Release changes that need the customer in waves. A mistake should reach ten customers, not four hundred.
- Keep every version you publish, with what changed. Going back is only easy if you kept what you were going back to.
Who this is for
You own integrations that your product's customers run. Every change to one is a change for all of them, and some changes have broken customers who set up before them.
How it works in practice
From a change being ready to every customer running it.
- 1
The change is made in a development environment
Never in production, where every customer's instance runs the same workflows.
- 2
It is tested as a customer
An existing test instance updated, and a new one set up from scratch, through the real screens.
- 3
The change is sorted
No change to connections or settings, or a new connection, permission or required setting the customer must supply.
- 4
The version is exported, kept and published
Saved with what changed and whether it needs the customer, then published in production.
- 5
Changes that need nothing roll out on their own
Every instance picks up the new version without the customer redoing setup.
- 6
Changes that need the customer go out in waves
A first group asked to finish setup, then the rest once the first group is healthy.
What an integration rollout is made of
Four parts. The second is the one that decides how the afternoon goes.
Separate environments
Development and production, with versions moved between them by export and import, never edited live.
A change sort
A check before publishing: does this add a connection, change a permission or add a required setting? If so, customers must upgrade.
Waves
A first group of customers, chosen on purpose, then the rest, with a pause between to watch failure rates.
A version record
Every export kept with the date, what changed, whether it needs the customer, and how to go back.
The Tray Headless prompts
Paste these into Claude Code or Codex with the Tray Headless plugin installed. Each stage runs on its own. The systems named in them are the worked example rather than a requirement, and every prompt says so.
Once per project, run
/tray-workflows:set-workspace
to pick the workspace these build in. Point it at a sandbox first.
- 1
Sort the change before you publish
Know which kind you are shipping.
Headless skills
build-workflowUse build-workflow. Compare the new version of the integration with the one in production and list every difference. For each one, say whether it needs anything from the customer: A new service to connect to A changed permission on an existing connection A new setting with no default, or a changed required setting If none of those, customers' instances update on their own. If any, every customer must upgrade, so tell me which differences could be given a default to avoid it.
- 2
Test as a customer, both ways
The two paths customers take are both worth breaking.
In the development environment, update the existing test customer's instance to the new version and run it end to end. Then set up a new test instance from scratch through the same screens a customer uses. Check that the existing instance keeps its settings and its history, and that the new setup reads clearly to someone who has never seen it. Only export once both pass.
- 3
Keep every version
Going back is only easy if you kept what you are going back to.
Headless skills
tray-gotchasUse tray-gotchas. Export the project and keep the file in our repository, named by version, with a note: date, what changed, whether it needs the customer, and who approved it. Import into production and publish the new version of the solution. If the version adds or changes a connection, set up the production connection before publishing.
- 4
Release changes that need the customer in waves
A mistake should reach ten customers, not all of them.
When the version needs customers to upgrade, pick a first wave: ten customers who use the integration actively and have a named contact, including at least one large account. Show them a prompt in our product to finish setup, with what is new and why. Watch their failure rate for two days. If it holds, show the prompt to everyone else, and remind customers who haven't upgraded weekly. Report daily: customers on each version, upgrades finished, and failures by version.
Customers who never upgrade keep running the old version. Decide in advance how long you support it, and say so in the prompt.
What it connects to
The version lives in Tray. The prompt to upgrade lives in your product.
GitHub
Keep every exported version with a note on what changed and whether it needs the customer.
Writes
Slack
Post the daily rollout report, and alert the integration's owner if a wave's failure rate rises.
Writes
Same build, other stacks
The design does not change if you run something else in one of these seats. The same prompts build it against Microsoft Teams or Google Chat.
Connections in this build
Field mapping, templates and common problems for each pairing: GitHub + Slack.
Named systems are the ones most teams run, not the only ones that work. Each is an authentication in your Tray workspace, referenced by name, so the workflow never holds a credential. Where we have a connector page, the name links to it.
Running it in production
A change here is a change for every customer at once.
Production is never edited directly
Changes are made and tested in development, then moved by export and import, so what customers run is what was tested.
The kind of change is known before publishing
A change that needs the customer is caught at the sort, not discovered from the support queue.
Waves limit the damage
A first group, a pause, then everyone, with failure rates by version watched throughout.
Every version is kept
With what changed and how to go back, so a rollback is a decision, not an investigation.
Questions people ask
What counts as a change that needs the customer?
A new service to connect, a changed permission on an existing connection, or a new required setting. Each one means the customer has to finish setup again before the new version runs for them.
How do you avoid asking every customer to set up again?
Give new settings a default and keep permissions the same where you can. A setting with a sensible default needs nothing from the customer.
Can you roll back an integration change?
Yes, by publishing the previous version you kept. If the change added or altered a connection, going back needs the same care going forward did.
What happens to customers who never upgrade?
They keep running the version they set up. Decide how long you will support it, say so in the upgrade prompt, and remind them on a schedule.
Related guides
Platform engineering
How to build one integration for every customer
Build a customer-facing integration once, with every per-customer choice pulled out as a setting, so a fix ships to every customer at the same time. The prompts.
Platform engineering
How to build error alerts for customer integrations
Catch every failed run across every customer's integration, sort what the customer can fix from what your team must, and tell the right one first. The prompts.
Data operations
How to build schema change management
Detect a source change before it breaks a model, resolve what depends on it, and tell the owner in time to act. The Headless prompts that build it.
Last reviewed October 2026.