Amigo · Software Engineer
Updated · 2026-10-02

Amigo Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidates describe Amigo as building an autonomous healthcare system in which AI agents carry out clinical tasks, from triage through post-visit care. The Software Engineer posting reported here is Staff level and comes in two tracks. The Infrastructure track covers Kubernetes ownership, multi-region rollout and security across the platform. The Data track covers the Databricks foundation that processes and stores agent reasoning traces and clinical outcomes so researchers can use them. Both tracks work alongside Data Scientists, Clinical Operations and Product teams.

This guide is for engineers interviewing for the Staff Software Engineer role at Amigo on either the Infrastructure or the Data track. It covers the six reported design and reliability questions, the evaluation areas candidates describe (distributed systems, security and compliance, ownership), a seven-day plan and the behavioral stories to prepare. No coding round has been reported, so confirm with your recruiter whether you will write code.

Candidates report no named round list. The described flow moves from an initial technical screen through architecture deep dives to a culture-alignment conversation, and the reported questions are all system design or infrastructure reliability questions.

DatabricksKubernetesData Engineering

35 min read

Browse Software Engineer questions

See the practice prompts

15Practice promptsAcross five skill areas

The six reported questions split evenly. Three are system design: a multi-region deployment strategy with zero-downtime updates for a healthcare AI system, a data platform that combines streaming ingestion and batch processing under HIPAA, and designing for failure with disaster recovery and data isolation in a multi-tenant cloud. Three are infrastructure and reliability: auto-scaling Kubernetes clusters for unpredictable spikes without wasting money, balancing rapid development against security and compliance standards, and evaluating infrastructure-as-code tools while keeping production environments in parity. The common thread is scale, security and failure handling, not algorithms.

Candidates describe two evaluation areas. Distributed systems and scalability covers multi-region architecture, load balancing, state management, the consistency versus availability trade-off, latency in real-time data processing, multi-tenant isolation, data residency and disaster recovery testing. Security and compliance covers frameworks such as HIPAA and SOC 2. Candidates are also told to go beyond configuration into the mechanics of their tools, and to address security, latency and compliance trade-offs whenever they present a design. Choose your track early: the Infrastructure track leans on Kubernetes and cloud platforms (AWS, GCP or Azure), the Data track on Databricks and streaming pipelines.

Because the role is Staff level, the reported evaluation areas include Staff-level ownership alongside design: spotting problems before they happen, mentoring others, setting engineering standards and making build-versus-buy calls. Candidates report that interviewers challenge assumptions, and the reported tips mention skepticism and a low-ego willingness to defend a trade-off yet change course when a better argument appears. Prepare one real system from your own history that you can take apart in front of someone, including what failed.

The PracHub practice set also has coding, SQL and debugging exercises on event streams, tenant-scoped data and stalled log partitions. They are PracHub practice material, not reported Amigo questions, but they exercise the same ideas (ordering, idempotent replay, tenant isolation) that the data-platform and multi-tenant questions rely on.

01

Preparation focus

editorial

No round names or order are reported beyond a general arc: an initial technical screen, deep-dive architecture sessions, then a culture-alignment conversation, with a final round at the end. The reported questions are design and reliability questions, so the technical stages are where you rehearse them: multi-region deployment, a streaming plus batch data platform under HIPAA, disaster recovery and isolation for multi-tenant systems, Kubernetes auto-scaling, speed versus compliance, and infrastructure-as-code parity. Approach each one the same way: state requirements and constraints, sketch the architecture, walk through how each component fails, then name the trade-offs among security, latency, cost and compliance. Candidates also report that past projects are expected in STAR form with hard numbers in the result.

What to demonstrate

  • System design for scale and failure: multi-region architecture, load balancing, state management, consistency versus availability, as candidates describe the distributed systems area
  • Security and compliance reasoning in a healthcare setting, including familiarity with HIPAA and SOC 2
  • Depth in your primary stack, Kubernetes and cloud infrastructure or Databricks and data pipelines, down to how the tools work rather than how they are configured
  • Ownership at Staff level: finding problems early, mentoring, and defending or revising a design under challenge

