Button · Software Engineer
Updated · 2026-10-02

Button Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Button is described to candidates as a company whose software helps businesses run their customer engagement. Candidates who describe the Software Engineer role mention work across backend systems, frontend applications and APIs, done alongside product managers and designers. The responsibilities listed are building software from product requirements, translating those requirements into technical specifications, reviewing code, and fixing problems in applications that already run. No specific product line or team is named, so treat the role as general web and API engineering.

This guide is for candidates interviewing for the Software Engineer role at Button. It covers the three reported stages (Phone Screen, Technical Interviews, Behavioral Questions), all eleven reported questions, and a seven-day plan. The questions span language proficiency, REST versus GraphQL, production debugging, two system design prompts, performance, ambiguous requirements, two short coding problems and two behavioral prompts, so the guide treats them as a general software engineering set rather than a specialist track.

Candidates report three stages over roughly three to five weeks: a phone screen, one or more technical interviews, and a behavioral stage. The exact path can vary with the team you interview for.

Software Engineering (General)Technical Screen / Phone InterviewInterview Process Fundamentals

30 min read

Browse Software Engineer questions

See the practice prompts

14Practice promptsAcross five skill areas

The requirements candidates describe for this role name JavaScript, Python or Ruby, experience with web frameworks and APIs, and familiarity with databases and cloud services. Docker, Agile and DevOps practice, and a frontend framework such as React or Angular appear as extras. That mix points to a generalist: someone who can write a small function cleanly, reason about an HTTP API, and explain how a service behaves under load or failure.

The reported questions match that profile. Two are short coding problems (a palindrome check and binary search). Two are design prompts: a URL shortening service, and a microservices layout for payment processing. Three are about engineering judgment: debugging a complex production issue, speeding up a slow application, and starting a project whose requirements are ambiguous. One asks you to compare REST and GraphQL, one asks which languages you are strongest in and why, and two are behavioral. Breadth is the theme, so a shallow but correct answer to each beats a deep answer to one.

Prepare in layers. First, make the two coding problems automatic in the language you will use, including the edge cases (empty input, a single element, a target at either end). Second, build a repeatable shape for open-ended answers: state assumptions, name the main components or steps, then say what breaks first. Third, write two behavioral stories with real decisions and measurable outcomes, because the reported behavioral prompts leave room for any project you choose. The seven-day plan below follows that order.

01

Phone Screen

reported

Candidates describe the first stage as an initial screening call about your background and fit for the role. The reported question set includes one about the languages you are strongest in and why, so have that answer ready whichever stage it lands in. Use the call to learn what the technical interviews will contain for your team, since the process is reported to vary by team.

What to demonstrate

  • Your background and recent work, which a screening call reviews by its nature
  • Fit with the role as the candidate describes it
  • How clearly you can explain the languages and tools you have used

How to prepare

  • Write a short walk through your last two or three projects, each naming the language, the web framework, the API style, the database and any cloud service, plus what you personally built.
  • Prepare the language answer: pick one of JavaScript, Python or Ruby if you can, give two concrete reasons (ecosystem, typing, runtime model, speed of iteration) and one real limitation you have hit.
  • List questions for the recruiter: which languages are allowed in coding, what the technical interviews look like for your team, and what follows them.
Button Software Engineer candidate reports ↗
02

Technical Interviews

reported

Candidates describe this stage as one or more interviews on technical skills and problem solving. The reported questions cover several types: REST versus GraphQL, debugging a complex production issue, two system design prompts (a URL shortening service and a microservices layout for payment processing), improving a slow application, tackling a project with ambiguous requirements, and two short coding problems (a palindrome check and binary search). Prepare each type, because the reports do not tie a question to a specific interview.

What to demonstrate

  • Working code on small problems, which a live coding format tests directly
  • Reasoning about APIs and service design, including scalability
  • A structured approach to debugging and performance problems
  • How you break down an under-specified problem

