Cloud Engineer Top 100 Interview Questions
100 cloud engineer interview questions with structured answers, comparison tables, flow diagrams, worked calculations and runnable code. Covers cloud fundamentals, compute, storage, networking, identity and security, reliability and disaster recovery, cost optimization and architecture design, from the basics to scenario questions.
Questions 81-100 of 100
Q81.How do you decide how much capacity to commit to for a discount?
Commit to the capacity you are confident of using almost all the time, which is the steady baseline of your usage history, not the average or the peak. A commitment is paid whether or not you use it, so over-committing turns a discount into waste.
break-even utilization = committed price / on-demand price
What it means: with a 40% discount you pay 60% of the on-demand price for every committed hour, used or not. A committed unit saves money only if it would otherwise have run more than 60% of the time.
How to size it:
- Look at hourly usage over several months and find the level you never or rarely drop below.
- Account for planned changes: migrations, right-sizing or architecture changes that could shrink usage during the term.
- Prefer flexible commitments that apply across instance sizes, families or regions, which lowers the risk.
- Commit in tranches, adding more every few months rather than all at once, so commitments track the business.
- Monitor utilization and coverage of commitments monthly.
Leave variable and uncertain load on demand or spot capacity. The goal is not maximum coverage, but no wasted commitment.
Example
Usage over three months: never below 40 instances, a median of 55 and peaks of 90. On demand costs 0.20 per instance-hour, and a one-year commitment gives a 40% discount:
- Break-even:
0.12 / 0.20 = 60%, so a committed instance must otherwise run more than 60% of the year to pay off. - Committing 40 instances, the floor that always runs, saves
40 × 0.20 × 8,760 × 0.40 = 28,032a year with no waste. - Committing to the peak of 90 adds 50 instances that are needed only about 25% of the time. They would cost
50 × 0.12 × 8,760 = 52,560committed, against50 × 0.20 × 8,760 × 0.25 = 21,900on demand, a loss of 30,660. - The team commits 40 now and reviews in three months whether the floor has risen.
Q82.Write a script that finds untagged and idle resources in a cloud inventory export.
Load the inventory, apply a small set of clear rules to each resource, and print every finding with its monthly cost, so the biggest savings are obvious and each finding can be sent to an owner.
Rules worth starting with:
- Missing mandatory tags: without an owner, nobody can be asked whether a resource is needed.
- Idle virtual machines: average CPU below a few percent over two weeks.
- Unattached volumes: disks left behind after servers were deleted.
- Unused public addresses: reserved addresses attached to nothing, which many providers charge for.
Key points:
- Report, then act: idle by CPU is a strong hint, not proof. A server can be idle on CPU and still serve a nightly job, so confirm with the owner first.
- Use the real cost of each resource, so the report is ranked by money rather than count.
- Keep the rules in data or simple functions, so adding a rule does not mean rewriting the script.
- Run it on a schedule and send findings to the owning team, using the owner tag where it exists.
Most cost tools offer these checks built in. A short script is still useful for custom rules and for inventories gathered from several accounts.
Example
A checker over an exported inventory:
import json REQUIRED_TAGS = {"owner", "cost-center", "environment"} INVENTORY = json.loads("""[ {"id": "vm-101", "type": "vm", "monthly_cost": 140.0, "avg_cpu_14d": 37.5, "tags": {"owner": "payments", "cost-center": "cc-41", "environment": "production"}}, {"id": "vm-102", "type": "vm", "monthly_cost": 280.0, "avg_cpu_14d": 1.2, "tags": {"owner": "data"}}, {"id": "vm-103", "type": "vm", "monthly_cost": 70.0, "avg_cpu_14d": 0.8, "tags": {"owner": "web", "cost-center": "cc-12", "environment": "staging"}}, {"id": "vol-201", "type": "volume", "monthly_cost": 40.0, "attached": false, "tags": {"owner": "data", "cost-center": "cc-30", "environment": "production"}}, {"id": "vol-202", "type": "volume", "monthly_cost": 25.0, "attached": true, "tags": {}}, {"id": "ip-301", "type": "public_ip", "monthly_cost": 3.6, "associated": false, "tags": {"owner": "web"}} ]""") def findings(resource: dict) -> tuple[list[str], bool]: issues, idle = [], False missing = REQUIRED_TAGS - resource["tags"].keys() if missing: issues.append("missing tags: " + ", ".join(sorted(missing))) if resource["type"] == "vm" and resource["avg_cpu_14d"] < 3: issues.append(f"idle: {resource['avg_cpu_14d']}% average CPU over 14 days") idle = True if resource["type"] == "volume" and not resource["attached"]: issues.append("unattached volume") idle = True if resource["type"] == "public_ip" and not resource["associated"]: issues.append("unused public address") idle = True return issues, idle saving = 0.0 for resource in INVENTORY: issues, idle = findings(resource) if issues: print(f"{resource['id']:8} {resource['monthly_cost']:7.2f} " + "; ".join(issues)) if idle: saving += resource["monthly_cost"] print(f"possible monthly saving from idle resources: {saving:.2f}") # Output: # vm-102 280.00 missing tags: cost-center, environment; idle: 1.2% average CPU over 14 days # vm-103 70.00 idle: 0.8% average CPU over 14 days # vol-201 40.00 unattached volume # vol-202 25.00 missing tags: cost-center, environment, owner # ip-301 3.60 missing tags: cost-center, environment; unused public address # possible monthly saving from idle resources: 393.60The untagged, idle server
vm-102is the most valuable finding and the hardest to act on, because nobody is recorded as its owner.Q83.How do you set up budgets and cost anomaly alerts that people act on?
Set budgets per team or product, alert the owners directly with enough context to act, and tune alerts so they fire only for changes that matter. An alert sent to a shared inbox nobody reads is the same as no alert.
- Budget by owner: one budget per account, product or team, built from tags and account structure.
- Alert on forecasts, not only actuals: a forecast to exceed the budget at mid-month gives time to act; an actual overrun at month-end does not.
- Use several thresholds, such as 50%, 80% and 100%, with only the higher ones going to people who must respond.
- Turn on anomaly detection for daily spend per service and account, which catches sudden jumps that budgets miss, such as a runaway job on the third day of the month.
- Set a minimum impact, so a 300% jump in a service costing 2 a day does not page anyone.
- Route to the owning team's channel or ticket queue, with the account, service, top resources and the change since yesterday.
- Define the expected response, such as acknowledging within a working day and explaining or fixing within a week.
Review alert outcomes monthly. Alerts that never lead to action should be retuned or removed.
Q84.How do you calculate unit cost, and why is it more useful than total spend?
Unit cost divides the cost of running a product by the business output it delivers, such as cost per order, per active customer or per gigabyte processed. It shows efficiency, while total spend mostly reflects growth.
unit_cost = total cost of the product / units of business output
What each term means:
- Total cost of the product: its direct cloud costs from tags and accounts, plus a fair share of shared costs such as networking and security tools.
- Units of business output: a metric the business already tracks and cares about, such as orders completed or monthly active users.
Why it beats total spend:
- A rising bill can be good news if the business is growing faster than costs.
- It connects engineering work to business value: an optimization that cuts cost per order is easy to explain.
- It makes forecasts realistic: expected growth in orders times cost per order gives next year's budget.
- It allows fair comparisons between products of different sizes.
Choose the unit carefully and keep it stable. A metric that changes definition every quarter makes the trend meaningless.
Example
Two months of an online store's platform costs:
- Month one: 120,000 in cloud costs for 2,000,000 orders, so
120,000 / 2,000,000 = 0.060per order. - Month two: after a marketing campaign, 150,000 for 3,000,000 orders, so
150,000 / 3,000,000 = 0.050per order. - Total spend rose by 25%, which looks alarming on its own.
- Cost per order fell by
(0.060 − 0.050) / 0.060 ≈ 17%, because caching and right-sizing work let the platform absorb 50% more orders for only 25% more cost.
Q85.The cloud bill jumped 40% this month. How do you find the cause?
Break the increase down until it points at specific resources, find the day it started, and match that to a change. Most jumps come from a small number of causes.
- Slice the bill by service, account, region and usage type, and compare with last month. The increase usually concentrates in one or two lines.
- Find the start date with daily cost data, then look for deployments, configuration changes or traffic events on that day.
- Drill to resources using tags and resource-level cost data.
- Check the usual suspects: data transfer and NAT processing, forgotten test environments, logging volume, autoscaling that never scales in, storage growth, expired commitment discounts, and unknown resources in unused regions, which may mean leaked credentials.
- Fix it, confirm the daily cost returns to normal, and estimate the total impact.
- Prevent a repeat with an anomaly alert or guardrail for that specific cause.
flowchart TD A["Bill up 40%"] --> B["Break down by service, account and usage type"] B --> C["Find the day the increase started"] C --> D["Match to deployments and changes"] D --> E{"Unknown resources or regions?"} E -->|yes| F["Treat as a possible security incident"] E -->|no| G["Fix the cause with the owning team"] G --> H["Add an alert or guardrail"]Example
How one 40% jump was traced:
- By usage type, almost all of the increase was NAT gateway data processing, up from 900 to 14,000 for the month.
- Daily data showed it started on the 6th, the day a new service went live.
- The new service pulled large container images and dependencies from public internet sources on every start, and it scaled up and down dozens of times a day. Every download crossed the NAT gateway.
- The fix added a private image registry cache and a private endpoint for object storage, so traffic no longer crossed the NAT. Daily NAT cost returned to its previous level.
- An anomaly alert on NAT processing per account was added.
Q86.How does choosing serverless or always-on compute change cost at different traffic levels?
Serverless charges per request and per unit of execution time, so it costs almost nothing at low traffic and grows linearly. An always-on server costs the same every hour, so it is expensive at low traffic but cheaper per request at high, steady traffic.
serverless monthly cost = requests × price_per_request + requests × duration_s × memory_GB × price_per_GB_secondbreak-even requests = server monthly cost / serverless cost per request
What each term means:
- duration_s and memory_GB: execution time and allocated memory, which together are billed in gigabyte-seconds.
- server monthly cost: the always-on instance, or the minimum fleet that gives the redundancy you need.
When to use it: to choose a compute model, and to know the traffic level at which to move a workload. Also count what the formula leaves out: servers need patching and scaling work, while serverless adds cold starts and execution limits.
Below break-even, serverless is cheaper and needs no capacity planning. Well above it, steady traffic usually belongs on servers or containers, possibly with committed pricing.
Example
Using illustrative prices: 0.20 per million requests, 0.0000166667 per gigabyte-second, and a small server at 0.08 per hour. Each request runs for 200 ms with 0.5 GB of memory:
- Serverless cost per million requests:
0.20 + 1,000,000 × 0.2 × 0.5 × 0.0000166667 ≈ 0.20 + 1.67 = 1.87. - Server cost per month:
0.08 × 730 = 58.40. - Break-even:
58.40 / 1.87 ≈ 31.3million requests a month, about 12 requests per second on average. - At 2 million requests a month, serverless costs about 3.73, against 58.40 for the server.
- At 300 million requests a month, serverless costs about 560. A few servers handling that load at 116 requests per second would cost far less, even running two for redundancy.
Q87.How do queues, publish-subscribe topics and event streams differ?
A queue hands each message to one consumer, which removes it when done. A topic in publish-subscribe pushes each message to every subscriber. An event stream keeps an ordered, retained log that many consumers read independently and can replay.
Queue Publish-subscribe topic Event stream Each message goes to one consumer Each message goes to all subscribers Consumers read the log at their own pace Kept until processed and deleted Usually not kept after delivery Kept for a set period and replayable Best-effort order, or strict in special modes Usually no ordering Ordered within each partition Add workers freely Add subscribers Parallelism limited by the number of partitions Used for background jobs and work distribution Used for fan-out notifications Used for event history, analytics and many independent readers When to use which:
- Queue to spread work across a pool of workers, such as resizing uploaded images.
- Topic when one event must trigger several independent actions, such as "order placed" notifying email, billing and analytics. Often each subscriber gets its own queue for durability.
- Stream when consumers need history, replay or ordering, or when new consumers must read past events.
All three usually deliver at least once, so consumers must handle duplicates safely.
Q88.What does an API gateway do in a cloud architecture?
An API gateway is the managed front door for APIs: it receives client requests, applies common policies such as authentication and rate limits, and routes each request to the right backend service. Teams then do not have to reimplement those concerns in every service.
Typical responsibilities:
- Routing: map paths and methods to backend services, functions or other APIs.
- Authentication: validate tokens or API keys before requests reach backends.
- Rate limiting and quotas: per client, protecting backends from overload and abuse.
- Request validation: reject malformed requests early against a schema.
- TLS termination and custom domains.
- Transformation: small changes to headers or payloads, such as adding a request ID.
- Caching of safe, repeatable responses.
- Versioning and staged rollouts of API changes.
- Observability: access logs, metrics and tracing headers for every call.
What to keep out of it: business logic. A gateway full of complex transformations and conditions becomes a fragile, hard-to-test monolith that every team depends on.
The gateway is on every request path, so treat it as critical infrastructure: deploy it across zones, monitor its latency and errors, and manage its configuration as code.
Q89.What should you monitor for a cloud workload beyond CPU and memory?
Monitor what users experience and what the cloud platform can do to you: latency, errors and saturation of the service, plus quotas, throttling, managed-service health and cost. CPU and memory alone miss most real incidents.
Latency percentiles and error rates Queue depth and oldest message age Database connections, replica lag and storage Quota usage and API throttling What users actually experience How far behind asynchronous work is Common managed-service bottlenecks Limits that silently block scaling and deployments Dependency health and timeouts Certificate and credential expiry Backup success and restore tests Daily cost per service Third-party and internal services you rely on Predictable outages that are easy to prevent Whether recovery would work Runaway resources and leaked credentials Making monitoring useful:
- Alert on symptoms, such as error rate and latency against objectives, and use resource metrics for diagnosis rather than paging.
- Use synthetic checks from several regions to see outages before users report them.
- Watch provider status signals, such as health event notifications for your accounts, and correlate them with your own metrics.
- Tag metrics and alerts by owner and service, so they reach the right team.
Q90.What is the CAP trade-off, and how does it affect choosing a cloud database?
The CAP theorem says that when a network partition splits a distributed database, it must choose between consistency, where every read sees the latest write, and availability, where every request gets an answer. Partitions cannot be ruled out in distributed systems, so the real choice is what happens during one.
Consistency first Availability first Rejects or delays some requests rather than return stale or conflicting data Keeps answering, possibly with stale data, and reconciles later Suits account balances, inventory reservations, unique usernames Suits shopping carts, social feeds, session data, product views How it shows up when choosing a database:
- Single-region relational databases with synchronous standbys favor consistency; during a failover, writes pause briefly.
- Globally distributed databases often offer a per-request choice between strong and eventual consistency, trading latency and availability for freshness.
- Multi-region active-active writes usually mean eventual consistency and a conflict-resolution rule, such as last write wins or merging.
Even without a partition, there is a constant trade-off between latency and consistency: strong consistency across regions means waiting for distant replicas. Choose per data type, not per system, since one application often needs both.
Q91.How do you migrate a production database to the cloud with minimal downtime?
Copy the bulk of the data while the source keeps running, keep the copy continuously in sync with change data capture, and then cut over in a short, rehearsed window with a way back.
- Assess: size, change rate, engine compatibility, dependencies and the acceptable downtime.
- Prepare the target with the schema, users, parameters and network connectivity from the source.
- Full load: copy existing data while the source stays live.
- Continuous replication: stream ongoing changes from the source's transaction log until lag is near zero.
- Validate: compare row counts and checksums, and run the application's test suite against the target.
- Cut over: stop writes on the source, wait for replication to catch up, switch connection settings and start writes on the target.
- Keep a rollback path: reverse replication from the target to the source for a period, or a tested plan to switch back.
flowchart LR A["Source database live"] --> B["Full load to target"] B --> C["Continuous change replication"] C --> D["Validate data"] D --> E["Stop writes and drain lag"] E --> F["Switch application to target"] F --> G["Reverse replication for rollback"]Rehearse the cutover in staging with production-sized data. The rehearsal finds slow steps and surprises before they cost downtime.
Example
Moving a 2 TB order database:
- The full load took 10 hours on a Saturday, while the shop stayed open.
- Change replication then ran for a week, with lag mostly under 5 seconds.
- Validation compared row counts for all 140 tables, plus checksums for the 12 largest, and found one table whose replication had stopped on an unsupported column type. It was fixed and reloaded.
- On cutover night, writes stopped at 02:00, lag reached zero in 40 seconds, and the application switched at 02:04. The checkout was unavailable for about 4 minutes.
- Reverse replication ran for two weeks as a safety net, then the source was retired.
Q92.How do you design a static website for users around the world?
Store the site's files in private object storage and serve them through a content delivery network with TLS, so users load pages from a nearby edge location and the storage is never exposed directly.
flowchart LR A["Users worldwide"] --> B["DNS with custom domain"] B --> C["Content delivery network with TLS"] C -->|cache miss| D["Private object storage origin"] E["Build pipeline"] -->|upload and invalidate| DKey decisions:
- Private origin: only the content delivery network may read the bucket, through its own access identity or signed requests.
- Caching: file names with content hashes, such as
app.3f9a1c.js, get long cache lifetimes, while HTML gets short ones so new releases appear quickly. - Deployment: the pipeline uploads new assets first, then HTML, then invalidates cached HTML paths.
- TLS and headers: a managed certificate on the custom domain, plus security headers added at the edge.
- Edge logic: small edge functions handle redirects and clean URLs without any servers.
- Protection: a web firewall and rate limits at the edge if forms or APIs are involved.
This design has no servers to patch, scales automatically, and usually costs very little. Dynamic features go into separate APIs the page calls.
Q93.What are the trade-offs of a multi-cloud strategy?
Multi-cloud can reduce dependence on one provider and give access to unique services, but it multiplies skills, tooling, security work and data transfer costs. It pays off when there is a specific, concrete reason, not as a general hedge.
Resilience Lock-in and negotiation Best service per job Regulation and customers Benefit: survive a whole provider's outage Benefit: more leverage on pricing Benefit: use a unique service where it is clearly better Benefit: meet a requirement for provider choice or location Cost: few workloads are built to fail over between providers Cost: lowest-common-denominator designs give up each provider's best services Cost: integration and data movement between providers Cost: compliance evidence needed for several platforms Skills and tooling Networking and data transfer Security posture No direct benefit No direct benefit No direct benefit Cost: teams must be expert in two or more platforms Cost: cross-provider traffic is billed as internet egress Cost: identity, logging and guardrails duplicated and kept consistent When it makes sense:
- A clear need, such as a customer or regulator requiring a second provider, or a capability only one provider offers.
- Independent workloads placed on different providers, which is far simpler than one application spanning both.
- Portable layers, such as containers and infrastructure code, where they reduce real switching costs without blocking managed services.
Q94.How do you design logging for many accounts so security and operations teams can search it centrally?
Collect logs from every account into central, organization-level destinations: a locked archive for audit and security logs, and searchable platforms for security and operations, with consistent formats and clear access rules.
flowchart LR A["Workload accounts"] --> B["Organization-wide collection"] B --> C["Log archive account, write-once"] B --> D["Security analytics platform"] B --> E["Operations search platform"] C -->|long-term retention| F["Cold storage tiers"]Design points:
- Organization-wide audit logging that member accounts cannot disable, delivered to a dedicated archive account.
- Write-once storage for audit logs, with access limited to a small security group.
- Standard formats and fields: timestamps in one zone, request IDs, account, service and environment, so searches work across sources.
- Separate destinations by purpose: the security team needs audit, network and identity logs, while operations teams need application and platform logs. Both can receive copies.
- Control cost: filter debug noise at the source, sample high-volume logs where acceptable, and move old logs to cheap storage.
- Retention by type, set by investigation needs and regulation.
- Monitor the pipeline itself, alerting when an account or source stops sending.
Q95.Design a highly available three-tier web application in the cloud.
Spread every tier across at least three zones, keep the web and application tiers stateless behind load balancers with autoscaling, and use a managed database with a synchronous standby, so the loss of any server or zone causes no outage.
flowchart TD A["Users"] --> B["DNS and content delivery with web firewall"] B --> C["Load balancer across 3 zones"] C --> D["Web and app servers, autoscaled, private subnets"] D --> E["Cache cluster"] D --> F["Managed database primary"] F -->|synchronous| G["Standby in another zone"] F -->|asynchronous| H["Read replica"] D --> I["Object storage for uploads"]Key decisions:
- Edge: static content from a content delivery network; a web application firewall in front.
- Load balancing: health checks remove failed instances; TLS terminates at the load balancer.
- Compute: stateless instances in private subnets across zones, with capacity to survive losing one zone.
- State: sessions in the cache or signed tokens; files in object storage.
- Data: managed database with automatic failover to the standby, read replicas for heavy reads, and point-in-time backups copied to another account.
- Networking: one NAT gateway per zone and private endpoints for cloud services.
- Operations: infrastructure as code, rolling or blue-green deployments, dashboards and alerts on latency and errors.
Trade-offs: three zones and spare capacity raise cost, and a multi-region design would add further protection against a regional outage at much greater cost and complexity.
Q96.Design an event-driven pipeline for processing files that users upload.
Let users upload directly to object storage, have each new file trigger an event onto a queue, and process files with scalable, idempotent workers that write results and notify the user, with failed files set aside for inspection.
flowchart LR A["Client"] -->|upload with signed URL| B["Upload bucket"] B -->|object created event| C["Queue"] C --> D["Workers or functions"] D --> E["Processed files bucket"] D --> F["Metadata database"] D --> G["Notify user"] C -->|after repeated failures| H["Dead-letter queue"]- Upload: the API issues a short-lived signed URL, so large files go straight to storage without passing through application servers.
- Trigger: the storage service publishes an event per new object onto a queue, which buffers bursts.
- Process: workers scan for malware, validate the file type, then transform it, such as creating thumbnails or extracting text.
- Record: results go to a separate bucket, and status and metadata go to the database.
- Handle failures: retries with backoff, then a dead-letter queue and an alert.
Design points:
- Idempotent workers: events can be delivered twice, so key outputs by the input file's identifier.
- Scale on queue depth, with limits that protect the database.
- Lifecycle rules to delete raw uploads after processing, and to expire abandoned uploads.
Example
How the pipeline handles a bad file:
- A user uploads a 40 MB file named
report.pdfthat is actually a damaged archive. - The worker's content check fails, so it records the error and lets the message return to the queue.
- After 3 attempts with backoff, the message moves to the dead-letter queue and an alert reaches the on-call channel.
- The user's upload page shows "We couldn't read this file" from the status in the database, while other uploads keep flowing.
- An engineer inspects the dead-letter message the next morning, adds a clearer validation message, and replays the remaining messages after the fix.
Q97.How would you migrate a monolithic application on physical servers to the cloud in phases?
Move it first with minimal change, so the data center can be exited and the team learns the platform, then modernize step by step around a working system rather than in one big rewrite.
flowchart LR A["Assess and map dependencies"] --> B["Build landing zone"] B --> C["Rehost or replatform"] C --> D["Stabilize and optimize"] D --> E["Extract services one at a time"] E --> F["Retire monolith parts"]- Assess: map servers, dependencies, data flows, licensing and performance baselines.
- Prepare: build the landing zone, network connectivity to the data center, and identity.
- Move: rehost the application servers onto virtual machines, and replatform the database onto a managed service, which is often the biggest quick win.
- Stabilize: monitoring, backups, autoscaling where possible and right-sizing based on real cloud metrics.
- Modernize gradually: route specific functions to new services behind a facade, so new code replaces parts of the monolith over time while the old code keeps serving the rest.
- Retire: remove each replaced part of the monolith and, finally, the data center contracts.
Each phase delivers value on its own and has a rollback plan. A big-bang rewrite delays all value until the end and carries the highest risk of failure.
Q98.Users in one country report slow page loads. How do you investigate?
Confirm the slowness with data from that country, break each page load into its stages to see which one is slow, then follow that stage to its cause: DNS, the network path, the content delivery edge or the origin.
- Confirm and measure: use real-user monitoring or synthetic tests from that country, and compare with other regions.
- Break down the timing: DNS lookup, connection, TLS handshake, time to first byte and download time.
- Check edge routing: which edge location and which origin region serve those users. Misrouting to a distant region is common.
- Check caching: a low cache hit ratio in that country sends every request back to the origin.
- Check the network path: a specific internet provider or peering problem shows up as slowness on only some networks.
- Check the origin: server time for requests from that country, such as region-specific data or personalization.
flowchart TD A["Slow loads reported in one country"] --> B["Confirm with real-user and synthetic data"] B --> C{"Which stage is slow?"} C -->|DNS or connect| D["Check DNS routing and network paths"] C -->|time to first byte| E["Check cache hit ratio and origin region"] C -->|download| F["Check asset sizes and edge location"]Example
Tracing slow loads in one country:
- Real-user data showed a median time to first byte of 1.9 seconds there, against 0.3 seconds elsewhere.
- Most of the delay came on HTML requests, which were cache misses travelling to the origin region on another continent.
- The cache hit ratio in that country was 8%, against 85% elsewhere. A new localization feature added a
Varyheader on a cookie that differed per visitor, so every visitor got a separate cache entry. - Moving the language choice into the URL path removed the cookie variation. The hit ratio rose to 80% and the median time to first byte dropped to 0.35 seconds.
Q99.How should you explain a cloud project you personally worked on?
Structure it as a short story: the situation, what you personally did and decided, the measurable result, and what you learned. Interviewers want to understand your judgment, not hear a list of services.
- Situation: the business problem and its constraints, such as a data center contract ending, a cost target or reliability problems.
- Your role: what you owned, distinct from what the team did.
- Decisions: the options you considered and why you chose one, such as managed database versus self-managed, or which migration strategy.
- Execution: the hardest problem you hit and how you solved it.
- Results: numbers wherever possible, such as "monthly cost fell 35%", "deployment time went from two hours to ten minutes" or "no outages during cutover".
- Reflection: what you would do differently and what you carried into later work.
What the interviewer is listening for:
- Trade-off thinking across cost, reliability, security and speed.
- Ownership and honesty, including mistakes and how you recovered.
- Whether you can explain technical choices to non-specialists.
- Awareness of operations after launch, not just the build.
Prepare two or three stories, such as a migration, an incident and a cost optimization, each about three minutes long.
Q100.How do you handle a disagreement about using a managed service versus building it yourself?
Turn the disagreement into a shared comparison against agreed criteria, such as total cost, team effort, reliability, flexibility and lock-in, then decide, record the reasoning and set a point to revisit it.
- Understand each position: what each person is optimizing for, such as control and lower fees, or speed and less operational work.
- Agree on criteria and weights before comparing options, so the discussion is about the problem rather than preferences.
- Estimate total cost of ownership: include engineering time to build, patch, scale, secure and run on call, not only the service fee.
- Test the uncertain parts: a short proof of concept answers questions such as "can the managed service meet our latency" with data.
- Decide and record it in an architecture decision record with the trade-offs accepted.
- Set revisit triggers, such as a cost threshold or a missing feature, so the decision is not permanent by default.
What the interviewer is listening for:
- That you value data over opinion and can disagree respectfully.
- Awareness that self-managed systems carry hidden operational costs, and managed services carry limits and lock-in.
- That once a decision is made, you commit to it, even if it was not your preference.