cswork / libraryOpen practice workspace

Interview guides · AdventHealth Corporate

AdventHealth Corporate Software Engineer Interview Guide

AdventHealth Corporate Software Engineer interview guide: four reported rounds, coding, security, debugging and behavioral questions, and a 7-day plan.

The 60-second brief

AdventHealth Corporate is a large healthcare system, and candidates describe this role as building and maintaining its internal software along with applications used by clinicians and patients. The reported responsibilities cover the full build cycle from design to deployment, requirements work with product and design colleagues, code review and defect fixing, all within industry regulations. Expect ordinary software engineering set in a healthcare context.

This guide is for candidates interviewing for a Software Engineer position at AdventHealth Corporate. It covers the four reported rounds, all sixteen reported questions (technical, coding, debugging and behavioral), the languages and tools candidates say the role lists, and a seven-day schedule. It does not cover data science or machine learning interviews, and it carries no pay figures.

Candidates report four rounds over roughly 3-5 weeks: Initial Screening, Technical Assessment, Team Interviews and a Management Interview. Reports do not say which questions belong to which round, so this guide prepares every reported question type for every stage.

Focus areas

  • Software Engineering (General)
  • Medical Coding (Inpatient)
  • Medical Coding Proficiency

Overview

The reported questions describe a generalist software engineering loop rather than a specialised one. The technical questions ask you to explain the software development lifecycle, name design patterns you have used, describe how you keep applications secure, talk through a hard problem you solved, and say which programming languages you prefer and why. The coding questions are fundamentals: reverse a linked list, implement binary search, and explain time and space complexity. Three problem-solving questions cover debugging a complex issue, starting a project with vague requirements, and trading quality against a deadline.

Six reported questions are behavioral: a difficult team member, tight deadlines, taking initiative, prioritising several tasks, what teamwork means to you, and the quality-versus-deadline trade-off. That is a large share of the list, and two of the four rounds (Team Interviews and the Management Interview) are described in terms of teamwork and culture alignment. Plan to spend as much time on spoken stories as on code. Because reports do not pin any question to a round, treat every question as possible in every stage.

Candidates describe a stack of Java, C# and Python, web frameworks such as .NET, Angular and React, APIs, SQL Server and MySQL, Git, and Agile or Scrum methods, with AWS or Azure, DevOps practices, CI/CD and healthcare IT standards listed as extras. Pick one of the three languages for coding answers and be ready to give real examples, such as a pattern you used or a vulnerability you closed, from whichever of these tools you have actually worked with. Be honest about the ones you have not used.

Reports for this role also mention inpatient medical coding and healthcare domain knowledge. The reported questions themselves are general software questions, so treat the healthcare vocabulary as background to read about, not as a coding-exam subject.

The AdventHealth Corporate interview process

Candidates report these four stages. The descriptions are brief and do not name specific questions per stage, so each step below says what to prepare rather than what will be asked.

Initial Screening

Candidates report an Initial Screening that checks basic qualifications and fit. No specific questions are reported for it. Treat it as the first conversation about your background: be able to connect your experience to a software engineering role, name the languages you work in, and have the practical details (location or remote preference, availability, salary expectations) ready so the conversation stays on your fit.

What to demonstrate

  • Basic qualifications for a Software Engineer role, as the stage is reported
  • Fit, as the stage is reported

How to prepare

  • Write a short walk through your CV that ends on the kind of work the role describes: building, testing and maintaining applications with a team.
  • Rehearse the 'which programming languages are you most comfortable with and why' answer, naming one primary language and one real project in it.
  • List your availability, location or remote preference and salary expectations before the call so none of them has to be improvised.

Technical Assessment

Candidates report a Technical Assessment meant to evaluate technical skills. The format is not described (live, take-home or platform), so prepare for both written code and spoken explanation. Reports do not tie any question to this stage, but the reported question types worth preparing include linked-list reversal, binary search, time and space complexity, the software development lifecycle, design patterns and application security.

What to demonstrate

  • Technical skills, as the stage is reported
  • Coding and algorithmic problem-solving, which candidates list among the evaluation areas

