cswork / libraryOpen practice workspace

Interview guides · ABC Technologies

ABC Technologies Software Engineer Interview Guide

ABC Technologies Software Engineer interview guide: the 3 reported rounds, reported coding and behavioral questions with answer approaches, and a 7-day plan.

The 60-second brief

Candidate reports describe ABC Technologies as a company that builds software applications and products for a mixed set of clients, with flagship products plus existing systems that need maintenance. Reports do not name the products, the customers or a specific tech stack, and one candidate review refers to automotive programs, so ask the recruiter which product area your team covers. The Software Engineer role is described as design, development, testing and deployment of applications, ongoing improvement of existing systems, peer code review, and day-to-day work with product managers, designers and QA.

This guide is for candidates interviewing for a Software Engineer position at ABC Technologies. It covers the three reported rounds, the languages and tools candidates say the role lists (Java, Python or C++, SQL, Agile or Scrum, version control, and cloud, DevOps and front-end skills as extras), and question-by-question preparation for the reported technical, problem-solving, coding and behavioral questions.

Candidates report three rounds over roughly 3-5 weeks: an Initial Screening Call, Technical Interviews and a Final Round that may include a behavioral assessment.

Focus areas

  • Quality Engineering
  • Quality Management (Quality Manager Interviews)
  • Interview Preparation

Overview

The reported questions for this loop are broad rather than tied to one product. They fall into four groups: process and quality questions (the software development lifecycle, software quality and reliability, success metrics), problem-solving questions (debugging a complex issue, designing a solution, improving an existing application), coding fundamentals (reversing a string, stack versus queue, sorting complexities, binary search, optimizing your own code), and behavioral questions about conflict, leading, prioritizing, adapting and motivation. Because the questions are open-ended, your preparation should be a set of concrete projects and examples you can reuse across several of them.

The role description candidates report is a full-cycle one: you code, test and deploy, you review other people's code, and you improve systems that already exist. Expect to explain how you work, not only what you can code. For each project on your CV, be ready to say how it was tested, how it was reviewed and released, what broke, and what you would change.

On the technical side, the requirements candidates describe name Java, Python or C++, familiarity with databases such as SQL, and knowledge of Agile, Scrum or similar methodologies. Pick one language and be fluent enough to write a small function with tests in a shared editor without looking anything up. Brush up on SQL joins, aggregation and indexing, and be ready to discuss version control and dependency management in your own projects.

The final round may include a behavioral assessment, so the last two or three days of preparation should go to written stories. The five reported behavioral questions can be covered with four or five stories if each one is chosen to flex: a conflict you resolved, a project you led, a stretch where you juggled competing work, and a change you adapted to. Practise them out loud until each one runs in a couple of minutes.

The ABC Technologies interview process

Candidates report three rounds across roughly 3-5 weeks. The description of each stage below is what candidates say about it, followed by how to prepare.

Initial Screening Call

The process is reported to start with an Initial Screening Call that covers your background and fit for the role. Candidates describe no coding task for this stage, so treat it as the place where your CV is matched against the role's listed requirements: a language such as Java, Python or C++, SQL, and a development methodology such as Agile or Scrum. Come with a short, structured account of your experience and a few questions about the team and the rest of the loop.

What to demonstrate

  • Your background and fit for the Software Engineer role, as reported
  • How clearly you describe your own projects and the part you personally did
  • Match between your experience and the listed requirements (languages, SQL, methodologies)

How to prepare

  • Write a two-minute walkthrough of your CV that names your strongest language, one shipped project and one example of working with product, design or QA colleagues.
  • Prepare a one-sentence answer to the question about which languages you are most comfortable with and why, backed by a project where you used it.
  • List the requirements candidates describe (Java, Python or C++, SQL, Agile or Scrum, version control) and note one concrete example of your own for each.
  • Write down questions for the recruiter: which product area the team covers, what the Technical Interviews involve, and how the hybrid arrangement candidates mention works for that team.

Technical Interviews

Candidates report multiple Technical Interviews aimed at technical skills and problem-solving ability. Reported questions that fit this format include coding fundamentals (reversing a string, stack versus queue, sorting complexities, binary search, optimizing code), debugging and design questions, and process questions about the software development lifecycle and software quality. Approach each by clarifying the problem, stating assumptions, working an example by hand, then coding or outlining and testing against edge cases.

