cswork / libraryOpen practice workspace

Interview guides · Beacon Consulting

Beacon Consulting Software Engineer Interview Guide

Beacon Consulting Software Engineer interview guide: four reported rounds, troubleshooting and diagram questions, behavioral prep and a 7-day plan.

The 60-second brief

Beacon Consulting is described by candidates as a firm with a product suite and a base of global clients. The Software Engineer role reported for it sits close to those products: keeping them stable and supporting them, whether the work is internal tooling or direct product support. Candidates describe responsibilities that include working incidents to a long-term fix alongside engineering and product teams, writing and maintaining technical documentation such as system diagrams and troubleshooting playbooks, and monitoring systems to spot failure points early. The listed requirements mention software engineering fundamentals, system architecture and diagramming, and a production support or operations background, with cloud infrastructure, automated testing frameworks and incident management tools as extras.

This guide is for engineers preparing for the Software Engineer loop at Beacon Consulting, particularly people whose background mixes development with production support or operations. It covers the four reported rounds, the reported questions on diagrams, performance bottlenecks, distributed-system debugging, root cause analysis, task prioritization and learning a technology under pressure, and a plan that turns them into rehearsed, spoken answers. Candidates describe the typical profile as three or more years in technical roles where reliability mattered.

Candidates report four rounds over roughly three to five weeks: Technical Screening, Discussion with Team Leads, Peer Interaction and Professional Background Discussion. The reported questions are open-ended operational scenarios rather than algorithm puzzles.

Focus areas

  • Software Engineering
  • Operations Engineering / Product Support
  • Leadership (Lead Operations Engineer)

Overview

Despite the title, candidates describe this as a software engineering job with a heavy operational side. The reported responsibilities are about resolving incidents, documenting systems with diagrams and playbooks, and watching for failure points before users see them. That shapes the loop: the reported questions ask how you diagnose and communicate, not how you invert a binary tree. Your preparation should centre on process answers you can give out loud, each backed by something you actually did in production.

The reported technical questions fall into a few families. One asks for a single line diagram on the spot. Several ask for a troubleshooting method: a production performance bottleneck, a complex issue in a distributed system, and the root cause of a system failure. One asks how you prioritize when several serious issues land together, and one asks about learning a new technology fast to fix an urgent problem. Each family rewards a fixed skeleton you have rehearsed, so that on the day you spend your attention on the specifics of the scenario instead of inventing a method.

The later rounds shift to people and experience: a conversation with team leads about contributing to ongoing projects, a peer round about teamwork and collaboration, and a background discussion about how your experience fits operational work. Treat every item on your resume as something you will have to defend with decisions, trade-offs and results. If you have used cloud infrastructure, automated tests or incident management tooling, be ready to say specifically how, since those are the listed extras.

The Beacon Consulting interview process

Candidates report these four rounds, in this order, over about three to five weeks. Treat the descriptions as what past candidates describe, not a published process.

Technical Screening

Candidates describe Technical Screening as an initial assessment of technical skills and how you apply them in practice. The reported technical-domain questions, such as producing a single line diagram and troubleshooting a production performance bottleneck, are the best guide to what a technical stage may touch. Approach it by having a fixed troubleshooting sequence and a way of drawing a system that you can start immediately, and by talking through your reasoning as you go.

What to demonstrate

  • Practical application of software engineering skills to real systems
  • Ability to structure a troubleshooting approach rather than guess
  • Ability to represent system flows visually

How to prepare

  • Draw, by hand, the architecture of a system you have run in production: one box per component, labelled arrows for data direction, and marks where it can fail.
  • Write a troubleshooting checklist you can recite: symptom, recent changes, metrics and logs, resource saturation, hypothesis, bisect, fix, verify.
  • Work through the reported single line diagram and production bottleneck questions aloud so the first two minutes of each are automatic.

Discussion with Team Leads