How to prepare

  • Write iterative linked-list reversal and binary search from a blank file in your chosen language, with tests for empty, single-element and not-found cases, and talk through your reasoning aloud as you write.
  • State time and space complexity for every function you write, including recursion stack space.
  • Prepare a layered answer to how you keep an application secure: authentication and authorisation, input validation, parameterised queries, secrets handling, patching dependencies, encryption in transit and at rest.
  • Be ready to name two or three design patterns you have used, with the problem each solved and its cost.

Team Interviews

Candidates report Team Interviews, where team members discuss technical capabilities and teamwork with the candidate. That pairing suggests technical stories and collaboration stories both matter. Prepare examples where the technical content and the people content are the same story: a bug solved with a colleague, a code review disagreement, a design settled with a product manager.

What to demonstrate

  • Technical capabilities, as the stage is reported
  • Teamwork, as the stage is reported

How to prepare

  • Prepare the challenging-technical-problem story with the cause, the fix and what you changed afterwards to prevent it.
  • Write out your debugging sequence for a complex issue: reproduce, narrow the scope, form a hypothesis, check logs and recent commits in Git, fix, add a regression test.
  • Prepare the difficult-team-member and teamwork stories with concrete actions and an outcome.
  • Prepare questions about how the team handles code review and releases.

Management Interview

Candidates report a Management Interview that assesses alignment with the company's culture and values. The reports do not say what those values are, so do not guess at them; read the organisation's own published material and prepare to explain, in your own words, why healthcare software appeals to you. Most of the preparation is behavioral stories: deadlines, initiative, prioritising, and a quality-versus-deadline trade-off.

What to demonstrate

  • Alignment with culture and values, as the stage is reported
  • Communication, which candidates list among the evaluation areas

How to prepare

  • Have a story ready for each of the tight-deadline, initiative, prioritisation and quality-trade-off questions, each with a decision you made and a result.
  • Write your own answer to why this kind of work, using only things you have read or experienced.
  • Prepare questions for a manager about how requirements reach the team and how priorities are set.

Where candidates lose points

Reversing a linked list and losing the rest of the list because the next pointer was overwritten before it was saved

Keep three references (previous, current, next), save current's next before rewiring, and run the code on an empty list, a single node and two nodes before you say it is done.

Writing binary search with an off-by-one bound that loops forever or skips the last element

Choose one loop invariant (for example, the target lies in the inclusive range lo to hi), compute the midpoint as lo + (hi - lo) / 2, and test a missing value, a one-element array and both ends.

Answering the security question with a list of buzzwords and no example of a vulnerability you actually handled

Structure the answer by layer (authentication and authorisation, input validation, parameterised queries, secrets, dependency updates, encryption, logging without sensitive data) and attach one real fix from your own work.

Telling behavioral stories in the plural, so it is unclear what you personally decided, or blaming the other person in the difficult-teammate story

Write each story as situation, your decision, your action, result, and say 'I' for the actions. Describe the other person's behaviour neutrally and include what you changed.

Answering the debugging or vague-requirements question with an instant guess at a fix or a design

Open with how you would narrow the problem: reproduce it, check what changed in Git and the logs, ask the product manager clarifying questions, write acceptance criteria, and only then propose a fix or a first version.

Questions & practice

Write a function to reverse a linked list.

Medium · Coding / Algorithms

Approach

  1. Clarify the details: singly linked, return the new head, reverse in place. Then state the edge cases up front: an empty list (return null) and a single node (return it unchanged).
  2. Iterative solution with three pointers: prev = null, curr = head. Loop while curr is not null: save next = curr.next, set curr.next = prev, then advance prev = curr and curr = next. Return prev. This is O(n) time and O(1) extra space.
  3. Recursive alternative: reverse the rest of the list, then set head.next.next = head and head.next = null, and return the new head from the deepest call. It is also O(n) time but uses O(n) call-stack space. In Python the default recursion limit is 1000 (sys.getrecursionlimit()), so a longer list raises RecursionError. Java and C# have no fixed count; a deep enough list exhausts the thread stack, giving a StackOverflowError in Java and an uncatchable StackOverflowException in .NET.
  4. Trace it on 1 -> 2 -> 3 aloud, showing the pointers after each step. Point out the classic bug: overwriting curr.next before saving it, which loses the rest of the list.