How to prepare

  • Write the palindrome function twice (reverse and compare, then two pointers) and binary search iteratively, from a blank file, with a list of edge-case tests.
  • Prepare a one-page REST versus GraphQL comparison: over- and under-fetching, endpoint shape, HTTP caching, N+1 resolver queries, versioning and error handling.
  • Outline the URL shortener and the payment microservices answers: assumptions, components, data model, and what fails first under load.
  • Write a fixed sequence for production debugging and slow-application questions: scope, recent changes, measurement, hypothesis, fix, prevention.
Button Software Engineer candidate reports ↗
03

Behavioral Questions

reported

Candidates describe the last stage as behavioral questions that assess cultural fit. The reported prompts are about a significant project challenge and about prioritizing across several projects, and the reports also mention team disagreements and your usual role in group projects. Because the prompts are open, the story you choose does most of the work.

What to demonstrate

  • How you describe decisions you personally made
  • How you handle competing demands and communicate trade-offs
  • How you work with teammates, including when you disagree

How to prepare

  • Write two full stories in outline form, one for the project challenge and one for prioritizing multiple projects, each with the situation, your decision, the alternatives you rejected and a measurable result.
  • Prepare shorter stories for a team disagreement and for the role you usually take in a group, using I for your own actions and naming teammates' contributions separately.
  • Rehearse each story aloud so the setup stays short and the reasoning gets most of the time.
Button Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Writing the palindrome check without settling what counts as a palindrome

Ask whether case, spaces and punctuation are ignored, then say your answer. The two-pointer version (compare from both ends, skip non-alphanumerics, fold case) runs in O(n) time and O(1) extra space, while reversing a copy uses O(n) space. Test the empty string, a single character and a mixed-case sentence.

02

Binary search that loops forever or misses the ends

Fix the invariant before coding: search the closed range lo..hi, compute mid as lo + (hi - lo) // 2, move lo to mid + 1 or hi to mid - 1, and stop when lo exceeds hi. Walk it by hand on an empty array, one element, a target at each end and a missing target. Mention the lower-bound variant if duplicates are possible.

03

Answering REST versus GraphQL with 'GraphQL is newer' or by listing definitions

Compare on specifics: REST uses a URL per resource and caches well over HTTP, while GraphQL has one endpoint where the client picks fields, which fixes over- and under-fetching but moves cost into resolvers (N+1 queries, batching with a loader) and makes caching and query-depth limits your job. Finish with a case where you would pick each.

04

Jumping to technologies in the URL shortener and payment microservices designs

Start with assumptions about read and write volume, then name the pieces. For the shortener: key generation (counter encoded in base 62 versus hashing, and how collisions are handled), a key-value store, a cache on the redirect path, and the 301 versus 302 trade-off. For payments: service boundaries, idempotency keys on every write, and how a timeout after a charge is reconciled.

05

Debugging and performance answers that stop at 'I would check the logs'

Give an ordered sequence: bound the impact, ask what changed recently, mitigate first (roll back or disable a flag), then reproduce and form a hypothesis from metrics, logs and traces. For a slow application, measure before changing anything, find whether time goes to database queries, repeated calls, I/O or CPU, and fix the largest share first.

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

11 technical prompts0 include a worked solution

Walk us through how you would tackle a project with ambiguous requirements.

medium
Problem-Solving / Case Studies

Walk us through how you would tackle a project with ambiguous requirements.

Approach
  1. Treat this as a process question, not an algorithm: show a repeatable way to turn a vague request into something buildable, using one real project as the running example.
  2. Start from the goal: who asked, what problem or metric the project should move, and what 'done' means. List the open questions and sort them by cost of being wrong. Answer irreversible ones (data model, public API contract) before building, and make cheap, reversible ones yourself as written assumptions.
  3. Write a one-page spec covering scope, non-goals, assumptions and open questions, and get it confirmed by the requester and anyone downstream (product, design, the teams consuming your API). Written agreement stops the scope from drifting quietly.
  4. Build a thin end-to-end slice or prototype early and put it in front of users or stakeholders. Real feedback settles ambiguity faster than more meetings. Keep the design easy to change where requirements are still uncertain.
  5. Close with how you handled change: a short decision log, regular check-ins, and explicitly re-agreeing scope when requirements shifted. Name one assumption that turned out wrong and what it cost.
