Infrastructure Strategy and Technology Selection Questions
Setting technical direction for infrastructure and deciding what to build on. Covers infrastructure vision and long-term roadmap, modernization and technical-debt strategy, platform decisions, and organizational and governance considerations, alongside the decision framework for adopting or retiring technology: build-versus-buy-versus-cloud-versus-on-premises trade-offs, vendor and platform evaluation, technology-portfolio rationalization, requirements-driven service selection, and weighing total cost of ownership and risk. It also covers managing an existing vendor relationship: quantifying and mitigating lock-in, negotiating contract terms, and planning an exit from a service the organization depends on. The leadership-altitude discipline of directing an infrastructure estate over time, building consensus among stakeholders with conflicting priorities, and persuading leadership or a team to accept a major technology change.
You're advising a fast-growing company scaling toward 10 million monthly users. Build an infrastructure roadmap across three horizons (0-6, 6-18, 18-36 months) that balances resilience investment against cost, and explain how you would prioritize what gets built first.
Sample Answer
For a fast-growing, cost-sensitive company, the right sequencing principle is different from an enterprise-scale roadmap: at each horizon, fund only the resilience work that removes the single risk most likely to actually bite at the next horizon's traffic level, and treat every horizon boundary as a re-plan checkpoint against real growth data rather than a fixed calendar commitment, because a startup usually cannot afford to be wrong about the pace of its own growth.
The three horizons
- 0-6 months: fix the failure modes that would cause a customer-facing outage today, a single point of failure with no redundancy, no automated and tested backup/restore process, no basic observability telling the team what's actually breaking. This work is funded regardless of "score," the same floor-before-scoring logic used for any competing-investment decision, because at this stage these are existential, not optional.
- 6-18 months: once traffic is provably approaching the ceiling of the current single-region setup (not before), introduce horizontal scaling and multi-availability-zone redundancy for the tier-1 path, and start decoupling the monolith's hottest paths from the rest of the system. Spend rises meaningfully here, so this horizon needs an explicit review gate tied to the actual growth curve observed so far, not the original plan, because growth may arrive later, earlier, or differently shaped than assumed six months in.
- 18-36 months: multi-region active/passive or active/active redundancy for disaster recovery, a formal capacity-planning cadence, and the handoff of infrastructure ownership from generalist engineers to a dedicated platform or SRE function. A cost-optimization program (reserved capacity, rightsizing) typically starts paying for itself here, partially offsetting the resilience spend now that scale justifies the investment.
How to prioritize within each horizon
At each horizon boundary, ask what the single most likely failure mode is at the next horizon's expected traffic level, and whether it's cheaper to address it now, before the system is under real production load and bound by uptime expectations, or later, after an outage has already forced the question and taken the business's trust with it. That ordering, not a general preference for "more resilience is always better," is what should drive which item gets funded first when the budget can't cover everything on the wish list at once.
Worked example
Scaling from an early-stage baseline toward 10 million monthly active users (MAU), a rough sizing for the three horizons might look like: 0-6 months, roughly $15,000 in one-time hardening work (backup/restore testing, basic monitoring); 6-18 months, roughly $120,000 (multi-AZ infrastructure, on-call tooling, and a first dedicated site-reliability hire for part of the year); 18-36 months, roughly $450,000 (multi-region disaster recovery, a capacity-planning function, and a cost-optimization program that might claw back on the order of 20% of run-rate infrastructure spend once it's in place). The spend accelerates faster than the user count does, because both the traffic and the blast radius (how much of the system a single failure would take down) of a failure grow together at this stage; a rough way to reason about sizing an ask at each horizon is to expect resilience spend to grow noticeably faster than linear with user count, not to treat the two as proportional. These figures are illustrative sizing logic for how a team might reason about an ask, not a report of measured spend.
Trade-offs and pitfalls
- Building the 36-month architecture in month one is "resume-driven" over-engineering at a company that may not survive to need it; it burns runway that a cost-constrained, fast-growing company usually cannot spare.
- The opposite failure, treating every horizon as a fixed calendar commitment and never re-checking it against actual growth, risks hitting 10 million users on infrastructure that was sized and sequenced for a growth curve that never actually happened, forcing a fire-drill rebuild under load instead of a planned one.
- Funding 18-36-month-horizon work early because "we'll need it eventually" without a growth trigger to justify the timing is one of the most common ways a cost-constrained company overspends on resilience it can't yet afford.
You join as the infrastructure lead and inherit a stack with heavy technical debt: monoliths, weak observability, manual deploys, and frequent incidents. Propose a 12-month modernization roadmap that balances paying down debt, improving reliability, and preserving delivery velocity.
Sample Answer
Direct answer
Spend the first quarter on reliability and observability before touching technical debt directly, because you cannot safely pay down debt or protect delivery velocity without first being able to see whether a change made things better or worse. Commit to a specific, shifting allocation across the year, roughly 40 percent reliability, 35 percent debt paydown, and 25 percent velocity work in aggregate, rather than a vague promise to "balance" the three.
Structured elaboration
gantt
title 12-Month Modernization Roadmap
dateFormat YYYY-MM
axisFormat %b
section Reliability and observability
Instrumentation and incident process :a1, 2026-01, 3M
Automate deploys for top 2 incident-heavy services :a2, after a1, 3M
section Debt paydown
Strangler-fig extraction on highest-debt module :a3, after a2, 3M
section Velocity harvest
Redirect capacity to roadmap, retain a fixed debt tax :a4, after a3, 3M
- Q1: stop the bleeding. Instrument observability, start blameless postmortems, check on-call rotation health, and put at least the highest-incident-frequency service behind basic continuous integration and delivery instead of a manual deploy.
- Q2: reliability foundations. Automate deploys for the top incident-frequency services identified in Q1, set explicit service-level objectives (SLOs, target thresholds for a service-level indicator, a measured signal such as latency or error rate) for those services, and address the single points of failure the discovery work surfaced.
- Q3: debt paydown at scale. Begin strangler-fig decomposition of the highest-debt monolith module, and pay down the second-highest incident-frequency cluster identified from the same data.
- Q4: velocity harvest. With the worst reliability and debt problems addressed, redirect a larger share of capacity to product-facing work, but permanently reserve a fixed "debt tax," roughly 15 to 20 percent of capacity, so debt does not simply reaccumulate to where it started once the plan ends.
Worked example
A team of 10 engineers inherits incident data showing that 60 percent of pages in the last quarter trace back to just 2 of 15 services, meaning 13 percent of the service count is generating 60 percent of the operational pain. That concentration is the actual prioritization logic: Q1 and Q2 target those 2 specific services for instrumentation, continuous-delivery automation, and SLOs, rather than spreading the same effort evenly across all 15, since evenly spread effort would leave the two highest-pain services no better off after two full quarters.
Because a new infrastructure lead is often expected to show visible feature-shaped output in month one, plan explicitly for how quarter-one progress gets communicated to non-technical stakeholders when the actual output is invisible plumbing work: report the before-and-after incident count and mean time to recovery for the two targeted services as the quarter's headline result, since those are real, measurable outcomes even though nothing user-facing shipped.
Trade-offs and pitfalls
The most common political failure is a new infrastructure lead feeling pressure to ship something visibly feature-shaped in the first month, when the right first move is invisible reliability work; plan the communication strategy for that gap deliberately rather than caving and reordering the roadmap to produce optics. A debt-paydown plan with no ongoing allocation reverts to the same state within a year of the plan ending, which is why the fixed debt tax in Q4 is a permanent structural change, not a one-time cleanup. And over-rotating entirely toward reliability for a full year can starve product velocity badly enough that the business loses confidence in the infrastructure team's judgment, which is exactly what the fixed percentage split across all three areas is meant to prevent.
A company has accumulated a dozen overlapping point solutions (CRM, billing, analytics, support) across several years. Leadership wants a recommendation: integrate the existing landscape, replace it with a single suite, or build custom middleware. Present a structured analysis and recommendation.
Sample Answer
Direct answer
Diagnose the actual pain before picking a path; leadership's framing of "too many tools" tends to jump straight to "replace everything with one suite," when the real driver is very often a single broken data flow between two of the twelve tools, which a targeted integration fixes at a fraction of the cost and risk of a full suite replacement. Default to integrating over an existing landscape unless a specific, measurable trigger argues otherwise.
Structured elaboration
Diagnose first
Determine whether the actual complaint is data inconsistency across tools (a customer record disagreeing between systems), duplicate manual work (someone re-keying data between systems by hand), pure cost redundancy (paying for genuinely overlapping features), or a real capability gap. Each of these has a different correct answer, and none of them is answered by counting the number of tools in use.
Score the three options
Score integrate, replace with a single suite, and build custom middleware against: switching cost (data migration, retraining, and contract-termination cost for whatever gets replaced), the risk of disrupting revenue-generating workflows during the transition, time-to-value, and ongoing total cost of ownership.
Recommendation logic
- If the pain is data inconsistency or duplicate manual work, and the underlying tools are otherwise adequate, integrate: adopt or build a middleware or integration layer (an integration-platform-as-a-service, or an event-bus pattern that publishes changes from one system for others to consume) as the lowest-risk, fastest-time-to-value fix.
- If the pain is a genuine capability gap across most of the landscape, and a mature single suite covers the actual required capability set at acceptable cost, replace with a single suite, but budget for a multi-quarter phased cutover, never a big-bang replacement of a dozen tools at once.
- Build custom middleware beyond a thin integration layer is rarely the right default; recommend it only when the integration need is genuinely bespoke to the business's own data model and no viable off-the-shelf integration option covers it, because a custom middleware layer simply becomes a thirteenth system someone has to maintain indefinitely.
Worked example
Investigation traces the large majority of the reported pain, in this scenario, to one specific problem: the customer relationship management (CRM) system and the billing system disagree on customer status, because there is no synchronization between them, which causes revenue leakage from continuing to bill customers who have already churned according to the CRM. That single finding argues strongly for integrate: a lightweight event-bus or integration-platform connector synchronizing customer status from the CRM to billing, rather than a full twelve-tool suite replacement, which would cost far more, carry far more transition risk, and take far longer to deliver than fixing the one broken data flow that is actually driving the complaint.
Trade-offs and pitfalls
The most common overreach is letting leadership's "too many tools" framing drive straight to "buy one suite to replace them all" without first diagnosing what is actually broken. A close second is underestimating a suite replacement's true switching cost across a dozen already-integrated systems, since migration risk compounds with each additional connected system rather than adding up linearly. And custom middleware quietly built because it "feels like just glue code" has a well-documented failure mode: a few years later it is an unmaintained thirteenth system that nobody wants to own, which is worth naming explicitly as the reason it is not the default recommendation.
You inherit a legacy monolith running on aging infrastructure with manual, high-risk deploys. Leadership asks for a safe modernization plan with minimal business risk. Describe how you'd sequence and phase the modernization, including discovery, telemetry, and risk controls.
Sample Answer
Direct answer
Sequence this as an incremental, strangler-fig style replacement (extracting one piece of the monolith at a time behind a routing layer, rather than rewriting it wholesale), and put discovery and telemetry before any code change, because a big-bang rewrite of a revenue-critical monolith is the single most common way this kind of project fails.
Structured elaboration
flowchart LR
A[Discovery: map real call graph and data dependencies] --> B[Telemetry baseline: instrument before touching code]
B --> C[Extract one low-risk module behind a facade]
C --> D[Dual-run and diff against the baseline]
D --> E{Matches baseline?}
E -- yes --> F[Cut over, then repeat on next module]
E -- no --> C
F --> G[Decommission old path after a bake period]
Phases
- Discovery (2 to 4 weeks): map the monolith's actual call graph and data dependencies, not the outdated architecture diagram, and interview the on-call team for the tribal knowledge of which parts are actually scary in practice.
- Telemetry first, before any code changes: instrument distributed tracing, error rates, and latency percentiles (p95 and p99, the 95th and 99th percentile) so a "before" baseline exists; there is no way to prove a change did not make things worse without one.
- Strangler-fig extraction: carve out one well-bounded, low-risk module first, deliberately not the scariest one, route to it through a facade, and run it in shadow (dual-run) alongside the old path, diffing outputs before cutting traffic over.
- Iterate, prioritized by a risk-versus-effort score, always keeping the monolith itself deployable and the previous extraction's rollback path intact.
- Decommission the old code path only after the new path has run at 100 percent traffic for a defined bake period with no regression against the phase-one baseline.
Risk controls throughout
Feature flags for instant rollback, percentage-based canary traffic shifting, an explicit rollback trigger (for example, if p99 latency exceeds baseline plus 20 percent for 15 minutes, roll back automatically), and a change freeze calendar around peak business periods.
Worked example
An e-commerce monolith's checkout module processes roughly $2,000,000 a day in revenue. The telemetry baseline shows checkout at 800 milliseconds p99 latency and a 0.3 percent error rate. Rather than starting the strangler-fig pattern on checkout itself, the first extraction targets the lower-risk, read-only order-history module, validating the whole pattern (facade, dual-run, cutover, rollback) with a near-zero blast radius (blast radius: how much of the system would be affected if this extraction goes wrong). Only after two successful low-risk extractions does checkout get extracted, behind a 1 percent traffic canary for the first week before ramping up, so the riskiest module benefits from a pattern that has already been proven twice elsewhere.
Trade-offs and pitfalls
There is a real political pull to start with the scariest, highest-visibility module first, since that is what leadership actually asked about; the safer sequence, proving the pattern on a low-risk module first, trades slower initial visible progress for a dramatically smaller blast radius if something goes wrong, and that trade is worth naming out loud to stakeholders rather than making silently. Skipping the telemetry baseline is the second-most common failure, since a regression cannot be detected against a baseline that was never measured. And an open-ended decommission plan ("we will delete the old code eventually") almost never actually happens without a scheduled forcing function tied to a specific bake-period end date.
Design a proof-of-concept to compare a managed platform service against a self-managed equivalent before committing to one. Specify the experiments and metrics you'd collect (throughput, latency, operational overhead, mean time to recover), the failure-injection scenarios you'd run, and how you'd reach a go/no-go decision.
Sample Answer
A proof of concept (PoC) that actually settles a managed-versus-self-managed decision has its success and failure thresholds written down before any test runs, deliberately tests failure modes and not just peak throughput, and ends in a documented go/no-go against those pre-committed numbers rather than a subjective impression of "it felt fine."
Designing the PoC
- Metrics to collect: sustained throughput at a defined load, tail latency (p95/p99, the 95th and 99th percentile response time, which shows what your slowest real users experience, not just the average), operational overhead (hours of hands-on toil per week to run and tune it during the pilot), and mean time to recovery (MTTR) from an injected failure.
- Failure-injection scenarios, not just load tests: kill a node or process mid-traffic, saturate the CPU or network on a dependency, simulate an upstream dependency outage, and simulate a bad deploy that has to be rolled back. A platform that only gets load-tested on the happy path will pass a PoC and then fail in its first real incident, because the PoC never asked the question that actually matters operationally.
- Latency measured from the vantage point that matters: measure from the client's perspective (the caller actually waiting on the response), not just server-side processing time, since network hops and queuing between the two can dominate the difference between "the backend is fast" and "the user experienced it as fast." A benchmark that only reports server-side numbers is measuring the wrong thing for a latency-sensitive decision.
- Pre-committed go/no-go thresholds: set numeric thresholds for each metric before the test begins, plus at least one "kill criterion," a failure so serious it overrides every other metric (for example, any data loss during failover is an automatic no-go regardless of how good throughput looked).
- A lighter-weight variant for lower-stakes decisions: when the decision's blast radius doesn't justify a multi-week experiment-and-metrics exercise, a lightweight PoC template, objectives, scope, timeline, and deliverables, with a shorter and less rigorous set of go/no-go criteria, is a legitimate and honest alternative. The rigor of the PoC should match the cost of getting the decision wrong, not be applied uniformly to every choice.
Worked example (illustrative)
Consider comparing a managed message queue against a self-hosted equivalent for an order-processing pipeline that needs to sustain 2,000 messages per second at peak with a 99.9% availability target. That target implies roughly 8.8 hours of allowed downtime per year (0.001 x 365.25 x 24 ≈ 8.8), which is a useful number to have in hand before setting the PoC's failure-recovery threshold.
A three-week PoC plan: week one runs a sustained load test at 2,000 messages/second for at least an hour, recording p99 latency measured client-side; week two runs failure injection (kill a broker node, saturate disk I/O) and measures message loss and recovery time; week three tracks operational load, how many alerts fired and how many required a human to act. A team running this exercise might set thresholds along these lines before starting: p99 latency under 250ms at the target load, recovery from a node failure in under 2 minutes with zero message loss, and less than 2 hours per week of hands-on operational toil during the pilot. Those specific numbers are illustrative of how a team sets its bar, not a report of an actual measured run; the discipline that matters is committing to numbers like these in writing before the test, not the particular values chosen.
Trade-offs and pitfalls
- Testing only the happy path is the single most common way a PoC gives false confidence; the PoC's job is specifically to find the failure modes production would otherwise find for you, at a worse time.
- Moving the goalposts after seeing results, quietly relaxing a threshold because the preferred option narrowly missed it, defeats the entire purpose of pre-committing them. If a threshold needs to change, that change should be justified and documented separately from the result it happens to rescue.
- A PoC environment that doesn't match production's real data shape (message size distribution, traffic burstiness, request skew) can pass cleanly and still mislead, because throughput and failure behavior both depend heavily on that shape, not just on the average load.
Unlock Full Question Bank
Get access to all Infrastructure Strategy and Technology Selection interview questions and detailed answers.
Sign in to ContinueJoin thousands of developers preparing for their dream job.