Follow-up

  • Reverse only the nodes between positions m and n.
  • Reverse the list in groups of k nodes. What happens to a final group shorter than k?
  • How would you reverse a doubly linked list, and how would you first check that the list has no cycle?

How would you implement a binary search algorithm?

Medium · Coding / Algorithms

Approach

  1. State the precondition: the input must be sorted and support random access, such as an array or list. On a linked list, binary search loses its advantage because reaching the middle element is O(n).
  2. Iterative version: lo = 0, hi = n - 1, loop while lo <= hi with mid = lo + (hi - lo) / 2. That form avoids int overflow in Java and C#, which a naive (lo + hi) / 2 does not. Return mid on a match, move lo = mid + 1 if the target is larger, otherwise hi = mid - 1, and return -1 after the loop.
  3. Complexity: O(log n) time, because each step halves the range, and O(1) space iteratively. The recursive version uses O(log n) stack.
  4. Edge cases to test aloud: an empty array, one element, a target below the minimum or above the maximum, and duplicates. For duplicates, write a lower-bound variant on a half-open range [lo, hi) that returns the first index whose value is >= target.
  5. Know the library behaviour. When the key is missing, Java's Arrays.binarySearch returns -(insertion point) - 1 and C#'s Array.BinarySearch returns the bitwise complement of the insertion index. Python's bisect_left returns the insertion point directly.

Follow-up

  • Find the first and last positions of a target in a sorted array with duplicates.
  • Search a sorted array that has been rotated at an unknown pivot.
  • How would you binary-search on the answer, for example the smallest capacity that ships all packages within D days?

Explain time complexity and space complexity.

Medium · Coding / Algorithms

Approach

  1. Define both terms. Time complexity is how the number of basic operations grows with input size n. Space complexity is how much extra memory the algorithm needs beyond the input (auxiliary space), counting the recursion stack. Big-O gives an upper bound with constants and lower-order terms dropped. Big-Theta gives a tight bound.
  2. Give one example for each common class: O(1) array index or average-case hash lookup, O(log n) binary search, O(n) single pass, O(n log n) merge sort (and the lower bound for comparison sorts), O(n^2) nested loops over the same input, and O(2^n) naive recursive subsets.
  3. Distinguish worst, average and amortized cases. A hash table lookup is O(1) on average but O(n) in the worst case under heavy collisions. Appending to a Java ArrayList, C# List<T> or Python list is amortized O(1) because the backing array grows geometrically.
  4. Connect it to the other reported coding questions: iterative linked-list reversal is O(n) time and O(1) space, and the recursive version is O(n) space. Iterative binary search is O(log n) time and O(1) space.
  5. Show the time-space trade-off with one example. Two-sum with a hash set is O(n) time and O(n) space, against O(n^2) time and O(1) space for the brute-force pair check.

Follow-up

  • What are the time and space complexity of this nested loop where the inner loop runs from i to n?
  • Why is appending to a dynamic array amortized O(1) when a single append can cost O(n)?
  • When would you accept a worse Big-O for a better constant factor or less memory?

Write the update path that detects a concurrent edit

Medium · optimistic concurrency · transactional outbox · audit history

resource carries version INT NOT NULL DEFAULT 1. resource_revision holds revision_id, resource_id, version, actor_user_id, change_kind, patch JSONB, request_id, created_at with UNIQUE (resource_id, version). outbox_event holds aggregate_type, aggregate_id, aggregate_version, event_type, payload, status. A PUT carries the version the client read. Write the exact statements for the single transaction that applies the edit, records the revision and enqueues 'resource.updated', and give the handler's branch on zero affected rows. Then say what PostgreSQL 16 does under READ COMMITTED when two of these updates hit one row at once.