What to demonstrate

  • Working code and sound reasoning on coding-fundamentals questions
  • A structured approach to debugging, design and improvement problems
  • Ability to explain technical decisions, such as why you chose a language or data structure
  • Working knowledge of quality practices and the development lifecycle

How to prepare

  • Implement reverse string, a stack and a queue, and iterative binary search in your chosen language, each with tests for empty input, one element and duplicates.
  • Memorize a sorting table (average, worst case, memory, stability) for insertion, merge, quick and heap sort, and say when you would pick each.
  • Write a one-page debugging sequence: reproduce, narrow the change, inspect logs and metrics, form a hypothesis, fix, add a regression test.

Final Round

The Final Round is reported to possibly include a behavioral assessment of interpersonal skills and cultural fit. The reported behavioral questions ask about team conflict, taking the lead on a project, prioritizing across several projects, adapting to a significant change, and what motivates you. Answer with a short situation, then spend most of your time on what you decided and did, the result, and what you learned.

What to demonstrate

  • Interpersonal skills, as the behavioral assessment is reported to cover
  • How you describe conflict, leadership and change from your own experience
  • Consistency between your stories and the CV you presented earlier

How to prepare

  • Build four or five STAR stories and map each one to the reported prompts so that every question has a primary story and a backup.
  • Rehearse the conflict story until you can describe the other person's position fairly and the evidence that settled the disagreement.
  • Prepare an example of explaining a technical idea to a non-technical colleague, since collaboration with product, design and QA is part of the role description.
  • Write a two-sentence answer to the motivation question that points at specific parts of engineering work you have enjoyed.

Where candidates lose points

Answering the language question with a list (Java, Python, C++) and no evidence

Pick one language, name a project where you used it, and give one real strength and one limit compared with another language you know. Then be ready to write a small function in it with tests.

Reciting the software development lifecycle as a textbook list of phases

Walk through a project you shipped: how requirements arrived, how work was split in Agile or Scrum, how it was tested and reviewed, how it was released and what you changed afterwards.

Writing binary search or a string reversal without clarifying input or testing edge cases

Ask about sorted order, duplicates and empty input first. State the loop invariant and midpoint calculation, then test empty, one element, target at both ends and absent target.

Quoting sorting complexities without stating best case, worst case, memory or stability

Memorize a table for insertion, merge, quick and heap sort, including quicksort's quadratic worst case and merge sort's extra memory, and say which input would make you choose each.

Telling behavioral stories in which the team did everything, or where the conflict partner is the villain

Rewrite each story so your decision and action are explicit, describe the other side fairly, and finish with the result and one thing you would change.

Questions & practice

Write a function to reverse a string in your preferred programming language.

Medium · Coding / Algorithms

Approach

  1. Clarify the input first: can it be empty or null, is in-place reversal wanted, and does it contain non-ASCII text.
  2. Core solution: two pointers from both ends swapping characters until they meet, O(n) time and O(1) extra space on a mutable array. Java strings are immutable, so work on toCharArray() or use new StringBuilder(s).reverse(); in Python, s[::-1] or ''.join(reversed(s)) is O(n).
  3. Avoid building the result with repeated concatenation in a loop: in Java that copies the string each time and is O(n^2) overall; a recursive version uses O(n) stack depth.
  4. Unicode edge cases: C++ std::reverse on a std::string reverses bytes and corrupts multi-byte UTF-8; Java's StringBuilder.reverse keeps surrogate pairs together; but code-point reversal, as in Python, still breaks combining marks and emoji sequences, which need grapheme-cluster handling.

Follow-up

  • Reverse the order of words in a sentence in place.
  • Use the same idea to check whether a string is a palindrome, ignoring non-alphanumeric characters.
  • How would you reverse a string that is too large to fit in memory?

Explain the differences between a stack and a queue.

Medium · Coding / Algorithms

Approach

  1. A stack is last-in, first-out (push, pop, peek at the top); a queue is first-in, first-out (enqueue at the back, dequeue from the front). Both give O(1) core operations when implemented well.
  2. Implementations: a stack on a dynamic array has amortised O(1) push; a queue needs a linked list or a circular buffer, because removing from the front of a plain array is O(n), which is why Python's list.pop(0) is slow and collections.deque is the right tool.
  3. Language specifics: in Java prefer ArrayDeque for both over the legacy Stack class, which extends the synchronized Vector; C++ has std::stack and std::queue adapters over std::deque by default.
  4. Uses: stacks for function calls, undo, depth-first search, bracket matching and expression evaluation; queues for breadth-first search, task scheduling and producer-consumer buffers.

