Advocacy and Constructive Dissent Questions
Standing up for the right technical or product decision, even when it is unpopular or contested. Covers voicing disagreement respectfully, making the evidence case for a position others oppose, challenging the status quo, advocating for quality and users, escalating to senior leadership when the stakes justify it, committing to a decision once made, and owning it when you turn out to be wrong. Assesses candor, conviction, and the ability to disagree without being disagreeable.
Write an outline for a concise written RFC or email you would send to propose a design change that you expect some teammates to disagree with. Include the subject, one-sentence problem statement, options with pros/cons, recommended option and rationale, requested input, and clear next steps.
Sample Answer
Bottom line: state your recommendation up front rather than burying it, and separate "here are the options I considered" from "here's the specific thing I want you to respond to," so any disagreement lands on a concrete decision point instead of a vague general reaction.
Why each part of the outline exists:
- Subject line names the decision, not the topic, so readers can self-select whether to open it now (for example, "Decision needed by [date]: move background jobs off the shared queue" beats "Thoughts on background jobs").
- One-sentence problem statement proves you understand the pain before proposing a fix.
- Options with pros and cons heads off the "did you even consider X" response.
- Recommended option and rationale, stated early, gives disagreement a specific target instead of an open floor.
- Requested input, named precisely (a decision, a specific concern, a veto, and from whom) instead of asking for generic "thoughts."
- Next steps with a decision deadline, without a date, an RFC (a short written proposal, "request for comments") that everyone vaguely agreed with can drift for months.
Worked example, a filled-in outline:
Subject: Decision needed by [date]: move background jobs off the shared queue
Problem: the shared job queue's contention between unrelated jobs has caused two priority-2 (high-severity, non-critical) incidents this quarter.
Options: (A) keep the shared queue and add priority lanes, low effort but doesn't remove the contention; (B) a dedicated queue per service, full isolation but more infrastructure to operate; (C) do nothing, no added cost but the risk repeats.
Recommendation: Option B, phased in by service tier, because priority lanes only shrink the blast radius (how much gets affected when something goes wrong) rather than removing it, and B's operating cost is offset by the incident cost it avoids.
Requested input: a yes or no on the phased plan by [date]; flag now if there's a blocking constraint not listed above.
Next steps: absent a blocking objection by the deadline, start with the highest-incident-rate service next sprint.
Trade-offs and pitfalls: an RFC that lists options without recommending one reads as fence-sitting and lets the loudest opinion win instead of the best one. Conversely, a deadline too tight to genuinely absorb feedback turns "requested input" into theater.
Describe a situation where you escalated a disagreement to your manager or a more senior leader. Explain why escalation was necessary, how you prepared the case (data, customer impact, options), how you preserved cross-functional relationships during escalation, and the outcome including what trade-offs were made.
Sample Answer
Direct answer
Escalation is for disagreements that can't be resolved at the current level because of a genuine impasse or a decision that crosses team boundaries, and it only preserves relationships if you prepare a fair, evidence-based case and tell the other party you're escalating before you do it, not after.
Structured elaboration
The mechanics of a healthy escalation:
- Escalate the decision, not the person. Frame the ask as "we have two reasonable options and need a call," not "my counterpart is wrong."
- Prepare the case as options with trade-offs, including data and customer impact for each, rather than a one-sided argument for your preferred outcome.
- Loop in the other party before the escalation meeting, so nobody feels blindsided; ideally invite them into the room so the framing is visibly fair.
- Accept the trade-offs of the final call, since escalation usually means someone senior weighs priorities you don't have full visibility into.
Worked example
Two peer teams, mine and a partner team, couldn't agree on which service should own a shared API contract during a migration, and it was blocking both roadmaps. Our direct managers had discussed it informally without resolving it, so I proposed escalating to our shared skip-level leader, meaning the manager both of our managers report to, and said so directly to my counterpart first: "I don't think we're going to resolve this between the two of us, I'd like to bring it to [leader] with both our perspectives laid out fairly, are you comfortable with that, and do you want to frame your side yourself or have me include it?" I wrote up a short document with two options, the trade-offs of each (ownership clarity versus short-term migration speed), and the customer-facing risk of each choice, and shared it with my counterpart before the meeting so there were no surprises.
The leader chose the option my counterpart had actually preferred, largely due to a long-term maintenance consideration I hadn't fully weighed. Because the framing had been fair and my counterpart had been included rather than blindsided, the working relationship afterward was fine, and we moved on to executing the decision together without residual tension.
Trade-offs & pitfalls
Escalating too early, before genuinely trying to resolve something at your own level, burns trust with the person you escalated on and can make you look like you can't handle disagreement yourself. Escalating with a one-sided case, even unintentionally, damages the relationship regardless of which side wins, since the other person will remember feeling unfairly represented.
A customer requests removing a server-side validation to speed up onboarding. You believe removing it introduces significant security or data-integrity risk. Draft a short response (Slack/email) to the customer and internal PM explaining your concern, proposed safe alternatives, and success criteria for any compromise.
Sample Answer
Direct answer
I'll draft the actual short message: acknowledge the real goal first, name the specific risk plainly, and offer a safe alternative with a measurable success criterion, addressed to both the customer and the internal product manager.
Structured elaboration
Acknowledge the real goal, faster onboarding, first so the response doesn't read as a flat no. Name the specific risk concretely, what bad input could get through and what it could cause, rather than a vague "security concern." Offer at least one safe alternative that recovers most of the speed benefit. State a measurable success criterion for the compromise so both sides agree on what "resolved" looks like.
Worked example
"Hi [customer] and [PM], thanks for flagging the onboarding friction, that's a real problem worth fixing. I want to flag a specific risk with removing server-side validation entirely: it's the only check that runs no matter which client submits the request, so removing it means a malformed or malicious payload, for example an oversized field that breaks downstream processing, or an unescaped input, could reach the database directly. Tightening the web form later doesn't close that, because the form isn't the only thing that calls this endpoint: our own mobile client, the partner integration, and frankly anyone with a terminal hit it directly, and none of them run the browser's checks. Instead of removing it, I'd propose two changes that should recover most of the speed you're after: first, relax the specific field-length rule that's causing the friction you described, since that one looks overly strict; second, move validation that isn't security- or integrity-critical to run asynchronously (in the background, after the user has already moved on) so the user isn't blocked waiting on it. Success criteria I'd suggest, with one gap to close first: we've never actually written down what "fast enough" means here, so tell me the number you're measuring against and I'll hold us to it rather than to one I picked. Then, over the following two weeks: median onboarding completion under that stated target; zero increase in records failing the checks that stay synchronous, which are the security and data-integrity ones; and, for the checks we move to the background, under 1 percent of new records getting flagged and corrected after the fact, with an alert if it goes above that. Worth being explicit about that last one rather than burying it, since it is the part you're actually being asked to accept: moving a check behind the write does mean some bad records land first and get cleaned up afterwards, and that is precisely why the security and integrity checks stay in front of the write and only the cosmetic ones move behind it. Happy to pair on the specific fields if that's useful."
Trade-offs and pitfalls
Don't let "we can't remove this" be the whole message, always pair it with something you can do, or it just reads as blocking. If the customer's real complaint turns out to be confusing error messages rather than actual validation speed, the fix might be far cheaper than either removing validation or making it asynchronous, so ask a clarifying question before assuming which problem you're solving.
A peer reviewer rejects your architectural proposal in a PR citing scalability concerns. Describe step-by-step how you would respond to their feedback, how you would present data or experiments to support your position, and what you would do if the reviewer remains unconvinced.
Sample Answer
Bottom line: treat "scalability concerns" as a testable claim rather than a verdict, get the reviewer to name the specific assumption they think breaks, go get evidence for that exact claim, and then respect who actually owns the decision when responding to the result, whether that's a reviewer or a stakeholder pushing an immediate request you disagree with.
Step by step:
- Ask clarifying questions until the vague objection becomes specific and falsifiable ("this breaks above a certain load because of lock contention on this table," not "this won't scale").
- Reproduce exactly that scenario: a targeted load test or a back-of-envelope calculation aimed at the specific claim, not a broad re-argument of the whole design.
- Bring the result back in the pull request (PR) thread or a short call, framed as "here's what I found testing your specific concern."
- If the data supports the reviewer, revise the design and say so plainly.
- If the data contradicts the concern but the reviewer still isn't convinced: check who owns the decision. If it's yours to make, proceed and document the disagreement and the evidence transparently in the PR or design doc. If it's the reviewer's system or call, follow their decision, note your reservation once in writing, and escalate to a shared manager or an architecture review only if the stakes genuinely justify it, rather than overriding them unilaterally.
- The same sequence applies when the disagreement comes from a stakeholder's immediate request rather than a reviewer's comment: for example, a product manager asking you to ship something you believe is technically wrong. Clarify the actual concern behind the request, get evidence, state your recommendation plainly, and if you still have to proceed against your own judgment because the decision is theirs, document the reservation in writing rather than silently complying or silently overriding it.
Worked example: a reviewer says a new service will "never scale." Asked what threshold worries them, they name a specific request-per-second figure where they expect the shared connection pool (a limited set of pre-opened database connections that requests share instead of each opening its own) to saturate. Before running anything you check the one thing that decides whether the result transfers: staging's pool size per instance, instance count, dataset size and query mix have to match production, because a staging box with the same pool against a tenth of the data holds each connection for a fraction of the time and will sail past a threshold production would hit. You run a load test in staging past that figure and find latency holding roughly flat, and share the graph, the test script location and the pool and dataset configuration you ran against in the thread. Where staging cannot be matched, say so and back the test with the arithmetic, because pool saturation has a closed form: connections per instance times instance count, divided by the seconds each request holds a connection, is the ceiling. Twenty connections across four instances at fifteen milliseconds of hold time is roughly 5,300 requests per second; the same pool at forty milliseconds is 2,000. Quoting that next to the graph lets the reviewer check the claim without rerunning it, and it surfaces the variable that actually moves the ceiling, which is hold time rather than traffic. The reviewer approves with a follow-up ticket to revisit pooling once traffic grows several times over.
Trade-offs and pitfalls: don't turn the counter-evidence into a victory lap, frame it as narrowing the open question. And don't run a test that quietly dodges the reviewer's actual concern, that erodes trust faster than showing up with no data at all. The commonest way to dodge it without meaning to is an environment mismatch: a staging run with a different pool size, instance count or dataset answers a question the reviewer did not ask, and publishing it as a refutation is worse than having no data, because the next person to raise the concern now has to relitigate a result that is already in the thread.
You're advocating for a performance optimization that reduces cost but requires breaking backward compatibility. How would you present the migration strategy, customer communication plan, and timeline to product and support so they can approve the change?
Sample Answer
Direct answer
Build the case around what changes for the customer, not the engineering elegance of the fix, and hand product and support a decision they can actually approve: the size of the prize, a concrete migration strategy, a customer communication plan, and a timeline with named phases, rather than asking them to bless the technical approach itself.
Structured elaboration
- The size of the prize, stated first: product and support are being asked to accept customer disruption, so they need the magnitude of the benefit on the same slide as the cost. State the measured current spend and latency, the projected post-change spend and latency, and the method behind the projection (load test, prototype, or model), tagged honestly as measured or estimated. "Cuts cost meaningfully" is not approvable; "cuts encoding spend from X per month to roughly Y per month, and p95 from A to B, measured on a prototype against last month's traffic" is.
- Migration strategy: state precisely what breaks and for whom, why the optimization requires it, the phased path (parallel run, opt-in flag, deprecation window, cutover), and an escape hatch such as a compatibility layer or extended legacy support for anyone who can't move in time.
- Customer communication plan: draft the actual notice in advance (changelog entry, email, in-app banner) so product and support are reacting to real wording, not a hypothetical. Define who is contacted, in what order (highest-impact accounts first), and through what channel: self-serve docs for low-touch customers, direct account-manager outreach for high-touch ones.
- Timeline: give concrete phase dates (announce, dual-run window, deprecation, cutover), and size the window to customer volume and criticality, not to engineering convenience.
- Framed for approval: end with the specific decision being requested, such as approving the timeline and the support burden it creates, and flag any account product or support already knows will react badly. You are not asking them to referee the engineering design, but you are giving them both sides of the trade they are actually making: this much saving and this much latency improvement, against this much migration work for this many named accounts and this much projected ticket volume.
Worked example
An image-processing pipeline moves from synchronous per-request encoding to an async batched model to cut compute cost, which means the API no longer returns a processed asset URL immediately, it returns a job ID that customers must poll. The opening number is the trade itself: batching cuts encoding compute roughly in half on a prototype replay of last month's traffic, and the change touches every synchronous client, of which the top decile accounts for most of the call volume. Presenting to product and support: the highest-volume decile of current synchronous clients gets 90 days of dual support on the old endpoint, the long tail gets the same 90 days plus a hosted compatibility shim that polls on their behalf so a low-bandwidth integrator can move with a URL change rather than a rewrite, everyone gets the new async endpoint from day one with sample polling code, support receives a one-page FAQ and an escalation path two weeks before the public announcement, and a named support lead is looped into any account that files more than one ticket about the change.
Trade-offs and pitfalls
Engineers routinely underestimate how long a migration actually takes for a customer with limited engineering bandwidth, so pad the timeline and validate it against a couple of real customer conversations rather than guessing. Presenting the migration mechanics without the magnitude of the benefit is the other common failure: product cannot weigh churn risk against a saving whose size you never stated, and an unquantified "this saves cost" invites an easy no. Product and support approve faster when you've already thought through their downstream burden instead of leaving the FAQ and escalation plan for them to invent. And the most common failure is announcing before support is briefed, which means support learns about the change from angry customers instead of from you.
Unlock Full Question Bank
Get access to all Advocacy and Constructive Dissent interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.