Approach

  1. One transaction, three writes, no network call inside it: UPDATE resource SET title = $3, version = version + 1, updated_at = now() WHERE resource_id = $1 AND tenant_id = $4 AND version = $2; then INSERT the resource_revision row at version $2 + 1; then INSERT the outbox_event row at the same aggregate_version. The event goes to a table rather than a broker because no transaction spans both.
  2. Branch on the affected-row count before doing anything else. Zero has three causes — stale version, wrong tenant, row gone — so re-read once and map to 409 carrying the current version, or 404 for an id outside the caller's tenant, which also stops the endpoint confirming that another tenant's id exists.
  3. State the engine behaviour instead of assuming it. Under READ COMMITTED the second UPDATE blocks on the row lock, and when the first commits PostgreSQL re-evaluates the WHERE clause against the newly committed row, so the version predicate now fails and the statement reports zero rows. Under REPEATABLE READ the identical collision raises SQLSTATE 40001 instead, so the handler must fold both shapes into one conflict response.
  4. Keep UNIQUE (resource_id, version) even though the predicate already serialises writers. It is what makes a lost update unwritable if any other path ever reaches the revision table, and it converts a logic bug into 23505 rather than into a silently missing history row.

Follow-up

  • A client sends the version it read ten minutes ago and the resource has moved three versions. What is in your 409 so it can resolve the conflict without a full re-fetch?
  • Two editors, two disjoint fields, no overlap. Does your answer still refuse the second write, and should it?

Denormalise tenant onto revisions and backfill it live

Hard · denormalisation · online migration · backfill

resource_revision (revision_id, resource_id, version, actor_user_id, change_kind, patch, request_id, created_at) has 400M rows and no tenant column; tenant_id lives only on resource. Two reads need it: a tenant-scoped audit feed ordered by created_at DESC, and an offboarding purge. Both join back to resource today. Justify adding tenant_id to resource_revision against those two reads, name the anomaly the copy introduces and the constraint that prevents it, then give the ordered migration for a live table taking 1.2k writes/second — the lock each step takes, how the backfill is batched, and where each step stops being reversible. PostgreSQL 16.

Approach

  1. Justify from the access path rather than from taste. Without the column, the audit feed either scans resource_revision by created_at and discards other tenants' rows, or resolves the tenant's resource_ids first and probes with them — both proportional to the tenant's whole history rather than to one page. With (tenant_id, created_at DESC, revision_id DESC) it is a seek that stops at 50 rows, and the purge becomes a ranged delete instead of a join.
  2. Name the cost exactly: a second copy of a fact can disagree with the first. Make the disagreement unwritable rather than documented — add UNIQUE (resource_id, tenant_id) on resource so it can serve as a foreign-key target, then FOREIGN KEY (resource_id, tenant_id) REFERENCES resource (resource_id, tenant_id) on the revision table. A revision can then only ever carry its parent's tenant.
  3. Step one, expand: ALTER TABLE resource_revision ADD COLUMN tenant_id BIGINT NULL, with no default, so it is a catalogue change and no rewrite. It still needs ACCESS EXCLUSIVE for an instant, and that instant queues behind the longest open transaction on the table while every later query queues behind it — set lock_timeout to 2s and retry rather than wait.
  4. Step two, dual-write: deploy the writer that populates tenant_id on every new revision while reads still use the join. Reversible by redeploying the previous build, because nothing reads the column yet.

Follow-up

  • The backfill is half finished and a rollback is required. What state is the table in, and what does the previous build do with a half-populated column?
  • How do you verify the backfill actually finished, given rows are still being inserted while it runs?

Explain the software development lifecycle.

Medium · Technical / Domain Questions

Approach

  1. Name the phases in order and say what each one produces: requirements (user stories and acceptance criteria), design (architecture, data model, API contracts), implementation, testing (unit, integration, user acceptance), deployment, then maintenance and support.
  2. Contrast two delivery models. Waterfall runs each phase once and hands off between them. Agile/Scrum, which the requirements candidates describe for this role list, runs all the phases inside every sprint, so feedback arrives in weeks rather than at the end.
  3. Show where quality is enforced: pull-request code review in Git, automated tests run by a CI pipeline on every merge, and a staging environment before production. Say that a defect costs more to fix the later in the cycle it is found.
  4. Anchor it in one of your own projects. Say which phase you owned, one thing that went wrong (for example a requirement missed in design and found in testing) and what you changed in the process afterwards.
  5. Mention that security and data-handling checks belong in the requirements and design phases, not only in testing. Software that handles patient data is a fair example to use.