Candidates describe a Discussion with Team Leads as direct conversation with the people who run ongoing projects, aimed at judging how you could contribute to them. Expect to be asked how you debug distributed problems and how you order competing issues. Approach it as a working conversation: give structured answers, anchor them in past projects, and ask your own questions about the work.

What to demonstrate

  • Potential to contribute to ongoing projects
  • Debugging method for multi-service problems
  • Judgement in ordering competing operational issues

How to prepare

  • Build a prioritization answer around severity, blast radius, reversibility and who is blocked, and rehearse it with a concrete example of two incidents at once.
  • Prepare two project stories, each with the problem, your decision, the alternative you rejected and the measured result.
  • Write three questions for a team lead about the ongoing projects, how escalation works and what the support load looks like.

Peer Interaction

Candidates describe Peer Interaction as time with prospective teammates to see how you work with others. The reported root cause question and the story about learning a technology under pressure both involve collaboration, so prepare stories where other people were part of the picture. Approach it as a conversation between colleagues and keep your explanations plain.

What to demonstrate

  • Teamwork and collaboration
  • Ability to explain technical ideas in plain terms
  • Root cause methodology shared with a colleague

How to prepare

  • Write the learn-a-technology-fast story in first person: the deadline, how you scoped what to learn, how you limited risk, and the result.
  • Practise explaining a past failure to a non-technical listener in a few sentences, with cause, impact and fix.
  • Rehearse a story where you helped a teammate get unstuck without taking over, and one where you escalated well.

Professional Background Discussion

Candidates describe the Professional Background Discussion as a conversation about how your experience lines up with operational work. Reports note that any project on your resume can be explored in depth, including the challenges and decisions behind it. Approach it by preparing each resume item as a short case: context, your role, the hard decision, the trade-off and the outcome.

What to demonstrate

  • Fit between past experience and operational needs
  • Depth of ownership in resume projects
  • Impact of your code on reliability and maintenance

How to prepare

  • List every resume item and write, for each, one challenge, one decision you made and its measurable effect on stability or maintenance.
  • Inventory your production support experience: incidents you handled, runbooks you wrote and monitoring you added.
  • Be ready to say how you have used cloud infrastructure, automated testing and incident management tools, if you have.
  • Prepare an answer on how you make sure a fix does not introduce new regressions.

Where candidates lose points

Starting to sketch the single line diagram without asking what system it covers

Ask which system and which flow the diagram is for, state your assumptions, then draw one line per component with labelled direction and mark the points where it can fail or be monitored. A diagram with no stated scope looks like a guess.

Answering the performance bottleneck question with a fix before a diagnosis

Open with the symptom, the timeline of recent changes and the metrics you would check (latency, error rate, saturation of CPU, memory, connections and queues). Bisect with the cheapest test, and say how you would confirm the fix worked.

Treating distributed debugging and root cause questions as one vague 'check the logs' answer

Walk a request across services using a correlation or trace id, build a timeline, separate the trigger from the underlying cause, and name the contributing factors and the prevention step. Rehearse it on a real incident from your own work.

Answering the prioritization question with 'I would do the most important thing first'

Use criteria you can name: user impact, blast radius, whether the issue is getting worse, whether a mitigation is reversible and who can own each item. Say what you would pause, who you would tell and when you would escalate.

Describing resume projects only as features you built, with no operational angle and with 'we' throughout

Reports describe heavy operational support in this role, so bring reliability, maintenance and production support examples. Say 'I' for your own decisions, state the trade-off you made and the effect on stability.

Questions & practice

Merge partitioned event streams into one ordered feed with bounded lateness

Hard · k-way merge · watermarks · out-of-order streams

The read-model service consumes 64 log partitions carrying about 4,000 events per second in total. Each partition is ordered within itself, but partitions drift by up to 30 seconds, and the activity feed must present a tenant's events in occurred_at order. Produce the merge. State its complexity, the buffer it requires in events and in bytes, what happens when one partition is idle, and what you do with an event that arrives after you have already emitted its position. Payloads average 1 KB.

