voize · Software Engineer
Updated · 2026-09-16

voize Software Engineer
Interview Questions & Guide 2026

THE 60-SECOND BRIEF

voize builds an AI companion for nurses, beginning with documentation workflows.

This guide focuses on fullstack preparation: versioned edits, reliable requests and interfaces that make record state clear.

Design a reliable save flow, resolve competing edits, and keep the interface clear when requests fail.

Versioned editsRequest reliabilityClear interfaces

15 min read

Practice 13 Software Engineer prompts
13Practice promptsAcross five skill areas
4With worked solutionsIncluded in the practice prompts

“Saved” is a promise the interface must be able to keep. For a documentation product, a successful button animation is not enough. Practise explaining which record was saved, under which version and what the user sees if the request times out. That turns an ordinary CRUD exercise into a useful fullstack discussion.

Connect your preparation to the work. voize’s Senior Fullstack posting names React/TypeScript, Kotlin services and tooling for annotation and model evaluation. The careers page describes its focus on nursing workflows. Use the exercises below to practise versioned data, clear interfaces and reliable updates.

Choose the right role boundary. This guide targets general fullstack reasoning. A mobile role may put more emphasis on device lifecycle and Kotlin; a backend role may prioritize storage and concurrency. Do not treat a single senior posting as a requirement list for every opening. Use your exact role description to decide which exercises deserve the deepest rehearsal.

Practise with synthetic records. Use invented note IDs, versions and text. Define when an edit becomes server-confirmed and how a person can recover unsaved work.

Connect implementation to the user’s next action. If a save conflicts, what should the person do next? If the network disappears, which work remains available? State that behavior before selecting a database or frontend library. Then test a slow response, two open tabs and a repeated click.

Visual walkthrough

Explore your preparation priorities

Choose a focus to see how to prepare.

STAGE 1 / 3

Define what saved means

Product reasoning: Give each visible state an actionable meaning.

YOUR PREPARATION
  • Sketch editing, saving, saved and conflict states before writing a component.
  • Describe what remains visible when a request fails after the server has committed.
Try a related exerciseKeep the highest revision for each note

Choose a focus, review the preparation steps, then try the linked practice question.

01

Define what saved means

editorial

Start with one edit and one explicit promise to the user. Separate locally entered text from server-confirmed text. Decide whether leaving the page discards work, preserves it locally or blocks navigation. This is a design exercise; the best answer depends on the stated constraints.

What to demonstrate

  • Product reasoning: Give each visible state an actionable meaning.
  • Boundaries: Identify the record version to which a response belongs.

How to prepare

  • Sketch editing, saving, saved and conflict states before writing a component.
  • Describe what remains visible when a request fails after the server has committed.
Read the source
02

Protect concurrent updates

editorial

Now add a second editor. Both read version three, but only one can replace it without seeing the other change. Choose an explicit conflict rule. A last-write-wins policy may be simple, yet it can silently erase a valid edit.

What to demonstrate

  • Concurrency: Make version comparison and update atomic.
  • API design: Distinguish a conflict from an authentication failure or a temporary network error.

How to prepare

  • Write a conditional update and explain the meaning of zero affected rows.
  • Attempt the revision-selection SQL and retry-deduplication exercises. Test two edits based on the same version.
Read the source
03

Make failure understandable

editorial

Finish by describing the interface after a late response or conflict. Keep the person’s unsaved text available while showing enough context to resolve the problem. Error handling is incomplete if the user can only retry blindly and risk repeating the same mistake.

What to demonstrate

  • Clarity: Offer a next action without claiming success prematurely.
  • Debugging: Trace the request identity and version without recording sensitive text in logs.

How to prepare

  • Prepare a collaboration story where feedback changed the behavior you shipped.
  • Reproduce two requests completing in reverse order, then explain why the older result must not replace the newer state.
Read the source

PracHub editorial advice for the preparation topics above.

Visual walkthrough

What happens when two people edit the same note?

Choose a scenario to trace what changes.