How to prepare

  • Pick your track (Infrastructure or Data) and write a one-page walk-through of the largest system you ran: components, failure modes, the trade-offs you made, and measured results such as uptime or throughput
  • Rehearse each of the six reported questions aloud in one fixed order: requirements, architecture, failure modes, trade-offs, what you would measure
  • Review mechanics under your tools: for Kubernetes, how the Horizontal Pod Autoscaler computes replicas and how node scaling reacts to pending pods; for Databricks, how streaming checkpoints and the Delta transaction log make pipelines restartable and idempotent
  • Ask your recruiter for the stage sequence, whether you will write code, and which track the loop targets
PracHub preparation framework ↗

PracHub editorial advice for the preparation topics above.

01

Answering the multi-region question with 'deploy to two regions behind a load balancer'

Cover the parts that make it hard: how traffic is steered and drained on failure, how data is replicated and what RPO and RTO that gives, and how schema changes roll out with backward-compatible steps so a release never needs downtime. Say whether you run active-active or active-passive and why.

02

Treating HIPAA or SOC 2 as a checkbox in the data-platform and speed-versus-compliance answers

Name concrete controls: encryption in transit and at rest, least-privilege access with audit logs, separation of identifiable and de-identified data, retention and deletion rules, and automated policy checks in the delivery pipeline so compliance does not slow every release. Then say what it costs in latency or complexity.

03

Answering the Kubernetes auto-scaling question with 'turn on the HPA'

Explain the whole chain: which metric drives pod scaling (CPU, queue depth or request rate), how resource requests affect it, how long new nodes take to arrive, how spare headroom or low-priority buffer pods absorb a sudden spike, and how you cap cost with node-pool mix and scale-down rules. Include disruption budgets so scale-down does not cause an outage.

04

Designing for the happy path in the multi-tenant disaster recovery question

List failure modes first: region loss, a bad deploy, a corrupted table, one tenant overloading shared resources. Pair each with a mitigation (cross-region backups, per-tenant quotas, tenant-scoped encryption keys) and say how you test it with restore drills and failure exercises, since an untested backup is only a hope.

05

Telling project stories with no numbers, no failure, or no willingness to move

Prepare STAR stories whose result carries a measured figure (uptime, latency, cost, incident count), one story about your biggest professional failure and what you changed afterwards, and one where you defended a design under challenge and either held it with evidence or changed it when a better argument came up.

Choose a category, try a prompt, then open its approach, worked solution or follow-up when you need it.

12 technical prompts0 include a worked solution

Merge partitioned event streams into one ordered feed with bounded lateness

hard
k-way mergewatermarksout-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?

Archive a resource graph without breaking live references or recursing

medium
graph traversaltopological ordertenant isolation

Resources reference other resources within a tenant; for the largest tenant the reference table holds up to 2,000,000 nodes and 8,000,000 edges. Archiving a resource must archive everything reachable from it that nothing outside the set still references, refuse when a live external referrer exists, and terminate when references form cycles, which they legitimately do. Produce the archive order and the refusal list, targeting O(V+E). Say what stops the traversal crossing a tenant boundary, and why recursion is the wrong control structure at this size.

Approach
  1. Load the subgraph with the tenant predicate on both endpoints of the edge, not only on the side you started from. Scoping the left table alone is the classic cross-tenant leak: one mis-entered edge then pulls another tenant's resources into the traversal and, worse, into the archive.
  2. Traverse iteratively with an explicit stack. A 2,000,000-node graph can hold a chain deep enough to exhaust a native stack in the low tens of thousands of frames, and that failure is a process crash rather than an error you can return.
  3. Treat cycles as data rather than corruption: compute strongly connected components with Tarjan in O(V+E) using its own explicit stack, then condense. The condensation is a DAG, so a topological order over it gives the archive order, and every member of a component archives in one transaction because no order within a cycle is valid.
  4. Decide refusals with reverse edges. A candidate is archivable only if every in-edge originates inside the candidate set, so build the transpose or count in-degrees restricted to the visited set, and emit each blocked resource with the id of the external referrer, which is the only part of the answer an operator can act on.