Follow-up

  • Implement a queue using two stacks, and explain why dequeue is amortised O(1).
  • Design a stack that also returns its minimum in O(1).
  • How would you make a bounded queue safe for several producer and consumer threads?

What are the time complexities of common sorting algorithms?

Medium · Coding / Algorithms

Approach

  1. Simple sorts: bubble, selection and insertion sort are O(n^2) on average and worst case; insertion sort is O(n) on already sorted input and stable, which is why it is used for small or nearly sorted arrays.
  2. Merge sort is O(n log n) in every case and stable but needs O(n) extra space; heapsort is O(n log n) worst case in O(1) extra space but not stable; quicksort averages O(n log n) with good cache behaviour but degrades to O(n^2) with bad pivots, and is not stable.
  3. Comparison sorts cannot beat O(n log n) in the worst case; counting sort (O(n + k)) and radix sort (O(d(n + k))) get around it for integer keys in a bounded range.
  4. Know your library: Python's sort is Timsort (stable, O(n log n) worst, O(n) on sorted runs); Java's Arrays.sort uses dual-pivot quicksort for primitives and Timsort for objects; C++ std::sort is introsort with O(n log n) worst case and is not stable, while std::stable_sort is.

Follow-up

  • Why is quicksort often faster than merge sort in practice despite its worse worst case?
  • When does stability matter? Give a concrete example.
  • How would you sort a file much larger than available memory?

How would you optimize a piece of code you wrote?

Medium · Coding / Algorithms

Approach

  1. Measure before touching code: define the goal (latency, throughput, memory), build a benchmark on realistic data, and profile to find the hotspot with cProfile, Java Flight Recorder or VisualVM, or perf for C++.
  2. Fix the algorithm first: replace nested-loop lookups (O(n^2)) with a hash map (O(n)), sort once instead of repeatedly, and pick data structures that match the access pattern.
  3. Remove repeated work: cache or memoise pure results, move invariant computations out of loops, batch I/O, and fix N+1 database queries with a join or a batched query plus the right index.
  4. Then language-level details, such as a StringBuilder or ''.join instead of string concatenation in a loop. Rerun the tests and the benchmark after each change, and stop when the goal is met so readability does not suffer.

Follow-up

  • How do you decide an optimisation is not worth its complexity?
  • Give an example where you traded memory for speed or the reverse.
  • Your change made a microbenchmark faster but production slower: what could explain it?

Can you implement a binary search algorithm?

Medium · Coding / Algorithms

Approach

  1. State the precondition (sorted input) and the invariant: the target, if present, is always within [lo, hi]. Loop while lo <= hi, compare the middle element, and move lo = mid + 1 or hi = mid - 1; return -1 when the range is empty.
  2. Compute mid as lo + (hi - lo) / 2 so the sum cannot overflow a 32-bit int in Java or C++; time is O(log n), space O(1) iterative or O(log n) recursive.
  3. Handle duplicates with the lower-bound form: a half-open range [lo, hi), loop while lo < hi, set hi = mid when a[mid] >= target, else lo = mid + 1; it returns the first index whose value is not below the target.
  4. Test edge cases aloud: empty array, a single element, target smaller or larger than every element, and duplicates. Mention the library versions: Python's bisect.bisect_left, C++ std::lower_bound, and Java's Arrays.binarySearch, which returns -(insertion point) - 1 when the key is missing.

Follow-up

  • Find the first and last position of a target in a sorted array with duplicates.
  • Search for a target in a sorted array that has been rotated.
  • Use binary search on the answer, for example computing an integer square root or the minimum capacity that meets a constraint.

Keep soft-deleted accounts from blocking re-registration

Easy · soft delete · unique constraints · engine differences

app_user holds user_id, tenant_id, email CITEXT, password_hash (NULL for SSO principals), email_verified_at, auth_version, status ('invited','active','suspended','deactivated'), created_at, updated_at, deleted_at. Two live accounts for one address inside a tenant must be impossible, but an address freed by a soft delete must be reusable, and the same tenant may delete and re-register it repeatedly. Write the uniqueness DDL for PostgreSQL 16, then the equivalent for MySQL 8 where partial indexes do not exist, and say what each permits once three deleted rows already hold that address.

