cswork / libraryOpen practice workspace

Interview guides · All is for All

All is for All Software Engineer Interview Guide

All is for All Software Engineer interview guide: 5 reported rounds, troubleshooting, high availability and update questions, and a 7-day prep plan.

The 60-second brief

Candidates describe this role as Software Engineer, sometimes titled IT Systems Engineer, responsible for the company's internal technical infrastructure. The reported work covers keeping systems running, deploying new software and monitoring it, and improving the reliability and performance of what is already in place. The reports do not say what All is for All sells, so this guide does not guess at a product. It concentrates on the skills candidates say the role depends on: systems administration, networking fundamentals, troubleshooting and integrating software into an existing environment.

This guide is for engineers preparing for the Software Engineer or IT Systems Engineer interviews at All is for All. It covers the five reported stages, the five reported questions (diagnosing a production failure, integrating new modules into an existing architecture, server-side dependencies and updates, high availability and data redundancy, and a performance optimization story) and the scenario prompts candidates mention, such as a backup and recovery plan and migrating a service without disrupting operations. No coding rounds are reported for this loop, so it does not include algorithm drills.

Candidates report five stages over roughly four to six weeks: Initial Screening, Technical Discussions, Peer and Leadership Engagement, Problem-Solving Evaluation and Final Decision. Reports stress systems knowledge, troubleshooting and clear explanation over memorised answers.

Focus areas

  • IT Systems Engineering
  • Infrastructure Engineering
  • Systems Administration

Overview

The reported questions all concern running and changing production infrastructure: finding the cause of a failure, adding a module to an existing architecture, keeping server-side dependencies and updates under control, building in availability and redundancy, and making a system faster. Candidates also report a design area that covers scalability, security and uptime, with scenarios about a backup and recovery plan and migrating a service without disrupting operations. Preparation therefore means rehearsing operational sequences you can say out loud (what you check first, how you roll out, how you roll back), not memorising definitions.

Reports list the topic areas as IT systems engineering, infrastructure engineering, systems administration, networking fundamentals and troubleshooting. The requirements candidates describe add familiarity with automation tools, cloud service integration and regulated industries as pluses. If you have run Linux or Windows servers, handled patching, or written deployment automation, build your answers from that real work and keep each story specific enough to survive follow-up questions.

Candidates also report that the technical reasoning has to connect to a business outcome, and that explaining complex ideas to non-technical colleagues matters. For every answer, say what you did, why you chose it over the alternative, and what changed for the people who depend on the system. Reported prompts are ambiguous scenarios, so practise stating your assumptions and the first thing you would measure before you propose a fix.

The All is for All interview process

Candidates report five stages across about four to six weeks. The descriptions below are what candidates say, not a published process, so confirm the format of each stage with your recruiter.

Initial Screening

Candidates report that the process opens with screening conversations that check basic qualifications against the role. Treat it as the point where you establish that your background fits infrastructure and systems work: the systems you have run, the operating systems and networks you know, and what you automated.

What to demonstrate

  • Whether your experience matches an IT systems or infrastructure role
  • How clearly you summarise your background
  • Basic familiarity with systems administration and troubleshooting

How to prepare

  • Write a short summary of your career that names the systems, operating systems and tools you have actually administered.
  • Prepare one sentence on why systems and infrastructure work appeals to you, tied to your own history.
  • Ask your recruiter what each later stage covers and how long the whole process is expected to take.

Technical Discussions

Candidates report in-depth technical discussions in this stage, aimed at how deep your knowledge goes. Expect conversation about systems you have built and operated rather than a quiz. Go in able to explain how you diagnose failures, add software to an existing environment, handle dependencies and updates, and design for availability.

What to demonstrate

  • Depth of knowledge in systems and infrastructure
  • Reasoning behind your technical decisions
  • Ability to discuss trade-offs in availability, redundancy and change management

How to prepare

  • Pick two systems you have run and be ready to describe their architecture, failure modes and how you updated them.
  • Rehearse a production-failure diagnosis sequence aloud: scope, recent changes, signals, mitigation, root cause, follow-up.
  • Be ready to explain high availability and data redundancy at each layer: compute, data, network and backups, including how you test restores.