Follow-up
  • The graph is read in one query and the archive writes a minute later. What can change in between, and how do you make the write safe?
  • The candidate set is 400,000 resources. Is that one transaction, and if not, what does a half-finished archive look like to a reader?

Collapse a redelivered event batch into per-aggregate high-water marks

easy
hashingat-least-onceaggregation

You drain a batch of up to 5,000,000 events, each (aggregate_id BIGINT, aggregate_version INT, event_type, payload). The log guarantees order within one aggregate only; the batch merges 64 partitions, and a relay failover has redelivered a range, so an older version for an aggregate can appear after a newer one. Given a map of last_applied_version per aggregate, produce the events worth applying, at most one per (aggregate_id, version), plus the count discarded. Target O(n) time. State the memory for 2,000,000 distinct aggregates and what you do when it does not fit.

Approach
  1. One pass, one hash map from aggregate_id to the highest version kept, and a discard counter. An event whose version is at or below last_applied_version for its aggregate is dropped without further work, which is the whole reason the event carries its version rather than a delta. O(n) expected time, O(d) space in distinct aggregates.
  2. Keep the maximum, never the last occurrence. The redelivered range means the final appearance of an aggregate in the batch can be an older version than one seen earlier in the same batch, so last-wins applies stale state over newer state and the projection regresses with no error anywhere.
  3. Cost the memory instead of calling it large: an 8-byte key plus a 4-byte version is 12 bytes of payload, and an open-addressed table held at a 0.7 load factor costs roughly 17 bytes per entry before per-slot metadata, so 2,000,000 aggregates is tens of megabytes in a native layout and several times that in a runtime that boxes both key and value.
  4. If the distinct set exceeds memory, partition on hash(aggregate_id) mod P and reduce each partition independently. Every event for one aggregate hashes to the same partition, so the per-partition result is exact and the merge is concatenation rather than a second reduction.
Follow-up
  • The payload is a patch rather than a snapshot, so applying only the highest version loses the intermediate changes. What changes in your reduction?
  • How do you detect that version 7 arrived while version 6 was never delivered, and what should the consumer do about the gap?

Seven days built around the six reported design and reliability questions, the Kubernetes and Databricks stack, and the Staff-level ownership stories. Each day ends with something written or spoken that you can review.

Small steps. Visible outcomes.0 / 7 completed
ONE WEEK · YOUR PACE

Prepare, practise & reflect

One practical outcome each day. Spend longer where you need it.

0 / 7 done
01Fix your track and inventory your own systems
  • Ask your recruiter which track the loop targets (Infrastructure or Data), what stages to expect and whether you will write code.
  • List the three largest systems you have owned and, for each, one outage or near-miss, the design decision behind it and a measured outcome.
  • Write the one-page walk-through of your strongest system: components, data flow, failure modes, trade-offs among security, latency and cost.

Deliverable: A recruiter reply with the format, a ranked list of three systems with a measured outcome each, and the one-page system walk-through.

02Multi-region deployment with zero-downtime updates
  • Sketch active-active and active-passive layouts for a healthcare AI service, marking traffic steering, data replication and the failover trigger; state RPO and RTO for each.
  • Write the release sequence for a schema change that must not cause downtime: add the new column, dual-write, backfill, switch reads, then remove the old column.
  • Describe a canary rollout per region with the metrics that stop it, and how you drain connections during a deploy.
  • Answer the multi-region question aloud and record it.

Deliverable: Two annotated architecture sketches, a written release sequence for a zero-downtime schema change, and one recorded spoken answer.