Follow-up

  • How do the SDLC phases map onto a two-week Scrum sprint, and who owns each one?
  • A requirement changes after the code is written. What do you do, and which phases do you go back through?
  • Where in the lifecycle would you add security review and automated dependency scanning?

What are some common design patterns you have used?

Medium · Technical / Domain Questions

Approach

  1. Pick two or three patterns you have actually shipped, and for each one say the problem it solved in that codebase. A list of definitions is a weak answer.
  2. Strong examples for a Java/C#/.NET stack: Repository, which hides SQL Server or MySQL access behind an interface so services can be unit-tested with a fake; Dependency Injection, which is built into ASP.NET Core and is how Angular services are wired; Strategy, which swaps an algorithm (pricing, validation rules) without an if/else chain; Adapter, which wraps a third-party API behind your own interface.
  3. Name the cost of each pattern: extra indirection and more types to read. Say when you would not use one, for example a Repository over a single simple query, or a Factory with only one product.
  4. Know the classic pitfall: Singleton creates hidden global state and makes tests order-dependent. Preferring a DI-managed single-instance lifetime keeps the shared instance without the static coupling.
  5. Be ready to sketch one in code: an interface, two implementations and the call site that picks one.

Follow-up

  • What is the difference between the Strategy and State patterns?
  • Why do some engineers call Singleton an anti-pattern, and what would you use instead?
  • Tell me about a time a pattern made the code worse. What did you refactor it to?

How do you ensure the security of your applications?

Medium · Technical / Domain Questions

Approach

  1. Organise the answer by layer and use the OWASP Top 10 as a checklist: input handling, authentication, authorization, data protection, dependencies, and logging and monitoring.
  2. Injection and XSS: use parameterised queries or an ORM with bind parameters, never string-concatenated SQL. Angular sanitises interpolated values by default and React escapes JSX text by default, so the risky spots are bypasses such as bypassSecurityTrust* and dangerouslySetInnerHTML.
  3. Access control: authenticate with a standard such as OAuth 2.0 / OpenID Connect, then authorise every request on the server for the specific record. This prevents insecure direct object references, where a user changes an ID in the URL. Apply least privilege to database accounts and service roles.
  4. Data and secrets: TLS in transit, encryption at rest, secrets kept in a vault or the cloud provider's secret store rather than in Git, and no patient or personal data in logs. For US health data, mention HIPAA as the rule set that shapes these choices.
  5. Process: run dependency and static-analysis scans in CI/CD, include security in code review, and keep audit logs of who accessed sensitive records. Close with one concrete vulnerability you found or fixed.

Follow-up

  • How would you stop one logged-in user reading another patient's record by editing an ID in the request?
  • A secret was committed to the Git repository. What are your steps, in order?
  • What do you log for an audit trail, and what do you deliberately keep out of the logs?

Describe a challenging technical problem you faced and how you resolved it.

Medium · Technical / Domain Questions

Approach

  1. Choose a problem that was technically hard and where you personally led the diagnosis or the design, for example an intermittent production failure, a slow query, or a data-consistency bug. Say "I" for your own actions.
  2. Use STAR, but put most of the time into the Action: the symptoms, the hypotheses you ranked, the evidence that ruled each one in or out (logs, profiler, query plan, a minimal reproduction), and the fix you chose over the alternatives.
  3. Give the technical detail an engineer can check. For example: "The query did a full scan because the predicate wrapped the indexed column in a function. I rewrote it so the index applied and response time dropped from seconds to milliseconds." Use your own real numbers.
  4. End with a measured result and what you changed so it would not recur: a regression test, an alert, a code-review checklist item or a runbook.
  5. Avoid a story with no clear root cause, or one where the hard part was solved by someone else.

Follow-up

  • Which hypothesis did you rule out first, and what evidence did you use?
  • How did you confirm the fix worked in production and not only on your machine?
  • Knowing what you know now, what would you have done differently?

What programming languages are you most comfortable with and why?

Medium · Technical / Domain Questions