Peer and Leadership Engagement

Candidates report meeting both peers and leadership in this stage, covering technical fit as well as cultural alignment. It is the stage to show how you work with colleagues and explain technical choices to people outside your specialty, so bring stories rather than definitions.

What to demonstrate

  • Technical fit with the team
  • Collaboration and communication with non-technical stakeholders
  • Alignment with how the team works

How to prepare

  • Write STAR stories for a performance improvement you drove and for managing dependencies and updates, each with a measured result.
  • Practise explaining an outage or a migration in three sentences to someone who does not work in IT.
  • Prepare questions about the team's current technical challenges and how new projects are prioritised.

Problem-Solving Evaluation

Candidates report that the team pays particular attention to your problem-solving process, and that ambiguous technical scenarios are used to see how you structure your thinking. Narrate your approach: break the problem down, name the likely bottlenecks, then give a reliable and scalable answer. Scenarios candidates mention include a backup and recovery plan for a critical system and migrating a service without disrupting operations.

What to demonstrate

  • How you structure an ambiguous scenario
  • Whether you identify bottlenecks and failure points before choosing a fix
  • Attention to security, scalability and maintainability in the solution you give

How to prepare

  • Write a reusable outline for scenarios: clarify scope, state assumptions, list failure points, choose a design, explain the rollback.
  • Work through the backup and recovery scenario, naming what is backed up, how often, where copies live and how a restore is verified.
  • Work through the migration scenario, covering parallel running, traffic cutover, data sync and a tested way back.

Final Decision

Candidates report that the process ends with a final decision based on the evaluations from the earlier stages. No separate assessment is reported for this stage, so the preparation is to keep your earlier material consistent and stay in touch with your recruiter.

What to demonstrate

  • The combined picture from the earlier stages
  • Consistency between what you said in different conversations

How to prepare

  • Review your own notes from each earlier stage and follow up with the recruiter on anything left open.
  • Keep a record of the stories and numbers you used so any later conversation stays consistent.

Where candidates lose points

Answering the production-failure question with a list of tools instead of a sequence

State the order: confirm impact and scope, check what changed recently, read the signals (errors, saturation, logs), mitigate first, then find the root cause and write it up. Say what you check first and why it gives the most information.

Answering the high-availability question with 'add a second server'

Cover each layer: redundant compute behind health checks, replicated data with a stated recovery objective, backups stored separately, and restores you test. Say what happens to in-flight requests during failover and what stays stale.

Telling an update or migration story with no verification and no way back

Include the staging test, the gradual rollout, the metrics you watched and the rollback you could execute. A story where nothing could have gone wrong sounds like one you watched rather than owned.

Describing a performance improvement with no baseline or measured result

Give the before number, how you located the bottleneck, the change, and the after number. If you cannot recall exact figures, say which metric moved and by roughly how much rather than inventing precision.

Explaining a decision in jargon, with no link to what it meant for the business

Practise saying what the decision protected or improved (fewer outages, faster pages, safer deploys) and why you chose it over the alternative, in language a non-technical colleague could follow.

Questions & practice

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?

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?

Track a rolling failure rate per destination for circuit decisions

Easy · sliding window · ring buffer · circuit breaker

The egress service delivers about 1,500 webhooks per second across roughly 40,000 destinations, each call bounded by a 10 second timeout. Maintain, per destination, the failure rate over the trailing 60 seconds so a caller can ask before dispatch whether the circuit should open. Attempts arrive as (destination_id, finished_at_ms, outcome). Requirement: amortised O(1) per attempt, with total memory bounded by the destination count rather than by traffic. Give the structure, its exact memory, and the rule that stops a destination with three attempts from opening a circuit.