Approach

  1. Merge with a min-heap over the 64 partition heads keyed on (occurred_at, event_id): O(log P) per event and O(n log P) overall. The tie-break on event_id is what makes the output deterministic when two partitions carry the same millisecond, which matters because the feed is paginated and a non-deterministic order reorders pages under the reader.
  2. Emitting the heap head is only correct once every partition has produced everything up to that timestamp, so the emit condition is a watermark: the minimum across partitions of the highest occurred_at seen, less the allowed lateness. Events are held until the watermark passes them, which is what turns individually ordered streams into a jointly ordered one.
  3. Size the buffer from the lateness rather than guessing: 4,000 events per second times 30 seconds is 120,000 buffered events, and at 1 KB each about 120 MB of heap. That number is the real price of the ordering guarantee and belongs in front of whoever asked for it.
  4. Handle the idle partition explicitly, because it fails the feed rather than corrupting it: a partition with no traffic never advances its own maximum, so the watermark freezes and output stops entirely. Either every partition emits a periodic idle marker carrying the broker's current time, or the watermark falls back to wall clock for a partition silent beyond a threshold.

Follow-up

  • The lateness budget is raised to five minutes. What is the new buffer, and what besides memory changes?
  • The consumer restarts. Where does it resume from, and what does the feed look like for the first 30 seconds?

Canonicalise a request body into a stable idempotency fingerprint

Medium · parsing · canonicalisation · hashing

idempotency_key.request_fingerprint is a SHA-256 over the method, path and canonicalised body, and a retry whose fingerprint differs must be rejected with 422 rather than served the stored response. Write the canonicaliser. Bodies are JSON up to 256 KB nested at most 32 levels; clients vary key order, whitespace and unicode escaping, and some send 64-bit ids as JSON numbers. Produce a deterministic byte string such that semantically identical bodies match and any semantic difference does not. State your complexity and name two normalisations you refuse to perform.

Approach

  1. Parse once into a tree, then re-serialise under fixed rules: object keys sorted, array order preserved, one escaping convention, no insignificant whitespace. Parsing is O(n) and sorting keys is O(k log k) per object, so O(n log n) overall with O(depth) stack, and the 32-level cap is enforced during parsing because hostile nesting is how a canonicaliser becomes a stack overflow.
  2. Sort keys by their UTF-8 bytes and say why the obvious implementation is wrong in some runtimes: a default string comparison that orders by UTF-16 code units places surrogate pairs, meaning code points from U+10000 up, below U+E000 to U+FFFF, which is not UTF-8 byte order, so two services written in different languages disagree on the same document.
  3. Do not re-encode numbers through a double. IEEE-754 binary64 represents integers exactly only up to 2^53, so normalising a 19-digit id through a float changes it, and 1 against 1.0 cannot be reconciled without deciding whether they are the same value. Preserve the literal token, and require ids as strings at the API boundary if you want them comparable.
  4. Reject duplicate keys rather than picking one. JSON permits them and parsers disagree, most keeping the last, so any choice you make ties the fingerprint to a parser detail that the code handling the request does not necessarily share.

Follow-up

  • A client sends the same logical request with an extra field your API ignores. Same key, different fingerprint, so you return 422. Is that the right answer?
  • Where does the fingerprint get computed relative to request decompression and the body-size limit?

Diff a projection against the primary without per-row point reads

Hard · reconciliation · range hashing · throttling

The listing projection has drifted and some rows show a stale version. The primary holds 40,000,000 resource rows across 12,000 tenants while serving 1,200 writes and 14,000 reads per second. The obvious repair, reading each resource row and comparing its version against the projection, is correct and would eventually finish. Explain precisely why it is unacceptable here, then give a diff that finds the differing rows, state its complexity, and make it safe to run against a live primary. Replication lag is usually under 100 ms and is not bounded.