You open a shared note and edit its text. Nobody else changes the saved note before you press Save.

  1. 01You edit a shared noteThe app remembers which saved revision you opened, along with your unsaved changes.
  2. 02The saved note is unchangedThe server atomically checks that nobody has saved a newer revision since you opened it.
  3. 03Your changes are savedThe server stores the edited note as the next revision and returns confirmation to the app.
WHAT YOUR SYSTEM SHOULD DO

Save only if the note still matches the revision you opened. Confirm success after the server accepts the change.

PracHub practice scenario: two colleagues can edit the same note. A revision number identifies a saved copy of that note, not an app release. Compare a successful save, a conflicting edit and a lost response.

01

Showing saved before confirmation

Separate optimistic display from durable success. Give pending work its own state. If the request times out, recover by its identity before assuming either failure or success.

02

Overwriting a newer edit

Require an expected version. Perform the check and update together. A client-side comparison followed by an unconditional write still has a race.

03

Using record text as diagnostic context

Log identifiers and state transitions. For this exercise, synthetic data is enough to reproduce the bug. Build debugging around request IDs, versions and error classes rather than sensitive text.

04

Retrying every failure

Classify the response. A version conflict requires a decision, while a transient transport failure may justify retrying the same operation. A new operation identity can turn a retry into a duplicate.

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

10 technical prompts4 include a worked solution

Keep the highest revision for each note

mediumWorked solution
MapsVersioning

Given (note_id, revision, text) records, return one record per ID sorted by ID. Keep the highest revision; reject equal revisions with different text.

Approach
  1. Use a dictionary keyed by note ID. Compare each new revision to the stored one.
  2. Do not silently choose between conflicting copies of the same revision.
Worked solution 35 min
  1. Track the highest revision per ID. A lower revision arriving later does not replace it.
  2. Reject conflicting content at any repeated (ID, revision), including older revisions. Return a sorted list so results do not depend on arrival order. The reference uses O(n) space and O(n + u log u) expected time.
Python
def latest_notes(records):
    seen, latest = {}, {}
    for note_id, revision, text in records:
        key = (note_id, revision)
        if key in seen and seen[key] != text:
            raise ValueError("conflicting revision")
        seen[key] = text
        if note_id not in latest or revision > latest[note_id][1]:
            latest[note_id] = (note_id, revision, text)
    return [latest[key] for key in sorted(latest)]

Scroll sideways to view long lines.

EXPECTED RESULTFor A version 1, B version 1 and A version 2, return A version 2 and B version 1.
Follow-up
  • How would you return conflicts for review instead of raising an error?

Ignore a repeated operation ID

easy
IdempotencyValidation

Given operation IDs, return each ID once in first-seen order. Explain what additional data is needed if one ID arrives with two different payloads.

Approach
  1. Use a set and ordered output for the basic contract.
  2. A real request ledger should bind the ID to a payload identity and result; reject an inconsistent reuse.
Follow-up
  • Which boundary should define the lifetime of a deduplication key?

Count recent save acknowledgements

medium
QueuesMetrics

Count acknowledgements in (now − 10, now]. Each event has weight one and timestamps arrive in order. The clock may move without any new event.

Visual walkthrough

Which events still count?

ROLLING TOTAL+2units
(0, 10]Events in window: 2
In windowExpiredNot arrived

The left boundary is excluded; the right boundary is included. Drag past an event to see it enter, then expire 10 seconds later.

See the event values
  • At 0s: +1expired
  • At 5s: +1in window
  • At 10s: +1in window
  • At 14s: +1not arrived
  • At 19s: +1not arrived

Drag the clock to follow the example events. Each dot counts once inside (now − 10, now]; the lower boundary is excluded.

Approach
  1. Keep active timestamps in a deque and expire the lower boundary.
  2. This measures acknowledgements, not unique saved records. Repeated acknowledgements need a different deduplication rule.
Follow-up
  • What would you change to count distinct note IDs instead?

Normalize and compare timestamps

medium
CorrectnessEngineering reasoning

Compare two timestamps: one ISO 8601 value with a numeric UTC offset and one integer Unix timestamp in milliseconds. Return earlier, equal or later. Reject offset-free strings and invalid input rather than guessing a timezone.