Approach

  1. Name the exact-deque version and then reject it as the default. Holding timestamps and advancing a tail pointer past anything older than now minus 60 seconds is a correct two-pointer window at amortised O(1) per attempt, but its memory tracks in-window traffic, so one destination in a retry storm holds hundreds of thousands of entries while thousands of quiet destinations hold none.
  2. Use a ring of 60 one-second buckets per destination, each bucket a pair of counters for attempts and failures. On an attempt, advance the ring by the elapsed whole seconds, zeroing at most min(elapsed, 60) buckets, then increment the head. That is amortised O(1) with a fixed footprint per destination.
  3. State the footprint: 60 buckets times two 4-byte counters is 480 bytes of payload per destination, so 40,000 destinations is roughly 20 to 25 MB with per-entry overhead, bounded by the catalogue rather than by the rate. The cost is granularity, since the oldest bucket ages out in whole seconds, which is far tighter than the decision needs.
  4. Require a minimum sample before the circuit may open. A destination with three attempts and three failures reads as 100 percent and is not evidence; a floor of roughly 20 attempts in the window makes the ratio meaningful, and below that floor use a run of consecutive failures as the trigger instead.

Follow-up

  • The fleet is 30 instances and each sees roughly a thirtieth of a destination's traffic. Where does the rate actually live, and what does a per-instance answer get wrong?
  • A destination answers in 9.5 seconds and succeeds. It is not failing but it is consuming your per-destination concurrency. What signal should open the circuit here?

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?

Replace offset paging on the resource feed with keyset

Easy · keyset pagination · composite index · sort order

resource holds resource_id, tenant_id, owner_user_id, title, body_ref, version, status ('draft','active','archived','deleted'), created_at, updated_at, deleted_at, with an index on (tenant_id, status, updated_at DESC, resource_id DESC). The listing endpoint returns active resources for one tenant, newest update first, 50 per page, today with LIMIT 50 OFFSET n. Tenants reach page 400 and rows are created while they read. Write the keyset query, define what the cursor carries and how it is encoded, and say which part of the index each predicate uses. Assume PostgreSQL 16.

Approach

  1. Name the two failures separately. OFFSET 20000 makes the server produce and discard 20,000 rows, so page cost grows with depth rather than with page size. Independently, any write that changes how many rows sort above the offset moves the window between two fetches, and the direction decides which anomaly you get: an insert lands at the head of updated_at DESC and pushes already-returned rows down past the boundary, so they are returned a second time; a delete above the offset, or a row whose updated_at is bumped above the cursor, pulls rows up and one is never returned at all. Nothing in the response reveals either.
  2. Write the seek: WHERE tenant_id = $1 AND status = 'active' AND (updated_at, resource_id) < ($2, $3) ORDER BY updated_at DESC, resource_id DESC LIMIT 50. The row-value comparison is one index range rather than a disjunction, and both columns are NOT NULL, which is what makes that comparison well defined.
  3. Map each predicate onto the index: tenant_id and status are equality on the leading columns, (updated_at, resource_id) is the range, and the ORDER BY matches the index order so no Sort node appears and the scan stops after 50 rows. The DESC in the definition only matters for mixed directions — a plain ascending btree on the same columns is read backwards for this query.
  4. Put both sort columns in the cursor and nothing the client can tamper with into another tenant: base64 of (updated_at, resource_id), validated server-side, with tenant_id taken from the principal.

Follow-up

  • The client asks for 'jump to page 400'. What do you offer instead, and what does the honest version cost?
  • Sort order becomes user-selectable across four columns. How many indexes is that, and which would you refuse to add?

How would you approach diagnosing a critical system failure in a production environment?

Medium · Technical and Systems Knowledge

Approach

  1. Stabilise before you explain: confirm the user-facing impact from error rate, latency and traffic, name an incident lead and a person handling updates, then mitigate first (roll back the latest deploy or config change, fail over, shed load, or switch off a feature flag) and look for the root cause once the bleeding stops.
  2. Build a timeline: line up when the failure started against recent deploys, config edits, certificate expiries, dependency incidents and traffic spikes. Most production failures follow a change, so the change log is usually the check that tells you the most.
  3. Narrow it down layer by layer. For services, check rate, errors and duration (RED). For hosts, check utilization, saturation and errors (USE). Then work through DNS, network reachability, the host (disk full, OOM kills in dmesg or journalctl, file descriptor limits), the process, and dependencies such as an exhausted database connection pool. Follow one request ID through logs and traces.
  4. Test one hypothesis at a time, starting with the least risky check. Save evidence (logs, heap or thread dumps, the failing request) before a restart wipes it, and confirm recovery on the same metric that showed the failure.
  5. Finish with a blameless postmortem: timeline, root cause, contributing factors, and action items that each have an owner (a missing alert, a runbook step, a regression test, a safer rollout gate).