Approach

  1. Quantify the naive cost rather than calling it slow: 40,000,000 point reads at even 0.5 ms each is over five hours serialised, and the only lever is concurrency, which is exactly what you cannot spend. The primary's pool is sized for the write path, and 40,000,000 random reads evict the buffer cache that sustains the 85 percent cache hit rate, so the audit degrades the system it is auditing.
  2. Replace random access with one ordered pass per side. Both sides can be read in (tenant_id, resource_id) order, which is a sequential scan on each and a merge join in O(n) time and O(1) memory. For a dense diff that is the whole answer, and it reads the primary once instead of 40,000,000 times.
  3. For the expected sparse case, compare range hashes instead of rows: partition the key space, compute per range an order-independent aggregate over hash(resource_id, version), compare aggregates, and descend only into ranges that differ. With d differing rows and branching factor B, at most d ranges mismatch per level, so the drill-down examines O(d log_B(n/d)) ranges and reads full rows only in mismatching leaves.
  4. Aggregate with a sum modulo 2^64 or a multiset hash, never XOR. XOR is order-independent but self-cancelling, so two rows wrong in the same way, or a row duplicated on one side, leave the range aggregate matching and the range is declared clean.

Follow-up

  • The diff reports 900 stale rows. How do you decide between patching those rows and rebuilding the projection from resource_revision?
  • Same job, but the projection lives in a search index that cannot be scanned in key order. What changes?

Stop tag and share joins from fanning out a page

Medium · join fan-out · semi-joins · many-to-many

resource_tag is (resource_id, tag_id) with PK (resource_id, tag_id); resource_share is (resource_id, shared_with_user_id, permission). The tagged-and-shared listing inner-joins resource to both, filters tenant_id, tag_id = ANY($2) and shared_with_user_id = $3, orders by updated_at DESC and takes 50. Pages come back with fewer than 50 distinct resources and the total in the header is far too high. Explain the row multiplication, rewrite both the page query and the count query so each is correct, and name the index each one needs. PostgreSQL 16.

Approach

  1. Do the arithmetic against the predicates that are actually there. An inner join emits one row per matching child row, and both joins are filtered: tag_id = ANY($2) admits only the requested tags, shared_with_user_id = $3 admits one user's share rows. So a resource holding three of the requested tags and shared with $3 once yields three rows, not one — the multiplier is its count of matching tags times its share rows for that single user, and that second factor is 1 unless the table admits duplicate (resource_id, shared_with_user_id) pairs. LIMIT 50 then limits rows rather than resources, and COUNT(*) counts pairs — the header is the product, not the population.
  2. Reject DISTINCT as the fix. It deduplicates after the product has been built, so the planner must materialise and sort the fanned-out set before the LIMIT can apply, and it leaves any SUM or AVG in the same select list wrong.
  3. Rewrite both filters as semi-joins, keeping resource as the only row source: AND EXISTS (SELECT 1 FROM resource_tag rt WHERE rt.resource_id = r.resource_id AND rt.tag_id = ANY($2)) and the same shape against resource_share. A semi-join stops at the first match per resource and preserves the driving index order, so ORDER BY updated_at DESC, resource_id DESC LIMIT 50 still stops after 50 rows.
  4. Count with the same predicates and no join at all: SELECT count(*) FROM resource r WHERE r.tenant_id = $1 AND r.status = 'active' AND EXISTS (...) AND EXISTS (...). Nothing multiplies a resource, so the number is the population.

Follow-up

  • The filter changes from 'any of these tags' to 'all of these tags'. Rewrite it and state what it costs relative to the ANY form.
  • A resource can be shared with the same user twice under different permissions. Does your count change, and should it?

Find version gaps and relay lag with window functions

Medium · window functions · event tables · frame semantics

outbox_event holds event_id, aggregate_type, aggregate_id, aggregate_version, event_type, payload, status ('pending','published','dead'), attempts, created_at, published_at. A projection is missing rows and you must decide whether the relay skipped events or the consumer dropped them. Write three queries over the last seven days: one listing every aggregate_id whose published aggregate_version sequence has a hole, one giving per-day counts with a running total, and one returning the newest published event per aggregate. For each, say where the window function is evaluated relative to WHERE and LIMIT. PostgreSQL 16.