Follow-up
  • Two stakeholders want contradictory things and neither will decide. What do you do?
  • Halfway through, the requirements change significantly. How do you decide what to keep?
  • How do you know when you have enough clarity to start writing code?

Can you write a function that checks if a string is a palindrome?

medium
Coding / Algorithms

Can you write a function that checks if a string is a palindrome?

Approach
  1. Clarify the rules first: is it case-sensitive, should spaces and punctuation be ignored (as in 'A man, a plan, a canal: Panama'), and what does an empty string return? An empty or one-character string is a palindrome.
  2. Simple version: normalise, then compare with its reverse (s == s[::-1] in Python). That is O(n) time but O(n) extra space for the copy.
  3. Better version: two pointers, i from the start and j from the end. Skip characters that are not alphanumeric, compare lowercase forms, and return false on the first mismatch. Stop when i >= j. That is O(n) time and O(1) extra space, with no normalised copy.
  4. Edge cases to test aloud: empty string, single character, even and odd lengths, strings made only of punctuation, mixed case. Mention Unicode: JavaScript strings are UTF-16, so reversing by index splits surrogate pairs such as emoji, and in any language combining accents mean code points are not always user-visible characters.
Follow-up
  • Return true if the string can become a palindrome by deleting at most one character. What changes?
  • Find the longest palindromic substring. What is the complexity of expanding around each center?
  • How would you check whether a singly linked list is a palindrome in O(1) extra space?

How would you implement a binary search algorithm in your preferred language?

medium
Coding / Algorithms

How would you implement a binary search algorithm in your preferred language?

Approach
  1. State the precondition: the input is sorted ascending. Then fix one loop invariant and keep to it. Closed interval: lo = 0, hi = n - 1, while lo <= hi. Half-open: lo = 0, hi = n, while lo < hi. Most off-by-one bugs come from mixing the two.
  2. Compute mid = lo + (hi - lo) // 2. In Java or C++, (lo + hi) / 2 can overflow 32-bit ints; Python ints cannot overflow, but the safe form shows you know why. Compare a[mid] with the target and discard the half that cannot contain it, so every iteration shrinks the range.
  3. Complexity: O(log n) time. O(1) space when iterative, O(log n) call stack when recursive. Prefer the iterative version in an interview.
  4. Handle duplicates and misses with the lower-bound variant: the first index whose value is >= target. With a half-open range, set hi = mid when a[mid] >= target, else lo = mid + 1; return lo, which is also the insertion point. Python's bisect.bisect_left and C++ std::lower_bound do this. Java's Arrays.binarySearch returns -(insertion point) - 1 on a miss.
  5. Test aloud: empty array, one element, target below the first or above the last element, target present several times, and that the loop always terminates (setting lo = mid with a lower mid can loop forever).
Follow-up
  • Modify it to return the first and last positions of a target that appears several times.
  • Search a sorted array that has been rotated at an unknown pivot.
  • How would you binary search on the answer instead of an index, for example the minimum capacity to ship packages within D days?

The plan starts with the short coding problems, then covers API and design questions, debugging, and ambiguity, and ends with a full run-through. Each day produces something you can read back later.

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 the loop and settle your language
  • Write the three reported stages (Phone Screen, Technical Interviews, Behavioral Questions) and list the question types candidates report, marking the ones you are least ready for.
  • Pick the language you will use for coding, from JavaScript, Python or Ruby, and set up a local file where you can run tests quickly.
  • Write your answer to the question about the languages you are strongest in: two reasons, one limitation, one recent project.