Approach
  1. Parse the ISO value into an offset-aware instant and normalize to UTC. Convert integer milliseconds with an explicit unit.
  2. Compare instants, not formatted strings. State the accepted precision and reject booleans or floating-point timestamps if the contract requires exact integer milliseconds.
  3. Test equal instants written with different offsets, negative epochs, malformed dates and values exactly one millisecond apart.
Follow-up
  • How would you handle a local time repeated during a daylight-saving transition?
  • What changes if the input supports microsecond precision?

A suggested week of practice, with one concrete outcome per session. Adjust the order and pace to your experience and interview date.

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

Prepare, practise & reflect

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

0 / 7 done
01Map your evidence
  • Read your exact opening and match two responsibilities to real project examples.

Deliverable: A role-to-project map

02Test the coding contract
  • Attempt the first coding problem. Add boundary cases before reading the solution.

Deliverable: A tested function

Practice prompt ↗
03Query the right record
  • Run the SQL example and create a case where insertion order gives the wrong answer.

Deliverable: A small dataset and expected output

Practice prompt ↗
04Trace the unhappy path
  • Switch the scenario diagram and explain which state is safe to show to a reader.

Deliverable: A recovery sketch

Practice prompt ↗
05Reproduce the race
  • Explain the debugging example with two competing operations. Identify the atomic or identity check.

Deliverable: A reproducible timeline

Practice prompt ↗
06Prepare your stories
  • Choose two behavioral prompts. Use real decisions, evidence and limitations instead of memorized scripts.

Deliverable: Two concise story outlines

07Rehearse and revise
  • Explain one solution aloud, test its weakest assumption and prepare questions about the actual role.

Deliverable: A review sheet for your next session

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

Use a real project. Explain your responsibility, the decision you made, the evidence you used and what you would change.

Turn feedback into a better workflow

medium
CommunicationOwnership

Describe a feature whose behavior changed after a user or teammate review.

Approach
  1. Be specific: Explain the original assumption, the evidence that challenged it and the concrete change you shipped.
  2. Own your part: Distinguish your decision from the team’s work. Use a real result and state any remaining limitation.
Follow-up
  • How did you check whether the new behavior helped?

Negotiate a smaller reliable release

medium
CommunicationOwnership

Describe a time you narrowed a feature to preserve correctness under a deadline.

Approach
  1. Be specific: Name what remained usable, what was postponed and who agreed to the tradeoff.
  2. Own your part: Distinguish your decision from the team’s work. Use a real result and state any remaining limitation.
Follow-up
  • What signal would have made you delay the whole release?

Explain a confusing customer incident

medium
CommunicationOwnership

Describe a bug that was hard for a user to report precisely.

Approach
  1. Be specific: Turn the symptom into a timeline and reproducible state without blaming the person reporting it.
  2. Own your part: Distinguish your decision from the team’s work. Use a real result and state any remaining limitation.
Follow-up
  • How did you make a similar incident easier to diagnose?
  • 01

    Choose examples you can discuss without sharing confidential customer data.

Where should I start preparing?

Build a small version-aware save flow. Make editing, saving, saved and conflict states visible, then test two writers and a response that arrives after the user has moved to another record.

What makes a strong fullstack project walkthrough?

Connect a user action to the API contract, storage update and resulting interface state. Show one failure case and explain how your design lets the user recover without losing their work.

Do I have to use Python for these exercises?

The short Python examples make the contracts easy to test. Reimplement them in the language appropriate to your role, keeping the same inputs, expected outputs and edge cases.

How should I use the one-week checklist?

Treat each day as a practice session with a concrete deliverable. Repeat a session when you need more time, and use the final review to revisit the assumptions or edge cases you found hardest to explain.

What should I prioritize if time is short?

Start with the role description, one tested coding solution and one failure scenario you can explain end to end. Then prepare a real project story that shows how you made a decision under constraints.

Sources & methodology 5 sources ↗

Official role evidence, timestamped platform data and clearly labeled preparation advice.