skip to content

You're responsible for governance across eight teams sharing a microfrontend platform, including a shared design-tokens package and a set of custom event contracts. What governance mechanisms would you put in place to stop a shared contract or token change from silently breaking someone else's microfrontend, and what does that governance cost you in return?

level: principalimportance: should knowfreq 25%

answer

  1. contract registry = single source of truth
  2. mandatory contract tests, gated at onboarding too
  3. enforced semver/deprecation policy, not just documented
  4. explicit ownership of cross-cutting shared artifacts
  5. tier governance strictness to blast radius

basics

~20 s

Write down who owns what, require an approval process and automated checks before any shared piece can change, and track who's actually using what so nobody breaks a team they didn't know depended on them. The cost is slower changes and real ongoing maintenance work for the governance itself.

solid answer

~50 s

At eight-team scale, governance needs to move from 'trust individual team discipline' to 'enforced by tooling and process': a contract registry that records every consumer of every event/prop/token with an owning team attached, mandatory consumer-driven contract tests gating any producer's deploy, a semver-style versioning and deprecation policy that's enforced (not just documented), and a design-system/platform team that owns genuinely cross-cutting shared artifacts rather than leaving them ownerless. The cost is real: every shared change now has process overhead (registering, testing, possibly a deprecation window) that a single-team change doesn't, onboarding a new team requires them to plug into the registry and testing infrastructure before their first deploy, and the platform team itself becomes a standing cost center whose value (prevented incidents) is inherently hard to measure compared to the visible cost (slower shared changes, dedicated headcount).

go deeper

for a junior

Can suggest 'write things down and tell people before changing shared stuff' as a starting instinct, without needing to design the full system.

for a middle

Recommends specific mechanisms (contract tests, a versioning policy) drawn from prior questions applied at multi-team scale.

for a senior

Connects mechanisms explicitly to the failure modes they prevent (unknown consumers, ownerless shared code) and can discuss real costs, not just benefits.

for a principal

Designs a tiered governance model calibrated to blast radius, addresses onboarding as a structural gate rather than a courtesy, and can propose ways to measure whether the governance investment is paying off.