Deliverable: A one-page loop map, a ready coding setup, and a written answer on language proficiency.

Practice prompt ↗
02Two coding problems from a blank file
  • Write the palindrome function in two ways (reverse and compare, then two pointers), and a version that ignores case and non-alphanumeric characters.
  • Write binary search iteratively returning an index or -1, then a lower-bound variant for arrays with duplicates.
  • Build a list of test inputs for both: empty, one element, both ends, missing target, repeated values.

Deliverable: Two working functions plus the variants, each with a test list that passes.

Practice prompt ↗Practice prompt ↗
03REST versus GraphQL, and list endpoints
  • Take one data model with nested relations and write the same fetch as REST calls and as a single GraphQL query.
  • Write a comparison covering over- and under-fetching, HTTP caching, N+1 resolvers, versioning and error reporting, ending with when you would choose each.
  • Work the PracHub practice question on replacing offset paging with keyset paging, since list endpoints appear in any REST or GraphQL API.

Deliverable: A comparison table with a recommendation for each side, and a solved keyset paging exercise.

Practice prompt ↗Practice prompt ↗
04Design: URL shortener and payment microservices
  • Outline the URL shortener: assumptions, key generation, storage, redirect path with a cache, expiry, and the 301 versus 302 choice.
  • Outline the payment microservices answer: service boundaries, idempotency keys, a ledger or event log, retries, and reconciliation after a timeout.
  • For each design, write down what breaks first when traffic grows and what you would do about it.

Deliverable: Two one-page design outlines, each ending with a failure and scaling section.

Practice prompt ↗Practice prompt ↗
05Debugging and performance
  • Write your fixed sequence for debugging a complex production issue: scope, recent changes, mitigation, hypothesis, fix, prevention.
  • Write a checklist for a slow application: measure, locate the cost (query, repeated calls, I/O, CPU), fix the largest share, re-measure.
  • Solve the PracHub practice question on window functions to keep database skills sharp, since the role lists databases among its requirements.

Deliverable: A debugging runbook, a performance checklist, and one solved practice query.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Ambiguity and behavioral stories
  • Write how you start a project with ambiguous requirements: questions to ask, assumptions to record, the smallest slice to build first, and how you check in.
  • Outline the project-challenge story and the prioritization story, each with situation, decision, alternatives rejected and a measurable result.
  • Outline shorter stories for a team disagreement and for the role you usually take in a group.

Deliverable: One written approach to ambiguity and four story outlines.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Full rehearsal
  • Run a mock phone screen: walk through your projects, give the language answer and explain REST versus GraphQL.
  • Solve the palindrome and binary search problems again from a blank file, then deliver one design answer aloud.
  • Tell the two main behavioral stories aloud, and practice the PracHub deadline trade-off prompt as extra story material.

Deliverable: A recorded run-through and a short list of the three weakest spots to fix before the call.

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

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

The reported behavioral stage is described as an assessment of cultural fit, and the two reported prompts ask about a significant project challenge and about prioritizing across several projects. For a Software Engineer, the strongest stories are about decisions you made in code, delivery or teamwork, with an outcome you can state plainly.

Describe a time when you faced a significant challenge in a project. How did you handle it?

medium
Behavioral / Leadership

Describe a time when you faced a significant challenge in a project. How did you handle it?

Approach
  1. Choose a challenge where your own decision changed the outcome: a failing integration, a scope change late in the project, a performance regression, a migration that went wrong. A story where you only carried out someone else's plan shows nothing about your judgment.
  2. State the situation and your task in two sentences, then spend most of the answer on the options you weighed, why you picked one, and what you did. Use I for your actions and credit teammates by name for theirs.
  3. Make the result checkable: a metric that moved (error rate, latency, delivery date, number of support tickets) and what you changed afterwards so the problem could not recur, such as a test, an alert, or a runbook.
  4. Include one thing that went wrong or one disagreement and how you resolved it with evidence rather than seniority. The common mistake is a challenge that was only workload, or a story that blames another team without showing what you did about it.