Approach

  1. Gaps: compute lead(aggregate_version) OVER (PARTITION BY aggregate_id ORDER BY aggregate_version) in a subquery, then filter next_version <> aggregate_version + 1 in the outer query. Window functions are evaluated after WHERE, GROUP BY and HAVING and before the outer ORDER BY and LIMIT, so the predicate cannot sit in the same WHERE clause and PostgreSQL 16 has no QUALIFY.
  2. Say what the seven-day filter does to the answer: it truncates every partition, so the first row per aggregate has no predecessor inside the window and a hole spanning the boundary is invisible. Widen the window, or join to resource.version as the authority for the true maximum.
  3. Running total: SELECT date_trunc('day', created_at) AS d, count() AS n, sum(count()) OVER (ORDER BY date_trunc('day', created_at) ROWS UNBOUNDED PRECEDING). An aggregate inside a window call is legal because grouping runs before windowing. The grouping key is unique per row here so ROWS and RANGE agree, but write the frame anyway — over ungrouped rows with tied timestamps the default RANGE frame pulls in every peer row and the total jumps.
  4. Newest per aggregate: DISTINCT ON (aggregate_id) ... ORDER BY aggregate_id, aggregate_version DESC is the cheap PostgreSQL-only form when an index matches that order; row_number() OVER (PARTITION BY aggregate_id ORDER BY aggregate_version DESC) = 1 is the portable form and needs a subquery for the same evaluation-order reason as the gap query.

Follow-up

  • Relay failover redelivers events. Does a duplicate break the gap query, and how would you detect one from this table alone?
  • Turn the gap check into a continuous monitor rather than a query someone runs after an incident. What does it watch?

Can you draft the Single line diagram right now?

Medium · Technical Domain Knowledge

Approach

  1. Open by settling which diagram is meant: in power engineering a single-line (one-line) diagram shows a three-phase system with one line per circuit; in software it can mean one simple flow diagram of a system. Ask, then commit to one.
  2. For the electrical version, sketch top to bottom: utility source or generator, main breaker, step-down transformer, main switchgear bus, feeder breakers, then the loads or distribution panels each feeder serves.
  3. Label what makes the diagram usable: voltage at each bus, transformer rating (kVA or MVA) and connection, breaker and fuse placement, and any backup path such as a generator with a transfer switch.
  4. For the software version, keep one box per component in the request path (client, load balancer, app tier, cache, database, queue, external dependencies), arrows showing the direction of each call, and a note on where state is kept.
  5. Close by naming the single points of failure the diagram exposes, such as one transformer or one database primary, and how you would add redundancy.

Follow-up

  • Where would you add redundancy so that losing one component does not drop every load or request?
  • How would you mark protective devices or health checks so someone troubleshooting can isolate a fault from the diagram?
  • What would you change on the diagram if a second source or a second region were added?

How do you prioritize tasks when multiple critical system issues arise simultaneously?

Medium · Problem-Solving and Logic

Approach

  1. Triage each issue on the same few axes: user and data impact (data loss, corruption or a security exposure outranks an outage, which outranks degradation), how many users or customers are affected, and whether it is getting worse.
  2. Check early whether the issues share a cause, such as one database, network segment, certificate or deploy; several alerts are often one incident, and fixing the shared dependency clears them together.
  3. Prefer fast, reversible mitigations (rollback, failover, feature flag, scaling) to buy time on the top issue before investing in a full fix of anything.
  4. Do not work everything alone: name an owner for each issue, keep one person coordinating, and post status updates at a fixed cadence so stakeholders stop interrupting the people fixing.
  5. Revisit the ranking as facts change, and write down why each call was made so the postmortem can review the prioritisation, not only the fixes.