Approach

  1. Start from what is actually unique: not (tenant_id, email), but (tenant_id, email) among live rows. PostgreSQL says that directly — CREATE UNIQUE INDEX app_user_live_email ON app_user (tenant_id, email) WHERE deleted_at IS NULL. A full constraint over the same two columns burns the address permanently the first time someone deletes an account.
  2. Keep case-insensitivity in the type or the index, never in the application: CITEXT as given, or UNIQUE (tenant_id, lower(email)) as an expression index where the extension is unavailable. A case-sensitive unique column is exactly how two accounts for one human appear.
  3. For MySQL 8 the predicate has to move inside the key: add a discriminator column that is a constant 0 while the row is live and is set to user_id on delete, with UNIQUE (tenant_id, email, deleted_marker). Live rows share the constant and still collide; deleted rows differ from each other and stop colliding.
  4. State the NULL variant and its dependency: leaving the marker NULL for deleted rows also works, because a unique index treats NULLs as distinct — true in MySQL, and true in PostgreSQL only under the default NULLS DISTINCT, which PostgreSQL 15 lets you reverse. Check the polarity against the three existing deleted rows: constant-on-live is what preserves the collision you want, and reversing it silently admits duplicate live accounts.

Follow-up

  • A deleted account re-registers with the same address the next day. Do the old resource rows follow the new user_id, and how does the API keep the two principals apart?
  • How do you honour an erasure request while resource_revision.actor_user_id still references this table?

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?

Can you explain the software development lifecycle?

Medium · Technical / Domain Questions

Approach

  1. Name the phases in order and the artefact each one produces: requirements (user stories or a spec), design (interfaces, data model), implementation (reviewed code), testing (passing suites, defect log), deployment (a release), maintenance (fixes and change requests that feed the next cycle).
  2. Contrast the models: waterfall runs each phase once and suits fixed, well-understood requirements; iterative models such as Scrum repeat every phase inside short sprints with a working increment at the end of each.
  3. Mention the V-model idea that each phase has a matching test level (requirements to acceptance tests, design to integration tests, code to unit tests), so test planning starts early.
  4. Tie it to your own work: say which model your last team used, where code review and CI sat in it, and one change you made to how a phase ran.

Follow-up

  • When would you pick a sequential model over Scrum for a project?
  • Where in the lifecycle are defects cheapest to catch, and what did you do to catch them there?
  • How does maintenance work get prioritised against new features in a sprint-based process?

How do you ensure software quality and reliability?

Medium · Technical / Domain Questions

Approach

  1. Layer the testing: many fast unit tests, fewer integration tests against real dependencies such as the database, a small set of end-to-end tests on the main user paths, and a regression test for every bug fixed.
  2. Gate merges: CI runs the suite, linters and static analysis on each pull request, and code review checks design and edge cases rather than style the linter already covers.
  3. Cover reliability after release: structured logs, metrics and alerts on error rate and latency, staged rollouts or feature flags so a bad change can be turned off, and a tested rollback path.
  4. Close the loop with numbers you can quote, such as escaped defects per release, change failure rate and time to restore service, and a blameless review after each incident that produces a concrete fix.

Follow-up

  • How do you deal with a flaky test that blocks the pipeline?
  • What coverage target would you set, and why is line coverage alone misleading?
  • A bug reached production despite all of this: what do you change?

Describe a challenging technical problem you've solved.

Medium · Technical / Domain Questions

Approach

  1. Choose a problem with real technical depth (a race condition, a memory leak, a slow query, a data migration) where you personally did the diagnosis or the design, and say the stakes in one sentence.
  2. Walk the reasoning: the symptom, the hypotheses you tested and how you ruled each out, and the evidence that pinned the root cause.
  3. Explain the fix and the trade-off you accepted, such as added memory for a cache, a schema change that needed a backfill, or a lock that cost throughput.
  4. End with a measured result (latency before and after, error rate, hours saved) and what you changed so the class of problem does not recur, such as a test, an alert or a code review checklist item.

Follow-up

  • What alternative fix did you reject, and why?
  • How did you confirm your change caused the improvement and not something else?
  • What would you do differently if the same problem appeared today?

What programming languages are you most comfortable with, and why?

Medium · Technical / Domain Questions