Follow-up
  • What would you do differently if you faced the same situation again?
  • How did you know your change, and not something else, fixed the problem?
  • When did you decide to escalate or ask for help, and what did you bring when you did?

How do you prioritize your tasks when managing multiple projects simultaneously?

medium
Behavioral / Leadership

How do you prioritize your tasks when managing multiple projects simultaneously?

Approach
  1. Name the method you really use, in concrete terms: list every commitment, note the deadline and who is blocked on each, estimate the cost of delay, then rank. Say what you do with the lower items: renegotiate the date, hand them off, or cut scope.
  2. Anchor it in one real case with at least two competing demands, for example a feature due to a product manager while a production bug and a code review queue were also open. State what you chose first and why, in one sentence each.
  3. Show the communication step: you told the affected people early, with the new date or reduced scope, instead of letting a deadline slip silently. Name who you told and how they responded.
  4. Say how you handle interruptions, such as a production incident in the middle of planned work, and close with the outcome. A to-do app or working longer hours is not an answer on its own, because it names no trade-off.
Follow-up
  • What do you do when two stakeholders each say their project is the top priority?
  • Tell me about a time you got the priority wrong and what it cost.
  • How do you decide whether an urgent bug interrupts the work already in progress?

Ship under a deadline and bound the debt you chose

medium
paginationtechnical debttradeoffs

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

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

    Describe a time when you faced a significant challenge in a project. How did you handle it?

  • 02

    How do you prioritize your tasks when managing multiple projects simultaneously?

  • 03

    How do you handle disagreements within a team?

  • 04

    What role do you typically take in group projects?

  • 05

    Describe a time you had to debug a production problem while other work was waiting.

  • 06

    Tell me about a project where the requirements were unclear and how you moved it forward.

PracHub preparation framework ↗
How many rounds does the Button Software Engineer process have?

Candidates report three stages: a Phone Screen, Technical Interviews (one or more), and Behavioral Questions. The reported timeline is about three to five weeks, and the path can vary with the team. Ask the recruiter for the exact format for your team.

Button Software Engineer candidate reports ↗
Which programming language should I use?

The requirements candidates describe name JavaScript, Python or Ruby. Use the one you can write fastest with correct edge cases, and be ready to say why you picked it, since a question about your strongest languages is reported. Confirm with the recruiter which languages are allowed in coding.

Button Software Engineer candidate reports ↗
Which technical questions do candidates report?

The reported set includes REST versus GraphQL, debugging a complex production issue, designing a URL shortening service, structuring microservices for payment processing, improving a slow application, tackling ambiguous requirements, a palindrome check and binary search. The reports do not say which question belongs to which interview.

Button Software Engineer candidate reports ↗
How should I split my preparation time?

Start with the two coding problems, since they are short and unforgiving, then design, debugging and performance, then behavioral stories. The seven-day plan on this page follows that order. If you have more than a week, repeat the coding and design days with new variations.

Button Software Engineer candidate reports ↗
Is there a take-home assignment?

None of the reported stages is a take-home. Candidates describe a phone screen, technical interviews and behavioral questions. If your recruiter mentions an assignment, ask what it covers and which languages are allowed.

Button Software Engineer candidate reports ↗
How do I prepare for the behavioral stage?

Write two full stories, one about a project challenge and one about prioritizing several projects, and shorter ones about a team disagreement and your usual role in a group. Each should show a decision you made, the alternatives you rejected and a result you can measure.

Button Software Engineer candidate reports ↗
What do the role requirements mention beyond the language?

Candidates describe web frameworks and APIs, databases and cloud services as the core, with Docker, Agile and DevOps practice, and a frontend framework such as React or Angular as extras. Be able to talk about how you have used each one you list on your CV.

PracHub Software Engineer practice ↗
Sources & methodology 3 sources ↗

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