Follow-up

  • The rollback did not fix it because a schema migration already ran and cannot be reversed. What do you do next?
  • Database CPU is at 100 percent. How do you tell whether that is the cause or a symptom of something upstream?
  • How would you explain the outage and its expected recovery time to a non-technical stakeholder while it is still going on?

Can you explain the process of integrating new software modules into an existing IT architecture?

Medium · Technical and Systems Knowledge

Approach

  1. Pin down the contract first: the interface (API schema or event format), how it is versioned, authentication, and which system owns each piece of data and is its source of truth. Then map every existing system the module reads from or writes to.
  2. Pick the integration style and say what it costs. Synchronous APIs are simple but couple the module's availability to its callers. A message queue decouples them but delivers at least once, so consumers have to be idempotent (idempotency keys, upserts) and handle retries and dead-letter queues. If the legacy data model does not fit cleanly, add an adapter layer that translates it.
  3. Keep schema changes backward compatible with expand and contract: add the new column or table, dual-write, backfill, switch reads, and remove the old path only after it has stopped receiving traffic. Reconcile row counts and checksums after every backfill.
  4. Test at the seams with consumer-driven contract tests and an integration environment that mirrors production. Before cutover, run shadow traffic through the new module and compare its outputs with the existing path.
  5. Roll out behind a feature flag or canary (the strangler-fig pattern for replacing a legacy component), with a written rollback step, dashboards and alerts for the new path, a runbook, least-privilege service accounts and secrets kept in a secrets manager.

Follow-up

  • The legacy system has no API, only a shared database. How do you integrate without breaking its other consumers?
  • During dual-write the new module and the legacy system disagree on a record. How do you detect that and decide which one is right?
  • How do you decide it is safe to retire the old code path?

How do you ensure high availability and data redundancy in your system designs?

Medium · Technical and Systems Knowledge

Approach

  1. Start from targets, not technologies: an availability objective (99.9 percent allows about 8.8 hours of downtime a year, 99.99 percent about 53 minutes), an RPO (how much data loss is acceptable) and an RTO (how quickly service has to be back). Those three numbers decide how much redundancy is worth paying for.
  2. Remove single points of failure in the stateless tier: several instances behind a load balancer with health checks, spread across availability zones, with N+1 capacity so the zones that remain can carry the load when one is lost.
  3. For state, name the replication trade-off. Synchronous replication gives an RPO near zero but adds latency to every write. Asynchronous replication is faster but can lose recently committed writes on failover. Use automatic failover with quorum (three or five nodes) and fencing so that two primaries never accept writes at once.
  4. Treat backups as separate from redundancy: replicas copy deletes and corruption too. Keep point-in-time recovery (base backups plus WAL or binlog), follow the 3-2-1 rule with at least one copy that is off-site or immutable, and restore on a schedule to measure your real RTO.
  5. Prove it works: alert on replication lag and health-check failures, run failover drills or chaos tests, and plan graceful degradation (read-only mode, cached responses). Going multi-region active-active brings write-conflict resolution and higher cost, so justify it against the targets.

Follow-up

  • How do you prevent split-brain in a two-node database cluster?
  • With asynchronous replication, how do you measure the data you would actually lose if failover happened right now?
  • How do you know your backups can be restored before you need them?

Edge instances grow 400 MB per hour until the nightly restart

Hard · memory leak · heap analysis · metric cardinality

Edge API instances start at 700 MB resident and grow about 400 MB/hour; a nightly rolling restart has hidden it for weeks. Growth continues unchanged when request rate halves overnight, p99 degrades in the last hours before an instance is recycled, and heap used immediately after a forced full GC rises monotonically. The service holds no product state. Name the discriminating measurement that separates the plausible causes, give the most likely cause, and give the fix and how you would verify it.

