Skip to content
Fabian Finalé Franqui
Selected work

Case study 03

Turning a multi-team initiative into a controlled production launch

Two teams, one customer-facing experience: clear boundaries, integrated validation, controlled activation — and an owner for it after launch.

My role
Team lead: delivery, validation, and go-live
Scope
Two engineering teams, several related workstreams
Focus
  • Technical leadership
  • Cross-team delivery
  • Release engineering
  • Production ownership
Team ATeam BReleaseFlag onRollback = flag offBuildStageUATGo-liveHand off
Fig. 1Deploy, release, and operate as separate steps: both teams ship to production dark, the launch is a flag change with a known way back, and operations owns the monitoring afterwards.

Context

A new customer-facing experience was being built by two engineering teams — mine and a partner team — across several related workstreams, all converging on one launch.

Each team owned different pieces, but customers would experience them as one product. And what each customer saw depended on their own data, so many paths only existed for particular states.

Problem

A set of independently finished tickets doesn’t automatically add up to a coherent release. Launches like this fail at the seams: a component can be correct while the whole experience is wrong, one team can be ready while another still has open dependencies, and a deployment can succeed while the feature still shouldn’t be exposed.

And once the launch call ends, someone has to own monitoring and respond when the real world behaves differently from the test environments.

Constraints

  • Two teams delivering into the same experience against a fixed launch date.
  • Nothing could change for existing customers until the moment of launch.
  • Many paths were only reachable with realistic customer states.
  • Mobile had to be a first-class target, not a follow-up.

My role

I led my team’s part of the build and coordinated its path to production: the flag-based release approach, validation and triage, work with the partner team, the go-live, and the monitoring we handed over afterwards.

Decisions

  1. 01Separate deploy from release

    Everything shipped to production dark, behind feature flags, well ahead of launch day. That turned the launch into a configuration change instead of a deployment, and rollback into a flag flip instead of a revert under pressure.

    TradeoffFlags add conditional paths that must be tested in both states and removed afterwards. That cleanup is real work, and it belongs in the plan.

  2. 02Validate the integrated experience

    Testing followed what customers would actually see: conditional flows, responsive layouts, embedded content, data presentation, and the interactions between features owned by different teams — in a production-like environment, across realistic states rather than one demo account.

    TradeoffRealistic states take effort to prepare. Skipping them just moves the discovery to launch day.

  3. 03Fix issues while the context is fresh

    Internal UAT ran as a structured pass with owners and severities. When it surfaced problems, we worked through them together instead of turning each finding into another handoff — I fixed conditional-logic issues myself.

  4. 04Make release ownership explicit

    The go-live had a coordinated activation sequence across both teams’ work, known dependencies, clear owners for the decisions during the release, verification in production immediately afterwards, and a rollback path agreed in advance.

  5. 05Treat monitoring as part of delivery

    We built the synthetic monitoring and alerting as part of the work, then handed ownership to the operations center, with alerts routed to its engineers — so the experience’s health no longer depended on the team that built it.

Execution

  1. Build behind flags

    Both teams merged and deployed continuously, with new surfaces hidden until activation.

  2. Validate in staging

    End-to-end checks across customer states in a production-like environment.

  3. Run UAT

    Structured internal testing, triaged by severity and owner, with fixes verified before sign-off.

  4. Activate

    A coordinated flag change across both teams’ work, followed by verification in production.

  5. Hand off

    Synthetic monitoring and alert ownership moved to the operations center.

Outcome

Several independently developed pieces became one coordinated production experience, with controlled activation and defined operational ownership.

The launch also separated three things teams often treat as one event: deploying code, releasing functionality, and operating the system. That distinction has become a recurring part of how I approach production delivery.

Lessons

  • Deploy and release are different events. Separating them is the cheapest risk reduction there is.
  • Validation finds the seams. Give it time, owners, and a definition of done.
  • A feature is finished when the organization can release it safely and operate it afterwards.