Practice prompt ↗
03Streaming plus batch data platform under HIPAA
  • Draw one pipeline in which streaming ingestion and batch reprocessing share the same storage layers, with layers for raw, cleaned and curated data; mark where identifiable data is isolated.
  • Write down how you get restartable, idempotent processing: checkpoints, deduplication keys, handling of late events and replay. If you use Databricks, map this to Structured Streaming and Delta tables.
  • List the compliance controls the platform needs (encryption, access control, audit logging, retention and deletion, lineage) and where each is enforced.
  • Work PracHub's practice exercise on collapsing a redelivered event batch to rehearse idempotent replay, then answer the data-platform question aloud.

Deliverable: One pipeline diagram with compliance controls marked, a written idempotency and replay checklist, and a completed practice exercise.

Practice prompt ↗Practice prompt ↗
04Designing for failure: disaster recovery and tenant isolation
  • Build a failure table for a multi-tenant platform: region loss, bad deploy, data corruption, noisy tenant, credential leak. For each, write the detection signal, the mitigation and the recovery step.
  • Compare tenant isolation by row-level filtering, by schema and by separate database or account, in terms of blast radius, cost and operational effort; choose one and justify it.
  • Define backup and restore targets and write a restore-drill script outline; note data residency constraints per region.
  • Work PracHub's practice exercise on adding a tenant column to existing tables and backfilling it live, then answer the failure-design question aloud.

Deliverable: A completed failure table, an isolation comparison with a recommendation, a restore-drill outline and a worked tenant-backfill exercise.

Practice prompt ↗Practice prompt ↗
05Kubernetes auto-scaling and infrastructure-as-code parity
  • Write how the Horizontal Pod Autoscaler computes desired replicas (current replicas times current metric over target), which metric you would scale on for a spiky workload, and why resource requests matter.
  • Describe how node scaling responds to pending pods, how spare capacity or low-priority buffer pods hide node start-up delay, and where you use on-demand versus cheaper interruptible nodes; add disruption budgets and scale-down limits.
  • Write your evaluation criteria for infrastructure-as-code tools (state handling, preview of changes, drift detection, module reuse, policy checks, team skills) and a promotion pipeline that keeps environments identical except for declared variables.
  • Answer both questions aloud: auto-scaling and IaC evaluation.

Deliverable: A one-page autoscaling design for a spiky workload, an IaC evaluation scorecard with a promotion pipeline outline, and two recorded answers.

Practice prompt ↗Practice prompt ↗
06Speed versus compliance, and the ownership stories
  • Write your answer to the speed-versus-compliance question around guardrails: policy checks in the pipeline, pre-approved templates, risk-based review, automated evidence for audits, and a logged emergency-access path.
  • Write four STAR stories with measured results: your biggest professional failure, a problem you caught before it happened, a time you mentored someone to a higher bar, and a build-versus-buy decision.
  • Write a two-sentence answer to why you want to apply your engineering skills to healthcare, grounded in something you have actually built or lived.
  • Rehearse one story where an interviewer challenges your design: what you defend with evidence, and what would make you change it.

Deliverable: A written compliance-guardrails answer, four STAR stories each with a figure, a two-sentence healthcare motivation, and a practised challenge response.

Practice prompt ↗Practice prompt ↗
07Full mock and gap check
  • Run a spoken mock with all six reported questions in a row, drawing diagrams as you go, and record it.
  • Replay the recording and mark every spot where you named a tool without explaining its mechanism, or gave a design with no failure case.
  • Retry the two weakest answers, then work PracHub's practice exercise on a log partition that stops advancing, to rehearse a debugging sequence under pressure.
  • Write two questions to ask your interviewers about the platform and the team.

Deliverable: One recorded mock, a list of marked gaps with the reworked answers, a debugging walkthrough and two questions to ask.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗

Expand any day for tasks and deliverables. Your progress is saved on this device.