Approach

  1. Separate resident memory from live heap first, because they fail differently. Resident size can grow from fragmentation, native buffers or thread stacks while the heap is flat; heap used after a full GC rising monotonically is the measurement that says objects are reachable and not being released. You already have it, so this is retention, not fragmentation, and that closes off half the candidate list.
  2. Use the rate's independence from traffic as the discriminator. Growth that continues at half the request rate rules out per-request objects that are merely slow to collect and points at a structure that grows with distinct values observed rather than with call volume. Write the candidates that have that property: a metrics registry keyed on a high-cardinality label, an unevicted cache, an interner, a per-key lock map.
  3. Take two heap snapshots an hour apart and diff by retained size, reading the dominator tree, not by allocation count or instance count. Expect one root holding a map with millions of entries, then follow the reference chain to the code that inserts and never removes. Allocation profilers point at churn, which is the wrong signal here.
  4. The candidate that fits this service is an observability label carrying an identifier, such as a request path recorded before templating so that /v1/resources/48213 becomes its own metric series. That grows with distinct ids seen, is independent of rate, and explains the late p99 degradation, since GC cost rises with the size of the live set.

Follow-up

  • Post-GC heap is now flat but resident size still creeps. What are you looking at, and does it matter?
  • How would you have detected this before an OOM, given the nightly restart masked the trend?

Suggested practice checklist

The seven days follow the reported rounds and questions: map the loop, practise troubleshooting, integration and migration, availability and recovery, then write the dependency and performance stories and finish with networking, administration and a full dry run.

Day 1 — Map the loop and inventory your experience

  • Write the five reported stages in order (Initial Screening, Technical Discussions, Peer and Leadership Engagement, Problem-Solving Evaluation, Final Decision) and note what you can ask your recruiter about each.
  • List every system you have run or deployed: operating systems, networks, monitoring, automation and cloud services, with one outcome per system.

Deliverable: A one-page loop map plus a written inventory of your systems experience with one outcome each.

Day 2 — Diagnose a production failure

  • Write a diagnosis runbook: scope and impact, recent changes, signals to read, mitigation, root cause, follow-up. Then say it aloud as your answer to the production-failure question.

Deliverable: A one-page diagnosis runbook, a spoken answer, and written hypotheses for the memory-growth drill.

Day 3 — Integrate modules and migrate without disruption

  • Outline how you would add a new software module to an existing architecture: interface contract, configuration, dependencies, staged release, monitoring and rollback.
  • Write a migration plan for a service that cannot go down, covering parallel running, data sync, traffic cutover and a tested way back.

Deliverable: An integration outline and a migration plan, each with a stated rollback step.

Day 4 — Availability, redundancy and recovery

  • Sketch a design for high availability and data redundancy, layer by layer, and state the failure each layer survives and the data it could lose.
  • Write a backup and recovery plan for a critical system: what is backed up, where copies live, how a restore is tested and who runs it.

Deliverable: A redundancy diagram, a written recovery plan, and a worked solution to the failure-rate drill.

Day 5 — Write the dependency and performance stories

  • Write a STAR story on managing server-side dependencies and updates: inventory, triage, rollout, rollback, one incident.
  • Write a STAR story on an optimization you drove, with baseline, bottleneck, change, trade-off and after numbers.

Deliverable: Two written STAR stories, each with a measured result and a stated trade-off.

Day 6 — Networking, administration and plain-language explanation

  • Trace one request end to end (DNS, connection, TLS, load balancer, application, database) and list what you would check at each hop when it fails.
  • Review the system administration basics you are likely to be asked about: processes, memory, disk, logs, permissions, patching and basic security hardening.
  • Write a three-sentence explanation of an outage for a non-technical stakeholder.

Deliverable: A request-path checklist, a one-page administration refresher, and a three-sentence stakeholder explanation.

Day 7 — Full dry run

  • Answer all five reported questions aloud in one sitting, then repeat the weakest two.