Approach

  1. Name one or two languages and rank them honestly. Ideally include Java, C# or Python, which candidates report among this role's requirements, and back each one with a project where you used it.
  2. Give reasons tied to real features. C#: LINQ, async/await, strong static typing and the .NET ecosystem. Java: the JVM, mature tooling and a large library ecosystem. Python: concise syntax for scripting and data work, though in standard CPython builds the GIL stops threads running Python bytecode in parallel, so CPU-bound work needs processes.
  3. Show depth with a detail most users get wrong. Java passes everything by value, including object references. C# separates value types (struct) from reference types (class). Python's default mutable arguments are evaluated once, at definition time.
  4. Name a weakness or trade-off of your main language and how you work around it.
  5. Say how you would ramp up in a language from the stack you know less well, such as TypeScript for Angular or React front ends.

Follow-up

  • What feature of your strongest language would you miss most in another one?
  • How does memory management work in that language, and when has garbage collection caused you a problem?
  • If you had to start a new service in C# or Python tomorrow, which would you pick and why?

Given a project with vague requirements, how would you proceed?

Medium · Problem-Solving / Case Studies

Approach

  1. Start by finding the people and the problem: who the users are, what they do today, what pain the project removes, and how success will be measured. Ask about hard constraints early: deadline, data sources, integrations and regulatory limits on patient data.
  2. Write your understanding down as user stories with acceptance criteria (Given/When/Then) plus an explicit list of assumptions and open questions. Get the product owner to confirm or correct it.
  3. Reduce the uncertainty with a thin vertical slice or clickable prototype that touches the real data path. Put it in front of users within a sprint rather than building the whole thing on guesses.
  4. Prioritise ruthlessly. Agree on a minimal first release (MoSCoW or similar), keep the rest in the backlog, and make the design easy to change where requirements are still open, for example behind interfaces or feature flags.
  5. Iterate in Scrum cadence: demo, collect feedback, update the stories, and flag scope changes openly with their cost in time.

Follow-up

  • Two stakeholders want contradictory things. How do you resolve it?
  • You have built a feature and the requirement changes. How do you handle the rework and the schedule?
  • How do you decide what goes into the first release?

How would you approach debugging a complex software issue?

Medium · Problem-Solving / Case Studies

Approach

  1. Reproduce first. Collect the exact error, stack trace, inputs and environment, and write the smallest reliable reproduction. If you cannot reproduce it, add targeted logging or correlation IDs and wait for the next occurrence.
  2. Narrow the search space. Ask what changed (deploy, config, data, dependency version). If a known-good version exists, use git bisect, which binary-searches the commits and needs about log2(n) test runs.
  3. Form ranked hypotheses and test them one at a time with the cheapest decisive check: a debugger breakpoint, an extra log line, a unit test that isolates the component, or the query plan for a slow SQL Server or MySQL query.
  4. Separate the root cause from the trigger. An intermittent failure often points to concurrency, a timeout or data-dependent paths, so compare a failing input with a passing one.
  5. Fix the cause, add a regression test that failed before the fix, verify in an environment like production, and record what you found for the team.

Follow-up

  • The bug only appears in production and never locally. What do you check?
  • The failure happens about once a day with no clear pattern. How do you capture it?
  • How do you prove your fix solved the problem, rather than the problem just not recurring yet?

Suggested practice checklist

Seven days built around the four reported rounds and the sixteen reported questions: coding fundamentals first, then technical explanations, then problem-solving, then behavioral stories, then a full spoken run.

Day 1 — Map the loop and pick your language

  • Write the four reported rounds, Initial Screening, Technical Assessment, Team Interviews and Management Interview, and next to each list the question types from this guide you would prepare for it.
  • Pick one of Java, C# or Python for coding answers and write down the syntax you need for a node class, a loop and a test.
  • List which of .NET, Angular, React, SQL Server, MySQL, Git and Agile or Scrum you have used, with one project example each, and mark the gaps.

Deliverable: A one-page loop map, a chosen coding language, and a stack inventory with one example per tool you have used.

Day 2 — Coding: linked list and binary search

  • Implement iterative linked-list reversal with previous, current and next references, then a recursive version, and note the recursion's stack cost.
  • Write tests for empty, single-node and two-node lists.
  • Implement binary search with an inclusive lo/hi invariant and a safe midpoint, then a variant that returns the first occurrence of a duplicated value.
  • Test missing values and one-element arrays.

