Skip to content

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

  1. System New version
  2. Step Test as a customer
  3. Step Does it need the customer?
  4. Step Release in waves
  5. System Customer instances
Also Ask to finish setup

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. 1

    The change is made in a development environment

    Never in production, where every customer's instance runs the same workflows.

  2. 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. 3

    The change is sorted

    No change to connections or settings, or a new connection, permission or required setting the customer must supply.

  4. 4

    The version is exported, kept and published

    Saved with what changed and whether it needs the customer, then published in production.

  5. 5

    Changes that need nothing roll out on their own

    Every instance picks up the new version without the customer redoing setup.

  6. 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. 1

    Sort the change before you publish

    Know which kind you are shipping.

    Headless skills build-workflow

    Use 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. 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. 3

    Keep every version

    Going back is only easy if you kept what you are going back to.

    Headless skills tray-gotchas

    Use 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. 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

SendGrid

Remind customers who haven't finished setup for a new version.

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.

Last reviewed October 2026.