🌏 中文版
Today's Focus
The most common trap in Technical PM interviews is being asked "how would you roll out this API upgrade" or "what trade-offs does this system design involve" and only being able to say "I'd talk to engineering" — with nothing concrete behind it. Candidates can't name the process that would put the decision on record, and can't say who actually bears the cost of maintaining backward compatibility.
This topic matters in interviews because it tests whether you can understand the architectural consequences of a technical decision without writing the code yourself, and whether you can design a process that lets "why we decided this" still be traceable six months later — instead of living only in one engineer's memory. Amazon's PM-T technical-depth round says this explicitly: what interviewers want to see is whether a candidate can spot when a design is overly complex or limits future scalability, not whether they can draw the architecture diagram themselves.
Framework Cheat Sheet
The RFC Process (Request for Comments)
Before making a decision with architectural consequences, the team writes a document for stakeholders to review, instead of jumping straight into code:
| Step | Content | How to use it in an interview |
|---|---|---|
| Problem | Where the current state breaks down, and why a decision is needed now | State clearly what happens if nothing changes, instead of jumping straight to the solution |
| Options | At least 2-3 viable paths, each with its own trade-offs | Always name the option you rejected and why — this is what shows you actually did the evaluation |
| Decision | Which option was chosen and who signed off | Be explicit about scope: what this decision covers, and what follow-up questions it deliberately leaves open |
| Cost | Engineering time, impact on existing users, how long it needs to be maintained | This is the part interviewers listen for most — a technical decision with no cost estimate sounds like it skipped the homework |
How to use it: When asked how you'd drive a contentious technical decision, don't just say "we'd discuss it in a meeting." Say you'd use an RFC to write out Problem → Options → Decision → Cost for engineering to review in writing, because a written document lets dissent surface early, instead of resurfacing halfway through implementation.
ADR (Architecture Decision Record)
The compact record left behind after an RFC is resolved — usually just three sections: Context (the constraints at the time), Decision (what was decided), and Consequences (what followed, good and bad).
How to use it: When asked how you'd make sure a new engineer understands a decision made six months ago, point out what makes an ADR different from ordinary meeting notes — it specifically records the options that were considered and rejected, so if someone later wants to re-propose the same idea, they can see why it wasn't chosen the first time instead of re-litigating it from scratch.
Today's Practice Question
The Question
"You're the Technical PM at a B2B API platform with over 300 enterprise integrations on your core API. Engineering has found that the cleanest way to support long-requested multi-currency support is to change the amount field on a core resource from a plain number into a nested {value, currency} object — a breaking change. The engineering lead wants to force the upgrade in the next release, arguing that maintaining two schema versions in parallel is too painful, and most customers will need to upgrade eventually anyway. As the PM, how do you decide how this breaking change ships?"
(Source: original, scenario informed by Stripe's public API versioning documentation and engineering blog posts)
Breaking It Down
- Clarify the problem: First ask engineering — could an additive approach (add a new field, keep the old one) work instead? If it truly can't, ask what share of existing customers would be affected, and whether those customers have the engineering resources to migrate on their own.
- Define the users: Split customers into at least two groups — large enterprise customers with dedicated engineering teams maintaining the integration, and smaller developer teams who wired up the integration once and rarely revisit it. The plan can't assume everyone can migrate in the same window.
- Structure the analysis: Run it through an RFC — Problem (the current schema can't express currency), Options (A. overwrite as a breaking change, B. add a parallel field, C. version the API so old and new customers each stay pinned to their own version), and Decision plus Cost for each (long-term maintenance cost for engineering, migration cost for customers). Write the final choice and the rejected options into an ADR so it's legible to whoever joins the team six months from now.
- Propose the plan: Choose API versioning over an outright overwrite — existing customers default to staying on the version they integrated against, new customers default to the new version, and you ship a migration guide plus tooling alongside it. This puts the cost of maintaining multiple versions on the platform side, instead of forcing a breaking change onto customers who didn't ask for one right now.
- Define success: The primary metric is the share of customers who proactively migrate to the new version, and whether support tickets spike during the migration window. The guardrail metric is whether error rates or latency on the old version degrade because of the cost of maintaining multiple versions — because if a versioning strategy tanks reliability, the damage to customers ends up worse than a one-time breaking change would have been.
A Sample Answer (What You'd Actually Say in the Room)
Framing the problem: "I'd first confirm there's really no additive path — if adding an
amount_detailsfield while keeping the oldamountfield around gets us the same result, we don't need a breaking change at all. Assuming engineering confirms it genuinely can't work, I'd next look at how many of the 300 customers maintain their integration with their own engineering team versus how many are small teams that wired it up once and rarely come back to it, because that determines whether we can force everyone to switch on the same date."Structured analysis and plan: "I'd write an RFC laying out three options — overwrite outright, run old and new fields in parallel, or version the API — each with its long-term maintenance cost for engineering and its migration cost for customers. I'd choose API versioning: existing customers default to staying on the version they integrated against, new customers get the new schema, backed by a migration guide and tooling. The difference from an outright overwrite is that we're absorbing the cost of maintaining multiple versions on our own side instead of pushing a breaking change onto customers — that's the core judgment call I noticed in how Stripe's versioning system is designed, when I was prepping for this question. Once decided, I'd write it up as an ADR, recording why we ruled out the overwrite option, so an engineer joining six months from now doesn't have to relitigate it."
Defining success: "I'd track the share of customers who proactively migrate to the new version, and whether support tickets spike during the migration window, so we actually know customers can migrate smoothly rather than just assuming our docs were clear enough. But I'd also watch the guardrail metric — whether the old version's error rate or latency degrades because we're maintaining two schemas at once — because if the versioning strategy tanks reliability, the damage to customers ends up worse than a one-time breaking change would have been."
Self-Check List
Use this table to check whether your answer covers the key points:
| Check item | Covered? |
|---|---|
| Confirmed whether an additive approach could avoid the breaking change, instead of accepting engineering's framing at face value | |
| Distinguished between customers with dedicated engineering resources and those without, instead of assuming everyone can migrate at once | |
| Used an RFC to lay out options and their costs, instead of jumping straight to one plan | |
| Mentioned using an ADR to preserve the decision for future reference and onboarding | |
| Success metrics cover both migration progress and a reliability guardrail | |
| Bonus: mentioned putting the maintenance cost on the platform side rather than passing it to customers |
Today's Case
Stripe: date-named versions that let code written in 2012 still run today
Stripe's API versioning system is the counterexample to "avoid breaking changes altogether." Starting with the 2024-09-30 (acacia) release, Stripe ships a new API version every month, guaranteed fully backward compatible — customers don't need to change any code to upgrade safely. What can actually contain breaking changes is a named major release issued only twice a year (2025's Basil, and the current 2026-08-26.dahlia). Each customer account stays pinned to the version it integrated against, and unless they actively opt in, requests and webhooks keep being processed exactly as that version defines — Stripe has written publicly that it deliberately does not auto-upgrade customers, because a poorly communicated automatic upgrade could break a customer's payment integration outright. When the EU's Strong Customer Authentication rules landed and the old charge object couldn't express "this transaction requires asynchronous multi-step verification," Stripe didn't patch the old object — it designed a new PaymentIntents primitive to model the new business reality directly, then shipped migration tooling and guides alongside it. That's the cost of maintaining compatibility, carried concretely by Stripe's own engineering org.
Interview payoff: This case is the real-world counterpart to the "should a B2B API platform force a breaking change" scenario above. It's a direct answer to "give an example of API design you think was done well," and it's a good check on whether your own answer missed anything — especially "who bears the cost of a breaking change" and "model the new business reality with a new primitive instead of forcing it into the old object," which is exactly the part of the RFC's Cost column candidates tend to gloss over.
Further Reading
- Amazon Technical Product Manager (PM-T / PMT) Interview Guide — a full breakdown of Amazon PM-T's technical-depth round, including what interviewers score for architectural fluency and engineering collaboration
- Product at Stripe: a case study in developer-first product strategy — a full walkthrough of how Stripe treats API versioning, idempotency, and the SCA migration as product decisions rather than purely engineering ones
- Architecture: Write It Down Before Rewriting — the practical RFC and ADR workflow, including the threshold for which changes need an RFC and which don't
References
- Amazon Technical Product Manager (PM-T / PMT) Interview Guide — supports the scoring criteria for Amazon PM-T's technical-depth round cited in "Today's Focus"
- Product at Stripe: a case study in developer-first product strategy — supports the PaymentIntents and versioning-philosophy details cited in "Today's Case"
- Stripe API Versioning — the official documentation for the monthly backward-compatible releases and named major releases cited in "Today's Case"
Loading...