## Why scale changes the problem qualitatively Governance at multi-team microfrontend scale exists to solve a problem that gets qualitatively worse, not just linearly worse, as team count grows: with two teams, an informal Slack message about a contract change is a survivable process; with eight teams, each independently deploying, the number of pairwise dependencies that can silently break grows combinatorially, and no individual team has visibility into the full graph of who depends on what. The governance mechanisms below aren't about adding bureaucracy for its own sake — each one directly targets a specific way silent breakage happens at this scale, several of which were named as separate failure modes earlier (payload drift, ownerless shared code, unknown consumers). ## The four mechanisms 1. **The first and most foundational mechanism is a contract registry:** a single, queryable source of truth listing every published contract (event schemas, prop shapes, token package versions) alongside which team owns the producer and which teams are known consumers. Without this, "who depends on this event" is tribal knowledge scattered across Slack history and individual engineers' memory — the exact condition that let the "unknown consumer" gap in contract testing go unnoticed for six months in the earlier scenario. The registry doesn't have to be exotic tooling; even a well-maintained schema package with required metadata fields, enforced by CI, can serve this purpose at eight-team scale, though larger platforms often invest in a dedicated service (a Pact broker or internal equivalent). 2. **The second mechanism** is making consumer-driven contract testing *mandatory* rather than best-effort, specifically gated at two points: before a producer deploys a change (verify against all registered consumer contracts, as discussed earlier), and before a new consumer's first deploy (they must publish a contract and register in the system before they're allowed to depend on someone else's fragment). This second gate is what closes the "unknown consumer" gap structurally instead of relying on every team remembering to announce themselves — onboarding becomes the enforcement point rather than an optional courtesy. 3. **The third mechanism** is an enforced (not merely documented) versioning and deprecation policy — the semver-style additive/breaking distinction and dual-emit/telemetry-gated-retirement pattern discussed earlier, but with teeth: CI can mechanically check whether a proposed change to a published schema is additive or breaking (schema diffing tools can do this automatically for many cases) and require a recorded deprecation plan — reviewed by the platform team — before a breaking change is allowed to merge, rather than trusting each team to remember and follow the policy voluntarily. 4. **The fourth mechanism** is explicit ownership of genuinely cross-cutting shared artifacts — the design-tokens package, any shared component library, cross-fragment auth/session contracts — assigned to a platform or design-system team rather than left as "everyone's repo," which was named earlier as a distinct failure mode (shared ownership erodes quality and accountability). This team's job includes reviewing proposed changes to shared tokens/contracts for cross-team impact, running the versioning policy on the platform's behalf, and being the accountable party when something shared breaks. ## What the governance costs The cost side of this is where governance conversations often go wrong by only counting the benefit (prevented incidents) and undercounting the cost, so it's worth being concrete. - **Process latency on every shared change.** Every shared change now carries process latency that a single-team change doesn't: registering a new contract, waiting for contract-test verification, potentially planning and executing a deprecation window instead of just shipping — this is a genuine velocity cost for the producing team, not a hypothetical one, and teams will feel it as friction, especially teams used to the "just ship it" speed the architecture originally promised them. - **Heavier onboarding.** Onboarding a ninth team means they inherit mandatory registry participation and contract-test setup before their first deploy, which is real ramp-up overhead compared to a lighter-weight, ungoverned setup. - **A standing organizational cost.** And the platform/governance team itself is a standing organizational cost — dedicated engineers whose primary output is infrastructure and review rather than customer-facing features, whose value shows up as incidents that *didn't* happen, which is inherently harder to justify in a roadmap review than a shipped feature. Under-invest and you get the silent-breakage failure modes across all eight teams' worth of pairwise dependencies; over-invest and you recreate exactly the coordinated-release-train friction microfrontends were adopted to escape, just relocated into a mandatory review-and-registry process instead of a release calendar. ## Calibrating strictness to blast radius Getting the balance right in practice usually means calibrating governance strictness to blast radius: a shared design-token color value affecting all eight teams' visual consistency warrants mandatory review and a platform-team gate; a narrow, two-team event contract between adjacent fragments can reasonably be lighter-weight (contract tests, but no platform-team sign-off requirement) since the blast radius of getting it wrong is smaller and the two teams can coordinate directly. Platforms operating at this scale in practice (large e-commerce, media, and travel companies running many independently-owned frontend teams) generally converge on exactly this tiered model — heavier governance for wide-blast-radius shared contracts, lighter governance for narrow point-to-point ones — rather than applying uniform maximum rigor everywhere, precisely because uniform maximum rigor reintroduces the coordination tax the architecture exists to eliminate.

  • How would you decide which shared contracts need heavy governance (platform-team sign-off) versus which can stay lightweight (just contract tests, no review gate)?
    Calibrate by blast radius and reversibility: contracts consumed by many teams, or ones that are hard to roll back once broken (e.g. a core session/auth event, a global design token), warrant mandatory review; a narrow event shared between two adjacent teams with an easy rollback path can rely on automated contract tests alone, since the two teams can coordinate directly if something goes wrong and the cost of a mistake is contained.
  • How do you measure whether this governance investment is actually paying off, given that its main benefit is incidents that didn't happen?
    Track leading indicators instead of only counting prevented incidents directly: the number of breaking changes caught by contract tests in CI before deploy (a proxy for incidents avoided), time-to-onboard a new team onto the registry/testing infrastructure, and the ratio of shared-contract-related production incidents before versus after the governance rolled out. None of these are perfect, but together they give a defensible signal without requiring you to prove a counterfactual incident would have happened.

It's like city building codes: a load-bearing wall shared across an apartment block needs a permit, an inspection, and sign-off before anyone touches it, while a tenant repainting their own bedroom needs none of that — the governance weight scales with how many people are affected if it goes wrong, not applied uniformly to every change.

saying these in an interview costs you the question

  • Proposes governance with no mention of cost/friction trade-offs, only benefits
  • Suggests uniform maximum-rigor review for every shared change regardless of blast radius
  • No mechanism for onboarding new teams into the governance system — relies on existing teams remembering to include them
  • Treats documentation of a versioning policy as sufficient without any enforcement mechanism
  • Doesn't connect the proposed mechanisms back to specific failure modes they're meant to prevent

context