Reported preparation tips mention talking about your biggest professional failure, explaining why you want to apply your engineering to healthcare, and defending a design while staying willing to change it. The reported Staff-level expectations mention finding problems before they occur and mentoring others. Candidates are also advised to use the STAR structure and end each story with hard figures such as scale and uptime change.

Turn a code review disagreement into a decision

easy
code reviewoptimistic concurrencycommunication

A colleague's change updates a row with UPDATE resource SET version = version + 1 WHERE resource_id = $1 AND version = $2 and treats an affected-row count of zero as a successful no-op. You read that as a silently lost update; they think returning 200 is friendlier to clients than returning a conflict. Describe how you have handled a review disagreement of this shape: what goes in the comment, when you leave the thread, and who decides. Then write the comment you would leave here, in under 80 words.

Approach
  1. Sort the disagreement before writing anything. A silently discarded write is a correctness claim about data; the choice between 409 and 412 is taste. Only the first justifies blocking a merge, and saying which one you are doing is most of the value of the comment.
  2. Make the claim reproducible in the comment itself with an interleaving rather than a principle: A reads version 7, B reads version 7, B commits version 8, A's predicate matches zero rows, A is told it succeeded and A's edit is gone.
  3. Offer the alternative with its cost attached: return 409 carrying the current version and the revision that won, so the client can re-read and re-apply. Note that automatic retry is not the fix, because a retry re-reads the winner's state and reapplies an intent formed against data that no longer exists.
  4. Apply an escalation rule you can state: two round trips on the thread, then a call, and the service's owner decides rather than the reviewer. A reviewer who cannot be overruled is a bottleneck with extra steps.
Follow-up
  • Where would you put the test that fails if someone reintroduces the swallowed zero rowcount?
  • The author says clients cannot handle a 409. How do you check whether that is true?

Argue against a design, lose, and commit anyway

medium
disagreementservice boundariesdecision records

Describe a design you argued against and lost. State the failure you predicted as a named mechanism, not a feeling about complexity: two services that would need one transaction, a projection with no rebuild path, a write path with no idempotency key. Say what evidence you brought, what the decision maker weighed instead, and what you did after the decision was made: what you instrumented, what you wrote down, and whether the prediction came true. Five minutes.

Approach
  1. State the prediction in falsifiable form up front: the mechanism, the condition that triggers it, and the observable outcome. A prediction that cannot be checked also cannot be credited to you later.
  2. Show the evidence you had at the time and label each piece honestly as measured, analogous, or intuition. Keeping the intuition is fine; disguising it as data is the thing that erodes your standing in the next argument.
  3. Represent the opposing case at full strength, including the constraint you did not control: a fixed date, a team boundary, or the fact that the decision was cheap to reverse and yours was not.
  4. Make disagree-and-commit concrete. Name the artefact you left behind so the prediction could be settled without you: the alert and its threshold, the counter on the dashboard, the decision note that recorded the trade-off and the condition that would revisit it.
Follow-up
  • What threshold on that alert would have proved you right, and did anyone ever look at it?
  • If the same proposal arrived tomorrow with the same deadline, would you argue it the same way?

Ship under a deadline and bound the debt you chose

medium
paginationtechnical debttradeoffs

You have four days to ship a tenant-facing listing endpoint. The version you would defend uses keyset pagination over (tenant_id, status, updated_at DESC, resource_id DESC); the version you can finish uses LIMIT/OFFSET with no matching index. Describe a deadline call you actually made of this shape: what you shipped, what you knowingly deferred, how you bounded the damage with a mechanism rather than an intention, and the specific numeric condition that would force the follow-up. Name who you told and where you wrote it down.