Deliverable: A recorded mock covering all five questions, a note on the weakest two, and two questions to ask the team.

Behavioural preparation

Candidates report a stage with peers and leadership that covers technical fit and cultural alignment, and they describe communication with non-technical colleagues as part of the role. Prepare stories where you made the decision and can show the effect, using the situation, task, action, result structure.

  1. Describe a scenario where you had to migrate a service without disrupting operations.
  2. Tell me about a time you explained a technical problem or outage to people outside IT, and how you chose what to include.
  3. Tell me about a time you did not know the answer to a technical question and how you found it.

What is your experience with managing server-side dependencies and system updates?

Medium · Technical and Systems Knowledge

Approach

  1. Choose a story where you owned the update process for a real server-side stack: the dependencies (OS packages, runtimes, libraries, base images), how you inventoried and pinned them, and how you decided what to update and when.
  2. Show triage: separate security patches (judge by severity and exposure) from routine version bumps and major upgrades, and explain how you handled end-of-life components and transitive dependencies.
  3. Walk through the rollout: read release notes for breaking changes, test in an environment that mirrors production, release gradually (canary or rolling), keep a rollback you have actually tried, and watch error rate and latency afterwards.
  4. Name one concrete risk or incident, such as an incompatible library or a restart that dropped connections, give the blast radius and say what the monitoring caught.
  5. Close with what you changed in the process afterwards, for example automated dependency checks or a regular patch cycle agreed with the teams affected.

Follow-up

  • How did you decide which updates could not wait for the normal cycle?
  • Tell me about an update you had to roll back and how you knew to do it.
  • How do you handle a dependency that is no longer maintained?

Describe a time you had to optimize a system to improve performance or reduce latency.

Medium · Technical and Systems Knowledge

Approach

  1. Open with the baseline: what was slow, for whom, and the number (p50 and p95 or p99 latency, throughput, CPU or I/O saturation) so the improvement can be checked against something.
  2. Explain how you found the bottleneck: profiling, request tracing, slow-query logs and EXPLAIN plans, or system metrics, and say what you ruled out before settling on the cause.
  3. Describe the change you made and why you picked it over alternatives (an index, caching, connection pooling, batching, moving work off the request path), and state the trade-off you accepted such as staleness, cost or extra complexity.
  4. Report the result as before and after figures, how you verified it under realistic load, and what it meant for users or the business.
  5. Finish with how you stopped it regressing: a dashboard, an alert on the latency percentile, or a load test kept in the release process.

Follow-up

  • How did you know that was the bottleneck and not something else?
  • What did the optimization cost, and what got worse?
  • If load grew tenfold, what would break next?

Tell callers you do not own that their integration breaks

Medium · deprecation · compatibility · stakeholders

A field in a write endpoint's response must change shape. You own the endpoint; you do not own the four internal callers or the outbound webhook consumers who read it. Describe a deprecation you were responsible for: what you shipped first, how you established who was actually reading the field, the window you gave and what set its length, what you did about the consumer who never moved, and how you decided removal was safe. Name the signal you used, not the announcement you sent.

Approach

  1. Establish the reader set empirically rather than from a wiki of owners: per-field usage counters keyed by principal, or access logs attributed to a consumer. State the blind spot of whichever you pick, since a consumer that reads the field only on a monthly job will not appear in a week of logs.
  2. Ship additive first. Populate the new field alongside the old one so no reader is forced to move, which is also what keeps a rolling deploy safe, because old and new instances answer the same requests at the same time and a rollback must still find the old shape present.
  3. Set the window from the slowest legitimate consumer's release cadence, not from your calendar, and decide separately what to do for a consumer with no release process at all, such as an external webhook endpoint you can only email.
  4. Convert silence into evidence before you rely on it: a short, low-traffic removal window that makes a still-dependent consumer fail visibly and loudly while you are watching, rather than at three in the morning after you have moved on.

Follow-up

  • How would you detect a consumer that reads the field only during a monthly export?
  • One caller refuses to move and has a commercial relationship behind it. What changes in your plan and what does not?