Approach

  1. Lead with one language from the stack candidates report for this role (Java, Python or C++) and give reasons tied to concrete properties, not taste.
  2. For Java: static typing and the JVM garbage collector, the collections and java.util.concurrent libraries, and a gotcha you know, such as overriding equals without hashCode breaking HashMap lookups.
  3. For Python: fast iteration and a large standard library, the limit that threads in the standard CPython build do not run CPU-bound code in parallel because of the GIL (so you use multiprocessing), and the mutable default argument trap.
  4. For C++: RAII and smart pointers for deterministic resource release, control over memory layout, and pitfalls such as iterator invalidation when a std::vector reallocates. Close by saying which language you would pick for which kind of task.

Follow-up

  • What do you dislike about your strongest language, and how do you work around it?
  • How does memory management differ between your main language and one of the others?
  • How would you get productive in a language you have not used before?

How do you stay updated with new technologies and industry trends?

Medium · Technical / Domain Questions

Approach

  1. Name specific sources you actually use: release notes for your language and frameworks (new Java LTS releases, Python PEPs), official documentation, conference talks and engineering write-ups from teams running similar systems.
  2. Show how you evaluate something new: a small spike or prototype against a real problem, a comparison with the current tool on the criteria that matter (maintenance, community support, migration cost).
  3. Give one example where you adopted a technology and what it changed, and ideally one where you decided not to and why.
  4. Connect learning to the role's listed areas, such as SQL, cloud platforms like AWS or Azure, or DevOps tooling, and say what you studied recently in one of them.

Follow-up

  • What is the last thing you learned that you applied at work?
  • How do you decide a new tool is not worth adopting?
  • How do you share what you learn with your team?

Describe how you would design a software solution for a given problem.

Medium · Problem-Solving / Case Studies

Approach

  1. Clarify requirements first: users, the core operations, expected load, latency and consistency needs, and what is out of scope; write these down before choosing components.
  2. Define the interfaces (API endpoints or module boundaries) and the data model: tables, keys and the indexes the main queries need, since the role lists SQL databases.
  3. Sketch the components and the request flow, then add only what the requirements justify: a cache for hot reads, a queue for slow or retryable work, horizontal scaling behind a load balancer.
  4. Cover failure and change: what happens when a dependency is down, how the system is tested and deployed, and the main trade-off you made (for example a relational schema over a document store, and why).

Follow-up

  • What breaks first if traffic grows tenfold?
  • How would you change the design if strong consistency were no longer needed?
  • How would you test this system before release?

If you were tasked with improving an existing application, what steps would you take?

Medium · Problem-Solving / Case Studies

Approach

  1. Measure before changing anything: collect baseline metrics (latency, error rate, resource use), profile hot paths, and read bug reports and user feedback to find where the real pain is.
  2. Rank the candidates by impact against effort and risk, and agree the order with the product owner rather than fixing whatever is most interesting.
  3. Build a safety net first: if tests are missing, add characterisation tests that pin the current behaviour before refactoring.
  4. Change incrementally behind feature flags or with the strangler fig pattern (route traffic to new pieces one at a time) rather than a full rewrite, and compare each step against the baseline.

Follow-up

  • When is a rewrite justified over incremental change?
  • How do you improve code that has no tests at all?
  • How would you convince stakeholders to spend time on technical debt?

Discuss a project where you had to think outside the box to meet a deadline.

Medium · Problem-Solving / Case Studies

Approach

  1. Pick a story where the unusual idea was technical and yours: reusing an existing library or service, cutting scope to the core flow, precomputing results in a batch job instead of computing them live, or automating a manual step.
  2. Explain the constraint clearly (the deadline, what made the obvious plan too slow) and the alternatives you weighed before choosing.
  3. State the trade-off honestly: the technical debt or limitation you accepted, who agreed to it, and whether and when you paid it back.
  4. Quantify the outcome (shipped on the date, time saved, defects after release) and avoid making overtime or silently skipping tests the clever part of the story.

Follow-up

  • What did you give up to hit the date, and was it the right call?
  • Did the shortcut cause problems later?
  • Would you take the same approach without the deadline?

What metrics would you use to measure the success of a software project?

Medium · Problem-Solving / Case Studies