Follow-up

  • Two issues look equally severe and you are the only engineer on call. Which do you take first and why?
  • A large customer escalates a lower-severity issue while a wider outage is open. How do you respond?
  • How would you know afterwards that you prioritised wrongly?

How would you troubleshoot a performance bottleneck in a production environment?

Medium · Technical Domain Knowledge

Approach

  1. Confirm the symptom with numbers before guessing: latency percentiles (p50 against p99), throughput and error rate, and when they changed. Then scope it: one endpoint or all, one host or all, one tenant or all.
  2. Line the change up against deploys, config changes, traffic shifts and dependency incidents; a bottleneck that started with a traffic step points at capacity, one that started with a deploy points at code.
  3. Walk each resource with the USE method (utilization, saturation, errors) for CPU, memory and GC, disk, network, thread pools and connection pools. Little's law (concurrency = throughput x latency) shows why a pool saturates as latency climbs.
  4. Localise the time with evidence: a sampling profiler or flame graph for CPU, the slow query log and EXPLAIN ANALYZE for the database, thread dumps for lock contention, traces for time spent in downstream calls.
  5. Mitigate first if users are hurting (roll back, scale out, shed or rate-limit load), then fix the cause and show the same metric back at its baseline under comparable traffic.

Follow-up

  • The average latency is flat but p99 doubled. What does that suggest and where do you look?
  • How would you profile in production without making the problem worse?
  • CPU is low but requests are slow. What are the likely causes?

Describe your process for debugging a complex issue in a distributed system.

Medium · Technical Domain Knowledge

Approach

  1. Define the failure precisely: which requests, what error or latency, since when, and which dimensions it splits on (region, service version, tenant, host). A split along one dimension usually names the component.
  2. Follow one failing request end to end using a correlation or trace ID across services; with distributed tracing, compare the span timings of a failing trace against a healthy one.
  3. Build a timeline from logs, metrics and deploy history, keeping clock skew in mind: timestamps from different hosts are not reliably ordered, so lean on causal links such as request IDs.
  4. Check the failure modes specific to distributed systems: timeouts set longer upstream than downstream, retries that multiply load, partial failures, non-idempotent operations that are retried, stale caches and replication lag.
  5. Confirm the hypothesis by reproducing it, for example with fault injection or replayed traffic in a lower environment, or by a targeted change whose predicted effect you can measure.

Follow-up

  • There is no tracing and the logs carry no shared request ID. How do you proceed?
  • The issue only appears under peak load and you cannot reproduce it. What do you do next?
  • How would you stop retries from turning a slow dependency into a full outage?

Walk me through your methodology for identifying the root cause of a system failure.

Medium · Problem-Solving and Logic

Approach

  1. Stabilise first: mitigate user impact, then preserve evidence (logs, heap or thread dumps, the failing input) before restarts or rollbacks erase it.
  2. Build a timeline of what changed and when (deploys, config, traffic, dependencies) and separate the trigger, the root cause and the contributing factors, for example a deploy that exposed a long-standing missing timeout.
  3. List hypotheses and test each by a prediction it makes, ordering the tests by how many candidates they eliminate; techniques include 5 Whys, a fault tree and bisecting the change set or git history.
  4. Treat a cause as confirmed only when you can reproduce the failure, or when removing the cause makes it stop and reintroducing it brings it back; correlation in a graph is not enough.
  5. Close with a blameless write-up: impact, timeline, root cause, what detection missed, and owned action items such as a regression test, an alert and a guardrail.

Follow-up

  • The failure cannot be reproduced. How do you still reach a confident root cause?
  • How would you check that the fix does not cause new regressions?
  • How would you explain this root cause to a non-technical stakeholder?

Suggested practice checklist

The plan starts with the reported rounds and your own project inventory, then gives each reported question family a day of spoken rehearsal before ending with a full mock. Practice-library exercises are attached where they match a day's skill.