Deliverable: Two working implementations (reversal and binary search) with their test cases listed.

Day 3 — Complexity and the development lifecycle

  • Write the time and space complexity of every function from day 2, counting the recursion stack, and explain O(n) against O(log n) with an example.
  • Outline the software development lifecycle (requirements, design, implementation, testing, deployment, maintenance) using a project you shipped.
  • Show where Agile or Scrum practices such as sprint planning, reviews and retrospectives fit in that project.

Deliverable: A complexity table for the day 2 code and a lifecycle answer anchored in one of your projects.

Day 4 — Design patterns, security, APIs and your languages

  • Choose three patterns you have used (for instance factory, strategy, observer or repository) and for each write the problem, the code shape and one trade-off.
  • Write a security checklist by layer: authentication and authorisation, input validation, parameterised queries, secrets, dependency updates, encryption, logging, and attach one example from your own work.
  • Design a small REST endpoint for an appointment or patient-lookup service: resource naming, status codes, pagination, authentication and idempotent retries, and be ready to explain each choice aloud.
  • Write the answer to which languages you are most comfortable with and why, naming one limitation of your main language.

Deliverable: A three-pattern sheet, a layered security checklist with an example, a sketched REST endpoint with its design choices, and a languages answer.

Day 5 — Debugging, vague requirements and a hard problem

  • Write your debugging sequence and apply it to a real past bug: reproduce, narrow, hypothesise, check logs and Git history, fix, add a regression test.
  • Write the clarifying questions you would ask a product manager for a vague project, and turn the answers into acceptance criteria and a small first release.
  • Outline the challenging-problem story: context, what made it hard, what you tried, the fix, what you changed afterwards.

Deliverable: A debugging checklist applied to one real bug, a requirements question list with acceptance criteria, and a hard-problem story outline.

Day 6 — Behavioral stories

  • Write situation, decision, action and result outlines for the difficult-team-member, tight-deadline, initiative and prioritisation questions.
  • Write the outlines for the teamwork question and the quality-versus-deadline trade-off.
  • Check that each outline says 'I' for your actions and includes a result you can verify.
  • Say each story aloud and cut any that runs without reaching the result.

Deliverable: Six spoken-ready story outlines (difficult team member, deadlines, initiative, prioritisation, teamwork, quality trade-off), with the overlap between stories marked.

Day 7 — Full spoken run

  • Record yourself answering in loop order: your CV walk, then reversal and binary search with complexity, then the security answer, then the debugging answer, then two behavioral stories.
  • Listen back and note where you hedged, rambled or skipped an edge case, and redo those answers.
  • Write five questions to ask the team and three for a manager.

Deliverable: One recorded run, a list of answers to redo, and a set of questions for the team and for management.

Behavioral preparation for the team and management rounds

Six of the sixteen reported questions are behavioral, and the Team Interviews and Management Interview are described in terms of teamwork and culture alignment. The questions cover conflict with a teammate, deadline pressure, initiative, prioritisation, what teamwork means to you, and a quality-versus-deadline trade-off. For a software role, the best stories show a decision you made, the people you worked with (engineers, product managers, designers), and a result you can state.

Describe a time when you had to work with a difficult team member.

Medium · Behavioral / Leadership

Approach

  1. Choose a real friction with a specific, observable behaviour, such as reviews left waiting for days, changes overwriting each other, or dismissive review comments. Describe it neutrally in one or two sentences, with no labels like 'lazy' or 'toxic'.
  2. Show your own actions in order: a private conversation to learn their side and constraints, a concrete working agreement (for example a pull request template or an agreed review turnaround), and escalation to your lead only after a direct attempt.
  3. Keep the delivery moving while it was unresolved: say how you protected the sprint, such as splitting the work so you were not blocked on them.
  4. Close with the result and what you learned about your own communication, backed by something checkable like fewer merge conflicts or reviews finished on time.
  5. The story that sinks this answer casts the other person as the villain and you as a bystander, or ends with no change.