Approach

  1. Split metrics into delivery, quality and outcome rather than giving one number.
  2. Delivery: the four DORA metrics (deployment frequency, lead time for changes, change failure rate, time to restore service) plus schedule and budget against plan.
  3. Quality and reliability: escaped defects per release, incident count and severity, error rate and p95 latency against a target.
  4. Outcome: whether users got value, such as adoption, task completion rate, support tickets or the business goal the project was funded for. Pair a leading metric with a lagging one, and name metrics you would avoid, such as lines of code or comparing story points across teams.

Follow-up

  • If you could track only one metric, which would it be and why?
  • How do you stop a team from gaming a metric?
  • How would you measure success before the project launches?

How would you approach debugging a complex software issue?

Medium · Problem-Solving / Case Studies

Approach

  1. Reproduce it reliably first, then shrink the reproduction to the smallest input or environment that still fails; an issue you cannot trigger cannot be confirmed fixed.
  2. Gather evidence before theorising: logs, stack traces, metrics and what changed recently. If a known-good version exists, bisect the commits (git bisect) to find the change that introduced it.
  3. Form one hypothesis at a time and test it by changing a single variable, using a debugger, breakpoints or targeted logging; for intermittent failures, check concurrency, timing, configuration and environment differences.
  4. Fix the root cause rather than the symptom, add a regression test that fails without the fix, and record what would have caught it earlier.

Follow-up

  • The issue only happens in production and never locally: what do you do?
  • How do you tell a real cause from a coincidence in the logs?
  • How would you debug a suspected race condition?

Suggested practice checklist

The plan follows the three reported rounds: screening material first, then coding fundamentals, SQL, process and design questions for the Technical Interviews, then behavioral stories for the Final Round.

Day 1 — Map the loop and match your CV to the requirements

  • Write the reported sequence (Initial Screening Call, Technical Interviews, Final Round) and the question groups beside it.
  • List the requirements candidates describe (Java, Python or C++, SQL, Agile or Scrum, version control) and write one example from your own work next to each.
  • Write and say aloud your answer to the question about which programming languages you are most comfortable with and why.

Deliverable: A one-page loop map, a requirement-to-example table with the gaps marked, and a spoken language answer.

Day 2 — Coding fundamentals: strings, stacks and queues

  • Implement the function to reverse a string in your chosen language, then redo it in place and discuss Unicode and immutable strings.
  • Implement a stack and a queue (array-backed and linked) and write the answer to how they differ, with a use case for each.
  • Write tests for empty input, one element and repeated values.

Deliverable: Working reverse, stack and queue code with a passing test file and a spoken stack-versus-queue answer.

Day 3 — Sorting, binary search and optimizing code

  • Build a table of average case, worst case, memory and stability for insertion, merge, quick and heap sort.
  • Implement iterative binary search, then a variant that returns the first occurrence of a duplicate; test off-by-one cases.
  • Take a function you wrote earlier, profile it and write a before-and-after optimization note.

Deliverable: A sorting table, a passing binary search with tests and one written optimization case.

Day 4 — SQL and database fluency

  • Write a short list of joins, aggregation and indexing points you can explain without notes.

Deliverable: Two solved SQL practice questions with a written explanation each.

Day 5 — Process, quality and debugging

  • Outline the software development lifecycle using one project of yours, including how it ran in Agile or Scrum.
  • Write your quality checklist: unit and integration tests, code review, CI and monitoring, plus the metrics you would use to judge a project's success.
  • Write a debugging sequence and apply it to a real bug you fixed.

Deliverable: Three one-page outlines: lifecycle, quality and reliability with success metrics, and debugging.

Day 6 — Design, improvement and project stories

  • Outline a solution for a design problem you choose: users, data, components and failure modes.
  • Write the steps you would take to improve an existing application: measure, find the bottleneck, change one thing, verify.
  • Prepare your challenging technical problem story and your meeting-a-deadline story, and write your answer on how you keep up with new technologies.

Deliverable: A design outline, an improvement checklist and two written project stories.

Day 7 — Behavioral rehearsal and full mock

  • Write STAR cards for conflict, taking the lead, prioritizing, adapting to change and motivation.
  • Record yourself answering each reported behavioral question aloud and cut any answer that has no personal decision in it.
  • Run a full mock: a two-minute CV walkthrough, one coding question and two behavioral questions.

Deliverable: Five STAR cards, five recorded answers and one full mock.

Behavioral stories for the final round