Day 1 — Map the loop and inventory your stories

  • Write the four reported rounds in order and one line on what each is about: technical skills, contribution to projects, teamwork, and fit with operational work.
  • List four to six projects or incidents from your resume, each with the problem, your decision, the trade-off and the result.
  • Mark which items show production support, monitoring or documentation work, since those match the reported responsibilities.

Deliverable: A one-page loop map and a table of your projects with problem, decision, trade-off and result for each.

Day 2 — System diagrams on demand

  • Draw the architecture of a system you ran in production, with labelled data flows, and mark where it can fail and where you would monitor it.
  • Have a friend describe an unfamiliar system in a few sentences and draw it live while asking your clarifying questions aloud.
  • Write a short plain-language explanation of what each diagram shows, aimed at a non-technical reader.

Deliverable: Two annotated diagrams, a list of the clarifying questions you ask first, and one plain-language explanation.

Day 3 — Production performance bottlenecks

  • Write your troubleshooting sequence as a numbered checklist: symptom, change timeline, latency and error metrics, saturation, profile, bisect, fix, verify.
  • Narrate a real slowdown from your past through that checklist, aloud, and record it.

Deliverable: A one-page checklist, a recorded narration of one real slowdown, and a worked solution to the join fan-out exercise.

Day 4 — Distributed debugging and root cause

  • Take an intermittent failure across three services and write the investigation: correlation id, per-service timeline, hypotheses, the cheapest test to split them.
  • Write a root cause summary template with trigger, underlying cause, contributing factors, detection, fix and prevention.

Deliverable: A written investigation for one scenario, a filled-in root cause summary and a recorded spoken answer.

Day 5 — Prioritizing incidents and protecting against regressions

  • Write a triage rubric (impact, blast radius, trend, reversibility, owner) and apply it to three simultaneous issues you invent.
  • Write a two-paragraph update on a failure for a non-technical stakeholder, covering impact, cause, fix and next step.
  • List the checks you use so a fix does not add regressions: tests added, staged rollout, rollback, post-release metrics.

Deliverable: A rubric with a worked three-issue example, a stakeholder update and a regression-safety checklist.

Day 6 — Team leads, peers and learning under pressure

  • Write the learn-a-technology-fast story in first person with the deadline, the minimum slice you learned, risk limits, result and what you left behind.
  • Write an ownership or escalation story where you were the last person to look at a hard problem.

Deliverable: Two written stories, a spoken take of each and a completed unblock exercise.

Day 7 — Full dry run

  • Run a mock of the loop in order: a diagram and a troubleshooting question, a prioritization scenario, a peer-style story and a resume walkthrough.
  • Note every place you lost your structure and tighten that answer.
  • Write three questions for team leads about ongoing projects, escalation and support load.

Deliverable: A recorded mock with a short list of fixes and three questions to ask.

Ownership, escalation and learning under pressure

The reported later rounds are a conversation with team leads about contributing to ongoing projects, a peer round about teamwork, and a discussion of your background against operational needs. For this role that means stories about production incidents, escalation, learning quickly, communicating failure and keeping fixes safe. Build each as context in a sentence or two, then your decisions, then a measured result, all in first person.

  1. How do you prioritize tasks when multiple critical system issues arise simultaneously?
  2. Explain how you would document a system failure for a non-technical stakeholder.
  3. What steps do you take to ensure a fix does not introduce new regressions?
  4. Tell me about a time you were the last point of escalation for a problem others could not solve. What did you do, and what did you hand over afterwards?
  5. Walk me through a production project on your resume: the decision you made, the alternatives you rejected and what you would change.

Describe a time you had to learn a new technology quickly to solve an urgent problem.

Medium · Problem-Solving and Logic