Follow-up

  • What did the person say when you raised the issue with them?
  • Would you handle it differently if they were more senior than you?
  • How did you keep the project on track while it was still unresolved?

How do you handle tight deadlines?

Medium · Behavioral / Leadership

Approach

  1. Answer with one specific deadline, not a general philosophy. Name what was due, who was waiting, and what the risk was.
  2. Describe triage: split the work into must-have and can-defer, agree the cut with the product manager or stakeholder, and write the order down so everyone sees the same scope.
  3. Show early communication: you told stakeholders about the risk as soon as you saw it, not on the last day, and offered options such as reduced scope or a later date.
  4. Say what you protected under pressure, such as tests on code touching patient or financial data and a working deployment path, and what you cut instead.
  5. Avoid 'I worked nights' as the whole answer. Close with the outcome and the clean-up you scheduled afterwards.

Follow-up

  • What exactly did you cut, and who agreed to it?
  • What would you have done if the scope could not be reduced?
  • How do you tell a stakeholder that a date will slip?

Give an example of when you took initiative on a project.

Medium · Behavioral / Leadership

Approach

  1. Pick something nobody assigned: a repeated manual step, a flaky deployment, missing documentation, a recurring defect. Say how you noticed it and why it mattered to the team.
  2. Show how you sized it before acting: a rough estimate of effort, and a conversation with your lead so the work was visible and agreed rather than done in secret.
  3. Explain how you fitted it in alongside your assigned tasks and what you traded off to do it.
  4. Finish with a measurable result, such as hours saved per week, defects stopped or steps removed, and whether others adopted it. The weak version is extra work with no outcome or no buy-in.

Follow-up

  • How did you get your lead or the team to agree?
  • What did you stop doing to make time for it?
  • What would you have done if your lead had said no?

How do you prioritize your work when managing multiple tasks?

Medium · Behavioral / Leadership

Approach

  1. Give a working method, then show it on a real example. A workable method: list every task with its deadline, who depends on it and its impact, handle production defects and blockers first, and rank the rest by value against effort.
  2. Make the order visible, for example on a sprint board or ticket queue, and re-check it when something new arrives rather than silently reshuffling.
  3. Describe a conflict: when two people each say their request is urgent, ask them to agree the order, or take it to the person who owns both priorities, instead of picking a favourite.
  4. Use a three-task example with the final order and the reason for each position. A method with no example sounds rehearsed.

Follow-up

  • What do you do when two managers each say their task is first?
  • How do you handle a production bug that lands mid-sprint?
  • How do you decide what to drop when everything cannot fit?

What does teamwork mean to you?

Medium · Behavioral / Leadership

Approach

  1. Define teamwork through behaviours, then back each with something you did: giving and receiving code review, writing pull request descriptions that give context, pairing on unfamiliar areas, unblocking teammates.
  2. Include the cross-functional side the role is described as having: working with product managers and UX designers, for instance turning a vague request into acceptance criteria everyone signed off.
  3. Tell one short story where teamwork cost you something, such as accepting a design you disagreed with after the team decided, and say how you committed to it.
  4. The generic dictionary definition ('working toward a common goal') with no example is the weak answer; aim for two behaviours and one story.

Follow-up

  • Tell me about a time the team chose a direction you disagreed with.
  • How do you handle a teammate who is falling behind?
  • How do you give code review feedback that will be accepted?

Describe a time when you had to make a trade-off between software quality and meeting a deadline.

Medium · Problem-Solving / Case Studies

Approach

  1. Name the exact shortcut, for example deferring a refactor, reducing test coverage on a low-risk path, or shipping a feature with a known limitation. Vague 'we cut corners' answers sound evasive.
  2. Say what you refused to compromise (data integrity, access control, anything touching patient information) and why that line was non-negotiable.
  3. Show how the decision was made and recorded: who agreed, and the follow-up ticket you filed so the debt was tracked.
  4. Report the aftermath honestly: whether the debt was repaid, or whether the shortcut caused an incident. Claiming you never compromise on quality, or hiding a defect that shipped, is the mistake that sinks the story.

Follow-up

  • How did you decide which corners were safe to cut?
  • Was the debt repaid, and when?
  • Would you make the same call again?