Approach
  1. Name the deferred failure precisely instead of calling it slow. OFFSET n makes the database produce and discard n rows, so cost grows with page depth; without an index matching the sort, every matching row is read and sorted before the limit applies; and rows inserted between two page fetches shift across the boundary so items are skipped or repeated with nothing in the response to signal it.
  2. Bound the blast radius with something mechanical rather than a promise: cap maximum page depth, cap page size, restrict the endpoint to one internal caller, or keep it behind a flag. State which failure each cap removes and which it leaves standing.
  3. Attach a number to the trigger and wire it to an alarm: the first tenant crossing N resources, or the endpoint's p99 crossing its share of the 400 ms budget, so the debt announces itself instead of waiting to be remembered.
  4. Write it where the next engineer looks, which is the code and the ticket, not a chat message: what was deferred, why, the cap, and the trigger.
Follow-up
  • At what page depth does the offset version breach your latency budget, given your page size and row counts?
  • What breaks first when you switch to keyset pagination later, and what does a client holding an old page token see?
  • 01

    Tell me about your biggest professional failure. What did you miss, what did it cost, and what changed in how you work afterwards?

  • 02

    Why Amigo, and why healthcare? Connect your answer to something specific you have built or cared about.

  • 03

    Describe a time someone challenged a design of yours. What did you defend with evidence, and what made you change your mind, if anything did?

  • 04

    Tell me about a problem you spotted before it became an incident. How did you notice it, who did you convince, and what was the measured result?

  • 05

    Describe how you have mentored engineers to raise the technical bar on a team. What changed, and how do you know?

  • 06

    Tell me about a time you had to choose between shipping quickly and meeting a security or compliance requirement. What did you decide, and what did you put in place to keep the risk bounded?

PracHub preparation framework ↗
How difficult is the Amigo Software Engineer interview?

Candidates describe it as highly rigorous, with technical challenges built around edge cases and how systems fail, not around coding detail. Practice walking through the failure cases of every architecture you sketch, and be ready to explain why you chose a design and what happens when a component breaks.

Amigo Software Engineer candidate reports ↗
How should I prepare, and for how long?

Reported advice is two to three weeks of focused study, centered on past architecture decisions you can explain in depth and on the core technologies in the job description: Kubernetes and cloud platforms for the Infrastructure track, Databricks and streaming pipelines for the Data track. The seven-day plan on this page is a compact version. With two weeks, double days 2 and 3 (multi-region and the data platform) and add a second full mock.

Amigo Software Engineer candidate reports ↗
What do candidates report about the company's culture?

Candidates mention the phrases "Thoughtful Urgency" and "Intensely Measured", and a message that safety and clinical accuracy come before speed. Prepare an example showing you can move quickly while protecting correctness, and one showing a decision you backed with measurements.

Amigo Software Engineer candidate reports ↗
What is the typical timeline?

One report puts the whole process at roughly three to five weeks from first screen to offer, with scheduling the main variable. Ask your recruiter for the actual stage list and dates for your loop.

Amigo Software Engineer candidate reports ↗
What topics does Amigo test?

The reported topics are Databricks, Kubernetes, data engineering, infrastructure engineering and streaming data pipelines, with questions on multi-region deployment, HIPAA-aware data platforms, disaster recovery, auto-scaling, compliance versus speed and infrastructure-as-code. Candidates also describe familiarity with HIPAA and SOC 2 as part of the security area.

Amigo Software Engineer candidate reports ↗
Which track should I prepare for, Infrastructure or Data?

Prepare for the track in your application, and still rehearse all six reported questions, since they mix the two. The Infrastructure track centers on Kubernetes, multi-region deployments and security posture; the Data track centers on the Databricks foundation for agent reasoning traces and clinical outcomes. Ask your recruiter which one the loop targets.

PracHub Software Engineer practice ↗
Will there be a coding round?

No coding round has been reported for this role. Ask your recruiter whether you will write code, and if you want extra practice on ordering, replay and tenant data, PracHub's practice set has exercises on those topics, though they are not reported Amigo questions.

PracHub Software Engineer practice ↗
Sources & methodology 3 sources ↗

No official company page is cited. Rounds and questions come from candidate reports and PracHub editorial material; each source shows the date it was read.