The Final Round is reported to possibly include a behavioral assessment of interpersonal skills and cultural fit, and the role description centres on work with product managers, designers and QA. Prepare stories that show your own decisions in team settings, then rehearse them until each runs in a couple of minutes.

  1. Describe a time when you had to explain a complex technical concept to a non-technical audience.

Tell me about a time you faced a conflict in a team setting. How did you handle it?

Medium · Behavioral / Leadership

Approach

  1. Choose a conflict with real stakes, such as an API contract, a code review dispute, a release-scope argument with a product manager or a testing gap QA raised. A trivial personality clash gives you nothing to show.
  2. Open with two sentences of situation, then state both positions fairly, including the strongest point of the other person's view. A story that makes them a villain sinks the answer.
  3. Describe your actions in order: you talked to them directly first, agreed on what decision criteria mattered (risk, delivery date, maintainability), and settled it with evidence such as a quick prototype, a benchmark or a bug count.
  4. Close with the result and the relationship afterwards: what was decided, whether you were the one who changed your mind, and what you now do earlier to avoid the same clash.

Follow-up

  • What would you have done if they still disagreed after you showed the evidence?
  • Was any part of the conflict your fault?
  • How did you work with that person on the next project?

Describe a situation where you took the lead on a project.

Medium · Behavioral / Leadership

Approach

  1. Pick a project where you set direction without needing a formal title: scoping a feature, running a migration or coordinating a release across engineers, QA and a designer.
  2. Say what you decided, not what the team did. Cover how you broke the work into pieces, who took which piece and why, and which checkpoints you set (demo dates, review gates, a test plan).
  3. Include one risk you spotted early and how you handled it, such as an unclear requirement or a dependency on another team, and how you kept stakeholders informed.
  4. State the outcome in concrete terms (shipped, rolled back, delayed and why) and one thing you would run differently. Using only the word we for the whole story hides your role.

Follow-up

  • How did you handle a teammate who fell behind?
  • What went wrong during the project, and when did you find out?
  • How did you decide what to cut when time ran short?

How do you prioritize your tasks when working on multiple projects?

Medium · Behavioral / Leadership

Approach

  1. This is a how-do-you question, so state your method and then prove it with one real week. Start by listing every commitment with its deadline, who is waiting on it and what happens if it slips.
  2. Rank by impact and urgency, and treat blocked work as a separate class: a review a teammate needs or a bug that stops QA often outranks your own feature because it unblocks others.
  3. Show the communication step: when two commitments collide, tell the people involved what moves and offer a new date, instead of silently missing one. Name how you did it with a product manager or lead.
  4. Give the example: for instance a production defect, a feature deadline and code reviews competing in the same week, what you did first, what you postponed, and the result. Mention how you protect focus time and re-rank when something new arrives.

Follow-up

  • Two people each tell you their task is the top priority. What do you do?
  • What do you drop when an urgent bug lands mid-sprint?
  • How do you keep code reviews from slipping when you are close to a deadline?

Can you give an example of how you adapted to a significant change at work?

Medium · Behavioral / Leadership

Approach

  1. Choose a change that cost you something: a requirement that reversed late in a project, a move to a new language or framework, a reorganization or a new process such as Scrum. A change that did not affect your work is weak.
  2. Be honest about your first reaction, then describe what you did in the first days: asked why it was happening, identified what had to be learned, and re-planned your own work around it.
  3. Show you helped others adapt too, for example by writing down what you learned, pairing with a teammate or flagging a risk the change created.
  4. End with the measurable outcome and what you took from it. Complaining about the change, or claiming it was easy, makes the story unconvincing.

Follow-up

  • What did you give up because of the change?
  • What would you have done if you disagreed with it?
  • How do you learn a new technology quickly when a deadline is fixed?

What motivates you to perform well?

Medium · Behavioral / Leadership

Approach

  1. Give a specific answer rather than a trait list. Name two or three things that drive you in engineering, such as shipping something users touch, removing a recurring failure, or learning a system well enough to fix it.
  2. Back each with a short example from your own work, so the answer is evidence and not a slogan. A single sentence about passion or salary says nothing checkable.
  3. Connect it to the work candidates describe for the role, such as improving existing systems, code review and working with product, design and QA, without claiming knowledge of the company's values.
  4. Be ready to say what drains you and how you handle it, which makes the answer credible.

Follow-up

  • Tell me about a time your motivation was low. What did you do?
  • What kind of work would you find hard to stay motivated on?
  • How does that motivation show up in how you review code or test your own work?