Approach

  1. Choose a story with a real deadline and a visible cost of delay, such as an outage, a failed migration or a client escalation, where the technology was new to you and you made the learning decisions. Give the situation in two sentences, then spend the rest on what you did, in first person.
  2. Show a learning method, not just effort. Name the minimum slice you needed for the problem, how you got it (official documentation, existing configuration and source, a small reproduction in a sandbox) and the one targeted review you asked an experienced person for instead of a general tutorial.
  3. Show how you limited risk while still learning: testing in a staging environment, a feature flag or canary, a rollback plan, a review of the change by someone who knew the technology, and monitoring of a named metric after release.
  4. Close with a measured result, such as time to restore service, error rate or ticket volume, and what you left behind: a runbook, a short write-up or a pairing session so the next person ramps up faster.
  5. The mistake that sinks this answer is 'I stayed late and read everything' with no decision and no outcome. The second is overclaiming expertise. Say plainly what you still did not know when you shipped.

Follow-up

  • What did you deliberately choose not to learn, and how did you decide where to stop?
  • How did you check your understanding was right before the change reached production?
  • If the same situation came up again, what would you do differently, and what did you leave so someone else could handle it?

Narrate an outage you owned from page to postmortem

Hard · incident response · blast radius · postmortems

Pick an incident you personally drove, ideally one where writes were affected rather than reads. In six to eight minutes: state the symptom as it first appeared on a dashboard, the blast radius you established before you knew the cause, the mitigation you applied and when, the mechanism you eventually proved, and the follow-up that would prevent a repeat. Bring numbers: error rate, tenants affected, minutes to mitigate, minutes to resolve. If you cannot name what you measured, choose a different incident.

Approach

  1. Open on the signal rather than the cause: which metric at which percentile moved, on which service, at what time, so the listener follows the same evidence you had rather than a conclusion you already reached.
  2. Separate mitigation from diagnosis out loud. State what you did to stop the bleeding (flag off, shed traffic, drain a lease, roll back a deploy) and say plainly that you did it before the mechanism was known, because those are two jobs with different deadlines.
  3. Establish blast radius in countable terms: how many tenants, how many writes, and crucially whether the effect was loss or only delay. An append-only revision table or a pending outbox row means the change survived and the projection was merely behind, which is a repair rather than a data-loss incident.
  4. Prove the mechanism instead of asserting it. Name the trace span that grew, the plan that flipped to a sequential scan, the lease that expired, plus one alternative you ruled out and the signal that stayed flat while you ruled it out.

Follow-up

  • What would you do differently in the first five minutes, given the same dashboard and no more information?
  • Which follow-up action did you deliberately not take, and why was dropping it the right call?

Unblock an engineer without taking the keyboard

Easy · mentoring · leases · at-least-once

A teammate has spent two days on a job handler that occasionally writes duplicate rows. They are certain the queue is delivering twice by mistake. You suspect a lease expiring under a slow handler, so the job is running concurrently with itself. Describe how you have unblocked someone in this position: what you asked before offering a hypothesis, what you showed them rather than told them, and what you left them owning. Then say what you would do if their theory turned out to be the right one.

Approach

  1. Ask before diagnosing, and ask for things answerable from data they already have: the attempt count on the job rows that produced duplicates, the handler's observed duration against its lease expiry, and whether the duplicate rows share a natural key that a unique constraint could have caught.
  2. Teach the shape rather than the answer. A lease cannot distinguish a dead worker from a slow one, so a handler that outruns its lease is running twice by design, and deploys deliver the other half by killing handlers mid-run on every rollout. Both of their candidate theories produce identical duplicate rows, which is why the evidence has to come from timings rather than from argument.
  3. Hand over a checklist they execute: a natural key on every write the handler performs so the second copy collides rather than appends, the record of intent written before any external effect, a lease heartbeat while running, and the metric that shows it working.
  4. Keep ownership with them deliberately. Pair on the first write, then step back; if you finish it yourself you have closed one ticket and left the same person stuck on the next redelivery.

Follow-up

  • How would you distinguish a genuine double-delivery from a lease expiry using only the data already stored?
  • Their handler calls an external endpoint before recording that it did. What do you tell them to change first?