Technical Leadership and Influence Questions
Leading through technical depth and credibility: setting technical direction, making high-stakes architecture and design trade-offs, and driving strategic influence across engineering without necessarily managing people. Covers earning trust through hands-on expertise, leading complex or greenfield initiatives, and elevating a team's technical bar. The staff-plus IC leadership track.
Walk me through how you'd lead a large-scale migration of an existing system, for example a monolith to microservices, across many teams and over an extended timeline. How do you decompose it into shippable pieces, and how do you decide what gets migrated first?
Sample Answer
Direct answer
Decompose by consumer dependency, not by internal code structure: the sequencing question is which piece can be extracted with the fewest teams needing to change anything on day one, not which piece is architecturally cleanest to pull out. Before committing to a multi-year effort at all, get an explicit answer to whether incremental refactoring or wrapping the existing system buys most of the benefit for a fraction of the cost, because a full rewrite into microservices is not always the right call even when the monolith is genuinely a problem.
Structured elaboration
- Decide the type of change first. There are three real options for a system that is slowing delivery: refactor it in place, wrap it behind a stable interface (the strangler pattern: new functionality goes to new services, old functionality routes to the existing system until it is incrementally replaced), or fully replace it. Full replacement is usually the most expensive and riskiest option and should be the fallback once the first two are ruled out for a documented reason, such as the existing system's internals being unsafe to touch, not merely unpleasant to touch.
- Decompose along consumer boundaries. Map every internal and external consumer (which teams, which APIs, which downstream jobs) before deciding what extracts first. A domain with few consumers and low criticality, notifications, say, is a safer first extraction than the domain most core to the business, even if the core domain is more architecturally interesting, because the first extraction is also where you prove out the migration mechanics (deployment pipeline, dual-write pattern, rollback path) with limited blast radius.
- Keep both systems correct simultaneously during the transition, using change-data-capture (CDC, a mechanism that streams row-level database changes as they happen) to replicate data into the new service asynchronously at first, moving to a stricter consistency guarantee only where eventual consistency is genuinely unacceptable, such as financial balances, not most read-heavy views.
- Maintain an explicit contract with consumers: versioned, documented APIs, a deprecation timeline for the old path, and adapters for consumers who cannot move immediately, rather than letting the two systems drift silently out of sync.
- Gate promotion between phases on real numbers, not on calendar time: replication lag under a stated bound, error rate under a stated bound, and a minimum share of traffic or consumers actually cut over, so "next phase" is a decision, not a default.
flowchart LR
A[Map consumers and criticality] --> B[Choose refactor, wrap, or replace]
B --> C[Extract lowest-risk domain first]
C --> D[Dual-write plus CDC sync]
D --> E{Gates met: lag, errors, adoption}
E -- no --> D
E -- yes --> F[Cut traffic to new service]
F --> G[Next domain by consumer risk]
G --> H[Decommission old path]
Worked example
Picture a migration triggered by an acquisition: two companies' data platforms need to become one, with well over a hundred consuming teams and thousands of downstream API clients between them, some internal, some external. Rather than a single cutover, the first extraction is the lowest-risk shared domain, say a reference-data service used read-only by most teams, validated with change-data-capture and shadow traffic before anything routes to it live. Each subsequent domain is chosen by consumer criticality, not architectural neatness, until the last of the five original business units still reading from the legacy warehouse migrates off and it can finally be decommissioned. For at least one domain along the way, the honest answer to "should this be a service migration at all" is no: a batch reporting job moving to a streaming architecture only pays for its added operational complexity if the business genuinely needs sub-hour freshness, and where it does not, refactoring the batch job in place is the right call, not migrating it because the rest of the platform is migrating.
Trade-offs and pitfalls
Big-bang cutovers fail because the blast radius of a mistake is the whole system at once; the strangler pattern trades that for a longer timeline and the real cost of running two systems and a synchronization layer simultaneously, which itself needs monitoring and can become a permanent fixture if nobody owns retiring it. The second common failure is sequencing by architectural interest rather than consumer risk, extracting the domain engineers find most interesting first and leaving the actual blockers to team velocity for last. The third is skipping the refactor-or-wrap option entirely because a full rewrite is the more exciting project to propose, when the organization may not need to pay for one.
Share a time you had to change a long-term technical strategy because business priorities shifted underneath it, for example a market downturn, an acquisition, or a new regulatory requirement. How did you decide what to keep and what to abandon?
Sample Answer
Direct answer
When priorities shift out from under a strategy, the discipline is re-scoring the backlog against the new constraint explicitly, not silently reprioritizing by gut feel, and being willing to say which committed work is paused, not just which new work is added.
Structured elaboration
- Get the new hard constraint stated precisely, in writing, from whoever owns it (legal, a regulator, an acquirer). "Compliance" and "explainability" mean different specific things to different people, and building against a vague version of the requirement wastes the pivot.
- Re-score every active and planned initiative against a small, explicit, written set of criteria weighted toward the new constraint (regulatory impact, reach, effort, and confidence in the estimate, adapted to the moment). The same test works whether the forcing constraint is a regulator, an acquirer, or a hard performance target like sustaining 10x throughput under a fixed budget. Writing the score down is what makes the "what got abandoned" conversation defensible later, rather than looking political.
- The same re-scoring discipline applies even when the shift is internal rather than external: three stakeholders each request a different initiative for the same cycle and there is capacity for only one; an explicit-criteria comparison is what makes that choice defensible instead of a popularity contest.
- Sequence the response across time horizons instead of one big-bang change: an immediate 0-3 month slice covering the non-negotiable, hard-deadline work; a 3-12 month slice building the durable capability (real data lineage and access control, not a one-off report); and a 12-36 month slice for restoring the paused strategic work once the mandatory floor is met.
- Get explicit sign-off from whoever controls funding and headcount (finance, a CTO, or equivalent) on the reprioritization itself, not just on the technical plan. Reallocating people away from committed roadmap items is a resourcing decision, not only a technical one.
- Keep a visible "paused, not cancelled" list. Initiatives dropped for the mandatory work need an owner and a resume trigger, or they quietly become permanently cancelled without anyone deciding that on purpose.
Worked example
A company gets acquired and a new regulator-driven requirement (data retention and explainability of reporting) becomes non-negotiable, on top of an existing roadmap built entirely around growth-facing dashboards. Rather than absorbing the new work as one more backlog item, you convene the people who actually own the requirement, translate it into concrete deliverables (an auditable reporting view, retention automation, documented data lineage), and re-score the backlog against a deadline-driven weighting, pausing lower-urgency growth experiments explicitly rather than letting them slip silently. You phase the response: the auditable view and retention work ship first because they carry the hard deadline; lineage and access-control work that makes future audits cheaper follows once the deadline is met; the paused growth analytics work gets a resume date once the mandatory floor is in place, coming back with a smaller footprint that reuses automation built for compliance rather than restarting from the original scope. Getting explicit funding sign-off matters here specifically because analysts had to move off committed growth work, and that is a resourcing call that needs to be made on purpose, not absorbed silently.
Trade-offs and pitfalls
The main failure is treating a hard external deadline as just another high-priority ticket instead of restructuring the whole plan around it, which produces a roadmap that stays busy but still misses the deadline. The second is never explicitly un-pausing the deferred work: once a strategic initiative is quietly shelved for a mandatory one, it tends to stay shelved unless someone owns bringing it back. The third is picking the requirement's minimum literal interpretation to move fast and then having to redo the work once the fuller requirement is clarified; it is usually cheaper to over-clarify scope with the requirement's owner up front than to guess and rebuild.
You want to raise the technical bar on a team by introducing shared standards, for example coding guidelines, CI checks, or architectural guardrails. How do you decide what to standardize versus leave to team judgment, and how do you keep it from being ignored six months later?
Sample Answer
Direct answer
Standardize the things whose inconsistency has a cost outside the team that owns them, and that can be checked by a machine rather than a person's memory. Leave to team judgment anything whose blast radius stays inside the team. A standard survives six months only if it lives in a gate, continuous integration (CI), a template, a linter, instead of a wiki page, because unenforced guidance quietly reverts to whatever each team already does.
Structured elaboration
The decision test, three questions:
- Cross-team blast radius: does inconsistency here break, confuse, or slow down people outside this team (an API contract, an incident-escalation format, a deployment interface)? If yes, it is a candidate for standardization.
- Machine-checkability: can the rule be expressed as a lint, a CI check, a schema, or a template? A rule that can only be enforced by review-time nagging will decay.
- Cost of inconsistency versus cost of enforcement: is the recurring cost of not having this standard (incidents, onboarding confusion, duplicated tooling) bigger than the cost of building and maintaining the gate?
Concrete range, drawing on the kinds of standardization efforts teams actually run:
- Clears the bar (cross-team, high blast radius, checkable): a contract-testing system that fails CI when a backend change breaks a documented frontend expectation; an API versioning and deprecation policy that gives consumers a fixed window before a breaking change ships; model governance requirements, model cards, dataset documentation, and bias-testing gates, that a downstream team or auditor will ask for regardless of who owns the model; shared incident-response conventions across autonomous teams so any on-call engineer can page correctly.
- Left to team judgment (local, low blast radius): a naming convention for one team's own datasets and reports; a small process change, how one team runs its own review meeting, that improved that team's own throughput; code style with no cross-team consumer.
- Ambiguous middle, decided by ownership of the failure, not the code: a lightweight code and model review process is worth standardizing only where reviews cross team lines, on a shared platform, for example. If it is one team reviewing its own code, leave the mechanics to them and standardize only the outcome, "every model change gets a second reviewer," not the process.
Durability mechanism, why it survives six months:
- Enforce in CI or the pipeline, not in a document. A rule a human has to remember to apply degrades the moment the person who cared moves on.
- Name an owner and a review cadence, e.g. quarterly, so the standard is revisited, not just imposed once.
- Build an explicit, cheap exception path, a documented, time-boxed waiver, so teams route around the standard openly instead of quietly ignoring it. Silent noncompliance is the real failure mode, not disagreement.
- Roll out with a warn-before-block period and cut switching cost with a migration tool or codemod. Adoption sticks when the standard is easier to follow than to route around.
Worked example
A platform team owns three backend services consumed by eight frontend teams. Backward-incompatible changes were shipping without warning, breaking frontend builds roughly monthly. This passes both tests: cross-team blast radius (each break costs multiple teams debugging time they did not cause) and machine-checkability (an API's shape is expressible as a schema). The fix was consumer-driven contract tests: every backend pull request (PR) runs the contracts published by consuming teams, and a break fails CI before merge, not after deploy. Deliberately NOT standardized: how each backend team structures its internal service code, that stays local, because a bad internal structure only costs that team.
Illustrative cost check run before committing (arithmetic shown, not a claimed measured result): if a broken-contract incident costs roughly 3 engineers times 2 hours of debugging plus a rollback, that is about 6 engineer-hours per incident. At one incident a month that is 72 engineer-hours a year, against an estimated 40 hours to build and maintain the contract-test harness, so the standard was expected to pay for itself inside the first year.
Trade-offs and pitfalls
- Standardizing too much kills the local judgment that made teams fast and breeds shadow processes where teams comply on paper and route around it in practice. The naming-convention and small-process-change examples above are exactly the kind of thing that should stay local; forcing them org-wide adds coordination cost for no cross-team benefit.
- A standard that lives only in a document decays the moment attention moves elsewhere. If it cannot go in a CI gate or a template, expect erosion within a couple of quarters regardless of how good the guidance was.
- Skipping the grace period and hard-blocking on day one looks decisive but usually generates workaround PRs and resentment. The far more common failure than teams "not caring" is teams not yet having a cheap way to comply.
- No exception path means legitimate edge cases either get silently ignored (the standard rots) or block real work; both outcomes erode trust in future standards.
Describe a technical decision you had to make without complete information. Stakeholders disagreed on how much risk was acceptable. How did you reach a recommendation, and how did you communicate the uncertainty that remained?
Sample Answer
Direct answer
I separate the decision into what's actually unknown, what's knowable in the time available, and what we simply have to accept as risk, then I get stakeholders to state their risk tolerance in concrete terms instead of arguing about the plan in the abstract. I make the recommendation defensible by documenting the assumptions and the trigger conditions that would make us reverse it, so the reasoning survives even if the outcome doesn't.
How I structure a decision with incomplete information
- List the knowns, the unknowns, and what each unknown costs if it goes the wrong way. Not every unknown is worth resolving; the ones worth spending time on are the ones whose failure mode is expensive.
- Turn "how much risk is acceptable" into a concrete question. Instead of asking stakeholders whether they're comfortable with risk, I ask what specific loss they can tolerate and what signal would tell us we crossed the line. That turns a values disagreement into a measurable threshold people can actually agree on.
- Pick the option whose worst case is recoverable, not the option with the best expected case, when the unknowns are large. A decision that can be cheaply undone is worth more than its expected value suggests, because it buys time to learn the thing you don't currently know.
- Write the recommendation down with its assumptions and its reversal trigger, before the rollout starts, not after. If I'm wrong, the paper trail should make it obvious what changed, not just that it failed.
Worked example
A team was migrating a sharded datastore to a new partitioning scheme ahead of a growth push, and the traffic pattern for the new user segment driving that growth wasn't fully characterized yet: we had projections, not production data. Product wanted to cut over before the segment launched to avoid a second migration later; the SRE team wanted to wait for real traffic data before committing to a partition key, worried about a bad key choice causing hot shards that would need a second, more disruptive migration to fix.
I laid out the actual unknowns: how skewed the new segment's access pattern would be, and how expensive a second migration would be if the first key choice was wrong. I asked the SRE team to state the concrete failure mode they were protecting against (sustained P99 latency degradation on the hottest shard) and asked product what loss was acceptable if we waited (a fixed number of weeks of delay to the growth push). Both were quantifiable once stated that way. I recommended a phased cutover: migrate on the best-available projected key, but keep the old sharding scheme's routing code live and instrument shard-level load so we would have real signal within the first two weeks of the new segment's traffic, with an explicit threshold (sustained shard imbalance past a set point) that would trigger a second, corrective repartition rather than an emergency one. I documented the projection we used, why we chose it over waiting, and the exact signal that would tell us it was wrong.
Trade-offs and pitfalls
- Treating "we don't have enough data" as a reason to wait indefinitely. Waiting has a cost too; the discipline is comparing the cost of waiting against the cost of a wrong guess you can detect and correct quickly.
- Letting the loudest stakeholder's risk tolerance become the default. Stating tolerance in concrete, comparable terms is what prevents the decision from just reflecting whoever argued longest.
- Skipping the instrumentation that would tell you if you were wrong. A phased decision without a real signal to watch is not actually phased, it's just a delayed all-at-once bet.
- Documenting the decision but not the trigger for reversing it. A record of "why we chose this" without "what would make us change it" doesn't actually reduce risk, it just explains the risk after the fact.
Tell me about a time you led a technical decision for a project you didn't have formal managerial authority over. How did the lack of authority actually change what you did, compared to a project where you did have it?
Sample Answer
Direct answer
Without formal authority, the entire weight of the decision has to be carried by evidence and process rather than by position: a written proposal, a small prototype that answers the riskiest question first, and an explicit invitation for dissent before you ask anyone to commit. With formal authority you can still do all of that, but you can also make the call and move on if consensus does not converge; without it, converging the room IS the job, and skipping that step means the decision does not stick even if you turn out to be right.
Structured elaboration
The mechanical difference: when you have authority, disagreement can end in "I've decided, let's go" and the team executes because reporting-line accountability backs the call. When you don't, that same sentence has no force. So the practical changes are:
- You over-invest in a written proposal before ever proposing a solution out loud, stating the problem, the options actually considered, and the criteria for choosing between them. A short document lets people react to the reasoning instead of to you personally, and it is reviewable asynchronously by people you have not met yet.
- You lead with a prototype or spike that retires the riskiest unknown, not the whole system. The goal is a concrete artifact stakeholders can react to instead of an abstract argument, because a working example is much harder to dismiss than an opinion.
- You actively route around the accountability gap by getting a genuine owner (your manager, the team lead whose system it affects) to co-sign the recommendation early, before it is finalized, so the decision has a place to live once you move to the next thing.
- You spend more time on the people whose sign-off you need but who have no obligation to give it to you specifically: you ask what would change their mind, and you build that evidence rather than restating your case louder.
- You cannot force a schedule. With authority you can set a decision deadline; without it you have to make the cost of delay visible (a concrete list of what stays blocked) and let that pressure do the work instead of a mandate.
This same shift shows up whenever the scope of what you're deciding outruns your formal standing: influencing a peer-to-peer technical decision without formal authority, influencing architecture or policy decisions beyond your immediate team, leading a multi-team initiative (for example, one aimed at a large inference-latency cut) with no direct reports on it, leading a cross-team machine learning initiative with no direct reports, or influencing an architectural decision in a technology area outside your own deep expertise, where you additionally have to earn credibility on the subject matter itself before anyone weighs your recommendation at all.
Worked example
I was the senior engineer on a customer-support assistant project with no direct reports on it. Research wanted to fine-tune a proprietary model on internal tickets; product wanted the fastest path to a demo; legal needed data minimization and an audit trail. I had a technical opinion (retrieval over a frozen model, rather than fine-tuning, given our data volume and the audit requirement) but no authority to just pick it.
What changed compared to a project where I had formal ownership: instead of assigning the decision, I wrote a one-page comparison of the three real options (fine-tune, retrieval-augmented generation, hosted model with prompting) against the criteria the stakeholders themselves had named (latency budget, an explicit PII-handling requirement, and cost), and I built a small retrieval prototype against a sample of real tickets before asking anyone to agree to anything. The prototype answered the one question people actually disagreed about, whether retrieval could hit acceptable relevance without fine-tuning, and let legal see concretely how redaction and provenance logging would work rather than trusting a description of it. I did not have the standing to just tell research to stop pursuing fine-tuning; instead I proposed it as a phase-two option contingent on the prototype's results, which gave them a reason to agree rather than a reason to be overruled.
Where this differed from a project I did directly own: on an earlier project where I had explicit technical ownership, I skipped the written comparison document entirely and just built the thing, because the team executed on my say-so. Here, skipping that document would have meant three stakeholders continuing to argue past each other indefinitely; the document was not a nice-to-have, it was the actual mechanism that produced a decision.
Trade-offs and pitfalls
- Over-investing in process when you actually do have enough informal trust wastes time; read the room for whether people are truly undecided or just want you to make the call.
- A prototype aimed at the wrong risk (polishing the demo instead of proving the contested assumption) burns the one shot you get at a stakeholder's attention.
- Getting a co-signer too late, after the recommendation is already public, reads as seeking cover rather than building shared ownership; involve them while the document is still a draft.
- The biggest failure mode without authority is silent non-adoption: everyone nods in the room and nothing changes afterward. Treat agreement in the meeting as provisional until you see the decision actually acted on.
Unlock Full Question Bank
Get access to all 39 Technical Leadership and Influence interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.