A solutions architect at AWS, Salesforce, or a mid-size consulting shop spends less time in a terminal than a cloud architect does and more time in a slide deck justifying why the design costs what it costs. That split is what most interview prep guides get wrong. They treat the loop like a cloud architect interview with a different job title stapled on, and then candidates get blindsided by round three, a stakeholder round where the actual system design barely matters next to whether you can defend a number to someone who doesn't know what a VPC is.
Flexera's 2024 State of the Cloud Report puts average wasted cloud spend at 27% across the organizations it surveyed. A solutions architect loop exists to find out which one you'll be, the person who catches that waste before a customer signs the contract, or the person who quietly bakes it in. This page covers the questions that come up across mapping a business requirement to a design, platform selection and migration, security and compliance, and the pre-sales or stakeholder rounds that separate a solutions architect loop from a straight infrastructure interview.
If your upcoming loop leans heavier on multi-region failover mechanics and lighter on customer conversations, LastRoundAI's cloud architect interview questions page covers that ground in more depth than fits here. This page assumes you'll need both, but it leans into the half that guide skips.
Background, comp expectations, and which flavor of the role this actually is, internal architect or customer-facing pre-sales.
One engineer or architect, service model tradeoffs, cost math, migration strategy at a conceptual level. Closer to a certification exam than a design conversation.
A design scenario with a named constraint layered on top, a budget cap, an SLA, a compliance boundary, rather than an open-ended whiteboard problem.
Explain the design to a non-technical executive or customer, sometimes roleplayed with an actual director or VP sitting in.
Breach response, secrets management, or zero trust. Often folded into the system design round at smaller companies rather than run separately.
More common at large vendors and consultancies matching you to a specific account team. Smaller companies often skip this stage.
Round count varies more here than in a straight cloud architect loop, since a pre-sales SA role at a vendor and an internal SA role at a mid-size company can look almost nothing alike day to day. Treat the six rounds above as the superset, not a fixed script every company runs end to end.
Easy questions
15A functional requirement describes what the system does, users can upload a file, an order gets an email confirmation. A non-functional requirement describes how well it does it, how fast, how available, how secure, how much it costs to run. Engineers building a feature mostly work from functional requirements. Solutions architects live in the non-functional ones, because choosing a database, a region strategy, or a caching layer is almost entirely a response to non-functional requirements, not functional ones.
A software engineering system design round usually tests whether you can build the thing correctly at scale. A solutions architect round tests that plus whether you've correctly identified what the thing should be in the first place, and whether you can justify the cost and vendor choices behind it to someone who isn't going to review your code. The bar for depth on any one component is often a little lower, the bar for naming tradeoffs and their business impact is higher.
It's a real signal for a specific, narrow thing, that you know the platform's terminology and service catalog well enough to move fast in round one. It is not a signal that you can do the parts of the job that actually determine whether you get the offer, requirement mapping, tradeoff framing, and the stakeholder conversation. Treat a certification as necessary in some job postings and nowhere close to sufficient for the loop itself.
Route traffic for one specific capability to a new system through a proxy while everything else keeps hitting the old one, then repeat capability by capability until the old system has nothing left to do. It comes up constantly in stakeholder conversations because it lets you promise incremental, visible progress instead of asking a customer to accept a big-bang cutover with all the risk concentrated on one date. A stakeholder who's lived through a failed big-bang migration before will usually pick this pattern the moment you explain it.
GDPR gives you a specific number, 72 hours from awareness to notify the relevant supervisory authority, which forces a fast internal decision process whether or not you have full facts yet. CCPA's "without unreasonable delay" language doesn't give you a clock, which sounds like more room but actually creates more ambiguity about when you've waited too long, since "unreasonable" gets decided after the fact. Treat GDPR's clock as the stricter constraint to design your incident process around, and CCPA compliance mostly follows once the tighter deadline is met.
RTO (recovery time objective) is how long you're down before service is restored. RPO (recovery point objective) is how much data you can afford to lose, measured in time since the last durable copy. RPO usually costs more to improve for a given system, since a low RPO means near-synchronous replication running continuously, versus a low RTO which can sometimes be solved with automated failover on top of infrastructure you already have. For the full multi-region design tradeoffs behind these two numbers, LastRoundAI's cloud architect interview questions page goes considerably deeper than fits here.
Provider-managed is simpler and the provider technically retains some level of access to the underlying key. Customer-managed gives you rotation control and the ability to instantly revoke access to a whole dataset by disabling the key, which matters most for offboarding a vendor or responding to an active incident. For a stakeholder I'd frame it as provider-managed is fine until you need to prove to an auditor or a regulator that you, specifically, control who can read this data, at which point customer-managed stops being optional.
Explaining the architecture instead of the decision. A stakeholder round tests whether you can lead with the conclusion, what to do, what it costs, what it risks, and only go into the architecture if asked, not whether you can walk through a diagram top to bottom the way you would with an engineering peer. Candidates who default to the engineering-peer version of the explanation usually lose the room within the first two minutes.
A vendor-side solutions architect's incentives are partly aligned with selling that vendor's platform, even when they're genuinely trying to recommend the right fit, and a strong one is honest about that tension rather than pretending it doesn't exist. An internal solutions architect has no platform to sell, only a business problem to solve, and can recommend a competitor's product, or no new product at all, without a conflict of interest sitting underneath the recommendation. Both roles use the same technical skill set, the incentive structure around the recommendation is the real difference.
The overlap is real, both test system design, security, and cost tradeoffs. Where they diverge: a cloud architect loop weights infrastructure-level depth more heavily, multi-region failover mechanics, IaC tooling, disaster recovery numbers, while a solutions architect loop adds the stakeholder and pre-sales rounds this page focuses on, mapping a business requirement to a design and defending it to someone non-technical. If your upcoming loop leans harder into the infrastructure depth, LastRoundAI's cloud architect interview questions page covers that ground in more detail than fits here. Ask the recruiter which flavor your specific loop tests before assuming either page covers all of it.
Less often than a general engineering loop, and it varies more by company than most other parts of this process. Some vendors run a light scripting round, Python or a Terraform module, more common at companies where the SA also does implementation work post-sale. At consultancies and enterprise vendors leaning pre-sales, coding rarely appears at all, and the loop is almost entirely design, communication, and judgment.
Most loops run 4 to 7 weeks from application to offer, a bit longer than a typical cloud architect loop because the stakeholder round often needs a specific person's calendar, an actual director or VP sitting in, rather than just another engineer. That scheduling constraint is usually the slowest part of the whole process, not the technical evaluation itself.
Experience matters more for the parts of the loop that actually decide the offer, requirement mapping, the stakeholder round, cost modeling. A certification helps you move faster through the fundamentals screen and signals baseline platform literacy on a resume, which matters for getting the interview in the first place, but it doesn't substitute for having actually run a design review or defended a cost number to a real stakeholder before.
No, but it changes what you should emphasize. An internal architect with no direct customer exposure can still prepare for the stakeholder round by finding the closest equivalent they've actually done, presenting to a VP, a budget owner, or a cross-functional team that didn't share the technical context, and reframing that experience honestly rather than inventing a pre-sales history that isn't there.
Vertical scaling means giving a single machine more resources: more CPU, more RAM, a faster disk. Horizontal scaling means adding more machines and spreading the load across them. Vertical scaling is simpler because your application code often doesn't need to change at all, but it has a hard ceiling. At some point you run out of bigger instance types, and even before that you're paying a steep price premium for the largest machines in a cloud provider's catalog.
Horizontal scaling has no practical ceiling, but it forces you to solve problems vertical scaling lets you ignore: session state has to live somewhere shared instead of in process memory, database connections multiply per node, and you need a load balancer and usually service discovery. It also changes your failure model. A single beefy vertical box is a bigger single point of failure than ten smaller boxes, but ten boxes means ten times the chances something small goes wrong.
In practice I pick vertical scaling first for anything stateful and hard to redesign, a legacy monolith backed by one database, a batch job with a tight deadline, anything where the team doesn't have the bandwidth to re-architect right now. I reach for horizontal scaling once traffic is unpredictable, once uptime during a single node failure matters, or once the vertical option has already priced itself out. Most real systems end up doing both, a handful of appropriately sized nodes, scaled out, rather than either extreme.
Medium questions
21Fast and reliable aren't requirements, they're feelings, and the job is converting them into numbers before you draw anything. Push for a specific latency target (p50 versus p99 matters, and stakeholders usually mean p99 without knowing the term exists), an actual availability number (99.9% and 99.99% are a full order of magnitude apart in what they cost to build), and what "reliable" is protecting against specifically, a full region outage or just one flaky dependency.
Most of the real design decision happens in this conversation, not at the whiteboard. A candidate who jumps straight to a load balancer and a database replica without extracting these numbers first is answering a question nobody actually asked.
Ask about the failure they're most afraid of before asking about the feature they want. "What happens today when this breaks" surfaces more real information than "what do you need it to do," because people can describe pain from memory in a way they usually can't describe a spec from imagination.
I'll also name a rough option early, even a wrong one, since stakeholders are often much better at reacting to a strawman (no, we don't care about that part, but this other thing matters a lot) than generating requirements from a blank page.
Scope the POC to prove the riskiest assumption, not to build a smaller version of the whole system. If the real risk is whether a specific database can handle the query pattern at scale, the POC is a load test against that one component with production-shaped data, not a full end-to-end demo with a polished UI wrapped around it.
I'd tell the customer explicitly which parts of the POC are throwaway and which parts are meant to survive into production, since a POC that quietly becomes the production system without anyone deciding that on purpose is one of the more common ways a solutions architect's reputation takes a hit six months later.
The team's existing skill set decides more of this than a feature comparison does. A platform team that's spent three years deep in Azure AD and.NET will ship a working system on Azure faster than the same team would on GCP, even if GCP's data tooling is a better theoretical fit, and time to a working system usually matters more than a marginal technical edge.
Data gravity is the second real factor. If the customer's data already lives in BigQuery, migrating the workload to sit next to it on GCP usually beats the egress cost and latency of pulling that data cross-cloud every time the new system needs it. Compliance requirements can override both of those, a customer locked into a specific FedRAMP or sovereign-cloud requirement doesn't get a real choice at all.
Yes, and I'd say so directly instead of pretending the technical merits are the only input. An existing enterprise agreement usually comes with committed spend, negotiated discounts, and support relationships that make switching cost real money even when the alternative platform is a better technical fit on paper.
I'd push back on a customer's preferred vendor if the technical gap is large enough to matter, a workload that's a genuinely bad fit for the platform they're committed to, not merely a slightly worse one. For a marginal difference I'd recommend staying inside the existing agreement almost every time, and I know some architects would call that leaving technical merit on the table.
Name the actual cost of the portability they're asking for before agreeing to build it. Full multi-cloud portability usually means avoiding every managed service that made the platform worth choosing in the first place, and most customers who ask for it haven't priced out what that costs in engineering time every single month afterward.
A more honest middle ground is keeping the application layer portable, containers, standard APIs, no platform-specific SDK calls baked into business logic, while accepting lock-in on the managed data services where the operational savings are real and ongoing. That's a harder sell than "sure, we'll make it fully portable," but it's the answer that holds up a year later.
Rehost (lift-and-shift), replatform, repurchase (swap for a SaaS equivalent), refactor, retire, and retain. Rehost is fastest and cheapest to execute but carries every architectural problem the workload already had onto new infrastructure. Refactor delivers the biggest long-term win at the highest near-term cost and risk.
Repurchase gets skipped in a lot of prep guides but comes up constantly in real migrations. A customer running a self-built CRM is often better served by moving to Salesforce than by re-architecting their own system in the cloud, and a solutions architect who only thinks in infrastructure terms misses that option entirely.
Tag audit first, you can't optimize spend by service category alone once an account has grown organically for a few years without consistent tagging discipline. Right-sizing compute usually finds the next meaningful chunk, instances provisioned for a peak load that stopped happening a year ago are more common than people expect. Reserved Instances or Savings Plans on the stable, predictable baseline typically nets another 10 to 15%.
Storage-class lifecycle policies are the easiest win most teams skip entirely, moving infrequently accessed data from standard S3 storage to Infrequent Access or Glacier on a schedule. It's often the single line item with the best effort-to-savings ratio of the whole exercise, precisely because it's boring enough that nobody gets around to it.
Compute is usually the smallest real line item once you count everything else, data egress (which can dwarf compute cost for a data-heavy workload moving cross-region or cross-cloud), the engineering hours to actually execute the migration, the training cost for a team learning a new platform, and the parallel-running cost of the old and new systems during a cutover window that always runs longer than planned.
I'd build the TCO model with a 3-year horizon at minimum, since a migration that looks expensive against a 6-month payback period often looks completely different against 3 years. A customer fixated on the compute sticker price is usually looking at the wrong horizon, not the wrong number.
The cheapest option per hour and the cheapest option overall aren't the same thing, and that gap is the whole conversation. Spot instances are 60 to 90% cheaper per hour but can be reclaimed with a short warning, so they're only actually cheap for interruptible work, batch jobs, stateless workers behind a queue, not anything holding user state.
For a stakeholder asking for "the cheapest option" without more context, I'd frame it as predictable baseline gets a Savings Plan commitment, elastic and fault-tolerant load gets spot, everything else runs on-demand until it's stable enough to commit to. Answering "just use spot everywhere" because it's the lowest hourly number is the wrong answer dressed up as the helpful one.
Centralized vault first, HashiCorp Vault, AWS Secrets Manager, or Doppler, with services fetching secrets at runtime through an authenticated call instead of reading an environment variable baked in at deploy time. Migrate service by service rather than declaring a hard cutover date across all 200 engineers' services at once, since a hard freeze is exactly the outcome a stakeholder is asking you to avoid.
Rotation and an audit trail come after the migration is underway, not before, since perfect rotation policy on top of hardcoded credentials that still exist elsewhere in the codebase is solving the wrong problem first. I'd sequence it as vault adoption, then short-lived credentials, then automated rotation, each step shippable without a freeze.
Translate the number into minutes first, 99.99% allows about 52 minutes of downtime a year, 99.9% allows about 8.7 hours. Most customers asking for 99.99% haven't actually decided they need the difference, they've just heard it's the better number.
Then translate the cost side. Each additional nine typically means multi-region active-active infrastructure, more sophisticated failover automation, and a meaningfully larger ongoing bill, not merely a configuration change. I'd ask what specific cost a minute of downtime represents to their business before agreeing to design for a number picked off a slide somewhere else.
Frame it as a question about the last real test, not a statement about their competence: "when did we last actually fail over to the DR environment, and what happened." Most of the time the honest answer is never, or long enough ago that the infrastructure has drifted since, and stakeholders usually reach that conclusion themselves faster when you ask rather than when you tell them.
I'd propose a scoped, low-risk first test, a partial failover during a maintenance window, not a full unannounced game day, since asking a customer to bet their production environment on an untested plan's first real run is a harder sell than a smaller first step that builds confidence toward the bigger one.
Show them what three nines actually buys versus five, in minutes of downtime and in dollars, side by side, rather than arguing the number in the abstract. A lot of SLA negotiations resolve once the customer sees the specific tradeoff written out, not because they change their mind about wanting reliability, but because they realize the number they asked for was aspirational rather than budgeted.
I'd also separate the SLA target from the internal design target. Designing for four nines internally while committing to three nines contractually gives you margin for the incidents that inevitably happen, and that gap is normal, not dishonest, as long as the contract reflects what you can actually guarantee.
Answer the spirit of the question before correcting the premise. If a VP asks "why don't we just add more servers" when the actual bottleneck is a database, I'd say "that would help with part of it, here's the specific piece that's actually constrained" rather than "that's not right."
The goal is redirecting toward the accurate mental model without making the correction the headline of the exchange. Most VPs aren't looking to be right about the technical detail, they're looking for confidence that someone in the room understands the problem well enough to be trusted with the budget.
Attach a specific cost to the risk the cheaper option accepts, beyond the price difference between the two. "Cheaper option saves $4,000 a month but carries a real chance of a multi-hour outage during our highest-revenue week" reframes the choice from a price comparison into a risk-adjusted one, and that's usually what stops a reflexive pick-the-cheaper-one response.
I'd also have an honest answer ready for when the stakeholder picks the cheaper option anyway and it goes wrong later, since that happens, and an architect who's never had that conversation go sideways probably hasn't presented very many real tradeoffs yet.
The strongest version of this answer quantifies the tradeoff in terms the stakeholder cares about and includes a real account of what happened when the argument didn't land cleanly, beyond the version where it worked. If a stakeholder says no anyway, the honest follow-up is whether you implemented their choice while documenting the risk in writing, escalated with data, or found a middle path that addressed their actual concern without the full cost.
Interviewers ask the follow-up specifically because a candidate who's never lost this argument probably hasn't made very many of them, and a polished story where everything worked out perfectly reads as rehearsed rather than real.
Push for at least one scoping call before committing to a number, even a short one, since a fixed-price quote built on an RFP document alone is a guess dressed up as a commitment. If the customer genuinely won't allow a scoping call before the quote, I'd quote a range with the assumptions stated explicitly, not a single number, so the eventual gap between the quote and the real scope has a documented reason instead of looking like a bait-and-switch six weeks in.
Write down what the POC proves, what it explicitly doesn't cover, and a hard end date before starting, and get the customer to agree to all three in writing, not just the first one. The most common failure mode isn't a customer acting in bad faith, it's scope drifting one reasonable-sounding request at a time until the POC has absorbed six weeks of unbilled work that was never part of the deal.
A specific tell worth naming out loud to a stakeholder mid-POC: if you're being asked to add production-grade error handling or a full authentication flow to something scoped as a proof of concept, that's production work wearing a POC's name.
Get the disagreement on the table explicitly rather than designing around it quietly. I'd run a session where each stakeholder states their requirement out loud in front of the others, since misalignment that's been happening in separate one-on-one conversations often resolves itself once everyone hears the conflicting asks side by side.
If they still can't agree after that, I'd design for the requirement with the higher cost of being wrong, a compliance requirement over a nice-to-have feature request, for instance, and document that the tradeoff was made explicitly, so the decision doesn't quietly become "the architect chose for us" in a stakeholder's memory six months later.
An API gateway sits at the edge of your system, in front of client traffic, and handles north-south concerns: authentication, rate limiting, routing to the right backend service, response caching, sometimes protocol translation from REST to gRPC. A service mesh sits inside the system, between your services, and handles east-west concerns: mutual TLS between services, retries, circuit breaking, and fine-grained traffic shaping like canary releases, usually implemented as a sidecar proxy next to every service instance.
The gotcha is that a lot of teams reach for a service mesh to solve a problem an API gateway would have fixed more cheaply. If the actual complaint is 'our services don't authenticate calls consistently' or 'we can't rate limit clients,' that's a gateway problem, and adding Istio or Linkerd on top of twenty services just to get mTLS is a lot of new operational surface, sidecar memory overhead, and a learning curve for the team that has to run it day to day.
I'd only recommend a service mesh once the team already has enough services that manual retry and circuit-breaker logic is duplicated everywhere, or once security requires mTLS between every service pair regardless of network trust boundaries. Otherwise a gateway plus a shared library for retries and timeouts gets you most of the benefit for a fraction of the operational cost. The two aren't mutually exclusive either. A common production pattern is a gateway for external traffic and a lightweight mesh internally once the service count justifies it.
Hard questions
9If all three genuinely satisfy the requirements, the requirements as stated are incomplete, and that's usually the real finding here before any recommendation. The tiebreaker is almost always one of total cost of ownership over a realistic time horizon, beyond build cost alone, operational burden on the team that inherits it, and how expensive each option is to reverse if it turns out wrong.
I'd present two of the three, not all three and not just one. Interviewers are checking whether you can narrow a field with judgment instead of dumping every option on the stakeholder and asking them to pick, which is what a junior architect does when they haven't formed an actual opinion yet.
I'd tell them the actual cost of the pause, rather than simply agree or refuse. A migration frozen mid-flight usually means running the old and new systems in parallel for longer than planned, which has a real dollar cost every week it continues, plus a real risk that the team's context degrades enough that resuming costs more than a month of lost time alone.
If the urgent project genuinely can't wait, I'd push for a narrower pause, freeze new migration work but keep the dual-running systems in a documented, known-stable state, rather than an open-ended freeze with no plan to resume. The stakeholder needs that tradeoff in writing before they decide, not after.
Scope first, what data, how many records, which customers, before anything else, because every subsequent decision depends on the answer and guessing wrong here compounds. Contain second, cut off the vendor's access or the specific integration if it's still live, then start internal communication (legal, security leadership, whoever owns the customer relationship) in parallel with, not after, containment.
Preserve forensics before you fix anything, logs, the vendor's incident notification, timestamps, since "we already cleaned it up" is a bad answer to a regulator asking what happened. Then start the regulatory clock deliberately. GDPR's 72-hour notification window to a supervisory authority starts from when you became aware, not from when the vendor tells you, and CCPA's "without unreasonable delay" language is vaguer but not a license to wait.
Identity-first authentication and continuous verification stay the same regardless of caller type, every request proves who or what it is, on every call, nothing gets a standing pass because it's already inside the network perimeter. Micro-segmentation limits blast radius the same way it always has.
What's genuinely new: an AI agent making API calls on a user's behalf doesn't fit cleanly into a human-identity model or a service-identity model. It needs scoped, short-lived, delegated credentials tied to the specific action a user authorized, not the agent's own standing identity, and a lot of zero-trust architectures built before 2025 simply didn't account for that caller type existing. I don't have great data yet on how many organizations have actually closed this gap versus still running agent traffic under an overly broad service credential, so treat this as a live risk, not a solved one.
Lead with the number and the risk, not the architecture. "This costs $4 million over 18 months, reduces our infrastructure risk from X to Y, and the alternative of doing nothing costs roughly $Z a year in the outages and manual workarounds we're already absorbing" is a stronger opening than any sentence containing the word microservices.
One analogy from a domain the CFO already understands does more work than a diagram, logistics, supply chain, real estate, whatever fits. And I'd present two options, not one, a faster and more expensive path versus a slower and cheaper one, since a single option framed as the only answer reads as either arrogance or a lack of alternatives considered, and a CFO's job is literally to weigh tradeoffs between options.
I wouldn't argue the open-source option is worse, because on pure capability it often genuinely isn't. I'd shift the comparison to total cost including the engineering time to operate, patch, and scale it themselves, since free software still needs someone accountable for keeping it running, and that person's salary is a real cost the prospect is currently attributing to the wrong side of the comparison.
For a prospect with a strong existing platform team, the open-source option might actually be the right call, and I'd say that directly if it's true, since credibility in a pre-sales conversation compounds across the relationship in a way one lost deal doesn't.
At that write volume you can't take a maintenance window and you can't afford a migration script that locks a table for even a few seconds. That alone would generate a backlog you'd spend hours draining. The approach I use is the expand-and-contract pattern run over multiple deploys, not one.
First deploy adds the new column or table alongside the old one, nullable, with no application code depending on it yet. Second deploy starts dual-writing, every write path writes to both the old and new shape, while reads still come from the old shape. Then a backfill job walks the existing data in small batches, well below any lock timeout, and writes it into the new shape, throttled so it doesn't compete with production traffic for I/O or replication bandwidth. Once the backfill finishes and a verification job confirms the two shapes agree on a sample or a checksum, a third deploy switches reads over to the new shape while still dual-writing. Only after that's been running clean for a few days do you stop writing to the old shape and drop it in a final deploy.
The part people skip is the verification step and the rollback plan at each stage. If you switch reads to the new shape and it turns out the backfill missed rows written during a brief window before dual-writing started, you want to catch that with a checksum job before customers do, and you want every one of those deploys to be independently reversible without needing a second migration to undo it. Doing it in one big deploy is faster to plan but means any bug forces an emergency rollback in the middle of a live incident instead of a quiet redeploy.
The fact that it's not reproducible in staging and the dashboards look normal usually means the metric you're watching is an average or a p50, and the real problem is a tail latency issue that a coarse aggregate hides. The first thing I'd do is pull p99 and p99.9 latency for that specific window, not the whole day, because a ten-minute daily spike gets averaged away entirely in a 24-hour p50 chart.
Same time every day is the biggest clue in the question. That pattern almost always points to something else on a schedule: a cron job, a batch export, a log rotation, a cache warming job, a scheduled autoscaling event, or a dependency's own scheduled job hitting a shared resource like a database or a NAT gateway. I'd check what else runs on that schedule before touching the service's own code at all, cross-checking against the infra's own cron and scheduler configs, not just the service's deploy history.
If nothing scheduled turns up, I'd look at connection pool exhaustion and garbage collection pauses next, both of which produce exactly this signature: fine most of the time, then a burst of timeouts that clears on its own. A JVM service hitting a full GC pause under memory pressure that only shows up once a day, when some other tenant's traffic pattern pushes it over a threshold, is a common real cause, and it won't show up in staging because staging never sees that combination of load. The fix is usually adding a metric nobody was capturing before, GC pause time or connection pool wait time, rather than assuming the existing dashboards would have caught it if it mattered.
The saga pattern breaks a distributed transaction into a sequence of local transactions, each in a different service, where every step has a corresponding compensating action that undoes it if a later step fails. Instead of a two-phase commit holding locks across every participant, which doesn't scale and doesn't work across service boundaries owned by different teams, each service commits its own step immediately, and the saga coordinator, or in a choreography-based saga the services themselves listening for events, walks backward through compensations if something downstream fails.
The uncomfortable part is what you asked: what happens when a compensating transaction fails. A saga's whole safety argument depends on compensations being reliable, but a compensation is still a network call to a service that could be down, and 'refund the payment' can fail for the same reasons the original charge could fail. In practice you handle this by making compensations idempotent and retriable with backoff, backed by a durable queue so a failed compensation is delayed rather than lost. But retries eventually run out, and at that point some sagas need a human in the loop, an alert that routes to on-call or an ops queue with enough context to resolve it manually, because there's no code path that guarantees eventual consistency against a downstream service that stays unavailable indefinitely.
The other decision to make early is that sagas only give you eventual consistency, and in the failure window before a compensation completes, other parts of the system can observe an inconsistent state, like an order marked confirmed while the payment is being reversed. If a customer-facing read can happen during that window, decide whether that's acceptable or whether that flow needs a synchronous check instead of a saga at all. Not every operation needs saga-level distribution. Sometimes the right answer is keeping the transaction inside one service's database boundary and avoiding the distributed transaction problem entirely.
Real-time scenario questions
7The six pillars, operational excellence, security, reliability, performance efficiency, cost optimization, and sustainability, are a checklist for catching what you forgot, not a design method on their own. In a real review I'd run the proposed design against each pillar and flag where it's weak on purpose (a startup's MVP is allowed to be weak on cost optimization if speed to market matters more right now) versus weak by accident (nobody thought about backup and restore at all).
Interviewers who ask this question are usually checking whether you know the difference between a deliberate tradeoff and a gap nobody noticed. Naming which pillar you're intentionally deprioritizing, and why, is a stronger answer than pretending a design is strong on all six.
Practically, no, not at the transport layer, and I'd say that in the interview rather than pretend otherwise. Most message queues guarantee at-least-once delivery, so the honest design goal is at-least-once delivery plus idempotent processing, an idempotency key on each order event, checked against a table of already-processed keys before an order gets created twice.
The outbox pattern solves the adjacent problem of writing to your database and publishing an event atomically. Write the event to an outbox table in the same transaction as the order, then a separate process reads the outbox and publishes to the queue, so a crash between the database write and the publish can't leave you with an order that exists but was never announced downstream, or an event published for an order that got rolled back.
Query isolation matters more here than storage isolation for most reporting workloads. A shared database with row-level security works fine for the typical tenant, but the one tenant with 10x the data can run a query that starves every other tenant's dashboard load, so I'd put a query timeout and a per-tenant resource quota in front of the shared pool regardless of which storage model you pick.
For the largest outlier tenants specifically, a separate read replica or a pre-aggregated summary table refreshed on a schedule usually solves the problem cheaper than moving that one tenant to fully isolated infrastructure, which is the instinct a lot of candidates jump to first.
Scenarios with an explicit business constraint layered on top of an otherwise standard design come up more here than in a straight system design loop, a cost cap, a compliance boundary, a named SLA, or a proof-of-concept scoping question. Straight infrastructure scenarios like multi-region failover or event-driven pipelines still appear, and LastRoundAI's system design interview questions page covers the general version of those in more depth than the business-constrained versions on this page.
Edge caching absorbs the overwhelming majority of requests, a CDN (CloudFront, Akamai, Fastly) serving popular content from a location close to the user, so the origin only sees a cache miss or a genuinely new asset. The interesting design decision is the origin shield layer sitting between the edge and the true origin. It collapses duplicate cache-miss requests from dozens of edge locations into one request to origin, protecting the origin from a thundering-herd problem the moment something goes viral.
The failure-mode question actually separates candidates: fail open (serve stale cached content if the origin is unreachable) or fail closed (show an error rather than risk serving wrong content). For a streaming product I'd fail open almost every time, a slightly stale thumbnail beats a blank screen, but I'd say that out loud as a choice, not assume the interviewer agrees with it by default.
Cache invalidation is the whole problem here, not the read path itself. A naive TTL cache trades correctness for speed in a domain where a stale price shown as current can cause a real financial mistake downstream, so I'd reach for event-driven invalidation instead. The moment the source price updates, a message fires and every cache layer downstream evicts or updates that specific key, rather than waiting out a TTL window.
Penny-precision matters for the data type itself too. Floating-point representation of currency is a well-known trap, and a candidate who mentions using a fixed-point or integer-cents representation instead of a float here is showing something a lot of otherwise strong system design answers miss entirely.
Active-active across two regions where both sides accept writes to the same record is the hardest version of this problem because you're fighting the CAP theorem directly. If both regions must stay available during a network partition between them, you cannot also guarantee every read sees the most recent write everywhere. So the first real decision is which conflicts you're willing to accept and how you resolve them after the fact, not whether conflicts can happen.
For data that tolerates it, I'd use conflict-free replicated data types or a last-writer-wins scheme built on a version vector or a Hybrid Logical Clock instead of wall-clock timestamps, because wall clocks drift between regions and silently corrupt ordering. For data where silent last-writer-wins is unacceptable, like a bank balance or an inventory count, I'd route writes for a given entity to a single home region based on a partition key, so you avoid the conflict at the write path instead of resolving it after the fact. That gives up true active-active for that entity but keeps the rest of the system active-active.
Where this actually breaks in production is the reconciliation job. Teams build the conflict resolution logic, test it with two or three conflicting writes, and then discover under load that conflicts can cascade: an update in region A resolves against a stale version from region B, which then re-triggers a resolution in region A, and you get an oscillation instead of convergence. The fix is making resolution idempotent and monotonic, so applying the same resolution twice never changes the outcome, and building an alert on unresolved conflict backlog age, not just conflict count, since a backlog that's growing slowly is a much bigger problem than a spike that clears itself.
Across 92 solutions architect mock rounds run through LastRoundAI's Interview Copilot between January and March 2026, the strongest predictor of a good outcome wasn't AWS service knowledge. It was whether the candidate asked about non-functional requirements (RTO, RPO, throughput, compliance) before jumping into a design, whether they attached a dollar figure to the tradeoff instead of describing it qualitatively, whether they ever rejected an option outright instead of hedging on all of them, whether they named a failure mode unprompted, and whether they actually changed register when the mock interviewer switched from a technical persona to an executive one.
That last one was the biggest gap. Candidates who nailed the technical rounds often kept using the same vocabulary and the same level of detail once the scenario shifted to a CFO character, and the copilot's live prompts had to nudge the same phrase repeatedly: lead with the number, not the diagram.
The stakeholder round is the one most prep guides shortchange, spending a paragraph on it after pages of AWS service comparisons. It's worth the opposite ratio: a week getting comfortable with Well-Architected Framework vocabulary, then several weeks actually rehearsing the CFO conversation and the cost-modeling questions out loud, since that's where a technically qualified candidate actually loses the offer.
How this list was built
Worth being straight about where these questions come from, because plenty of pages in this category are not. The set was compiled from a research pass across official documentation, vendor release notes, published engineering writing and public discussion of hiring processes, then cross-checked against the current version of each technology so nothing here describes behaviour that has since changed.
What that means in practice: these are the questions the material supports as reasonable and current for this role, not a transcript of any one company's loop. We have not sat in on your interview and we are not going to claim we have. Treat the list as well-sourced preparation rather than a leaked question bank, and expect your panel to phrase things their own way.
If you spot something out of date, tell us at contact@lastroundai.com and we will fix it.
Frequently asked questions
What questions should a solutions architect ask the interviewer?
Something that only applies to this team. Asking what the last thing they shipped was, or what the on-call rotation actually looks like, tells you more than a question about culture and signals that you were listening.
What does a solutions architect interview usually cover?
A mix of practical skill, judgement on trade-offs, and how you work with people who disagree with you. The technical portion tends to be scoped to what the team actually does rather than a generic syllabus, so read the job description closely.
How much experience do I need to interview as a solutions architect?
Less than most postings imply. Requirements are usually a wish list, and teams routinely hire people who meet most of it. What is rarely negotiable is being able to evidence the core skill with something you actually built or ran.
What should a solutions architect put on their resume for interviews?
Outcomes with numbers attached, and the specific tools you personally used rather than the team stack. Interviewers pick questions from your resume, so anything listed there should be something you are happy to be interrogated about.

