Gusto

Gusto Software Engineer Interview Questions

13+ questions from real Gusto Software Engineer interviews, reported by candidates.

13
Questions
3
Round Types
7
Topic Areas

Round Types

Phone 5 Coding 5 Onsite 3

Top Topics

Questions

LeetCode #273: Integer to English Words. Difficulty: Hard. Topics: Math, String, Recursion. Asked at Gusto in the last 6 months.

LeetCode #616: Add Bold Tag in String. Difficulty: Medium. Topics: Array, Hash Table, String, Trie, String Matching. Asked at Gusto in the last 6 months.

LeetCode #2591: Distribute Money to Maximum Children. Difficulty: Easy. Topics: Math, Greedy. Asked at Gusto in the last 6 months.

LeetCode #981: Time Based Key-Value Store. Difficulty: Medium. Topics: Hash Table, String, Binary Search, Design. Asked at Gusto in the last 6 months.

LeetCode #198: House Robber. Difficulty: Medium. Topics: Array, Dynamic Programming. Asked at Gusto in the last 6 months.

## Problem Add bold tags around substrings in a string that match any word in a given list. ## Likely LeetCode equivalent LC 758 (Bold Words in String) or LC 616 (Add Bold Tag in String) is the direct match. ## Tags strings, hash_table, sorting

## Problem You have three tables: ```sql employees(id INT, name VARCHAR, department_id INT) addresses(employee_id INT, street VARCHAR, city VARCHAR, country VARCHAR, is_primary BOOLEAN) departments(id INT, name VARCHAR, location VARCHAR) ``` Write SQL queries for: **Q1:** Return each employee's name, their primary address city, and their department name. Include employees with no address on file (show NULL for city). **Q2:** Find all employees whose primary address country differs from their department's location country. **Q3:** Some employees have multiple rows marked `is_primary = TRUE` (data error). Return a list of those employee IDs and the count of duplicate primary addresses. **Example output for Q3:** ``` employee_id | duplicate_count ------------+---------------- 1042 | 2 2871 | 3 ``` ## Follow-ups 1. How would you fix the duplicate primary addresses in a single UPDATE/DELETE statement? 2. What index would you add to make Q2 performant on a 5M-row addresses table? 3. Rewrite Q1 using a CTE for readability. 4. How would you handle employees with addresses in multiple countries?

## Problem Convert a non-negative integer to its English word representation (e.g., 123 -> "One Hundred Twenty Three"). ## Likely LeetCode equivalent LC 273 (Integer to English Words) is the direct match. ## Tags math, strings, recursion

## Problem Write a function that compares two JSON-like objects (nested dicts/arrays) and returns a structured diff describing what changed between `old` and `new`. The diff should report: - `"added"`: keys present in `new` but not `old`. - `"removed"`: keys present in `old` but not `new`. - `"modified"`: keys present in both but with different values (recurse into nested objects). ```python def json_diff(old: dict, new: dict) -> dict: ... ``` **Example:** ``` old = {"a": 1, "b": {"x": 10, "y": 20}, "c": 3} new = {"a": 1, "b": {"x": 99, "z": 30}, "d": 4} json_diff(old, new) -> { "added": {"d": 4}, "removed": {"c": 3}, "modified": { "b": { "added": {"z": 30}, "removed": {"y": 20}, "modified": {"x": {"old": 10, "new": 99}} } } } ``` ## Follow-ups 1. How do you handle arrays - element-wise comparison, or treat as a whole value? 2. How would you produce a flat list of JSON Patch (RFC 6902) operations from the diff? 3. What is the time and space complexity for deeply nested structures? 4. How would you make the diff output human-readable for a UI changelog?

## Problem Parse and analyze application logs to extract metrics, detect patterns, or summarize errors. ## Likely LeetCode equivalent No direct LC match; string parsing and aggregation. ## Tags strings, arrays, hash_table

## Problem You have a bonus pool of `total_budget` dollars to distribute among employees. Employees are ranked by performance score. The distribution rules: - Top 10% of employees receive 3x the base share. - Next 20% receive 2x the base share. - Remaining 70% receive 1x the base share. - Base share = `total_budget / weighted_employee_count`. ```python def distribute_bonuses( employees: List[dict], # [{"id": str, "score": float}] total_budget: float ) -> List[dict]: # [{"id": str, "bonus": float}] ... ``` **Example:** ``` employees = [ {"id": "e1", "score": 95}, {"id": "e2", "score": 80}, {"id": "e3", "score": 60}, {"id": "e4", "score": 40} ], total_budget = 10000 # Top 10% (1 emp) -> 3x, Next 20% (1 emp) -> 2x, Rest (2 emps) -> 1x # Weighted total = 3+2+1+1 = 7 shares # base = 10000/7 ~ 1428.57 -> [{"id":"e1","bonus":4285.71}, {"id":"e2","bonus":2857.14}, {"id":"e3","bonus":1428.57}, {"id":"e4","bonus":1428.57}] ``` ## Follow-ups 1. How do you handle ties at the tier boundaries? 2. Ensure the distributed amounts sum exactly to `total_budget` - how do you handle rounding errors? 3. How would you add a minimum bonus guarantee for all employees? 4. Extend to support per-department budget caps.

## Problem Calculate income tax using tiered brackets, applying correct rates to income within each bracket range. ## Likely LeetCode equivalent LC 2303 (Calculate Amount Paid in Taxes) is the direct match. ## Tags math, arrays, simulation

## Problem Solve a payroll tax computation problem, applying federal/state brackets and deductions to gross income. ## Likely LeetCode equivalent Related to LC 2303 (Calculate Amount Paid in Taxes). ## Tags math, simulation, arrays

What Gusto Looks for in Software Engineer Interviews

Gusto Software Engineer interviews are calibrated against the level and scope expected of the role. Across 13+ verified candidate reports on LeakCode, the consistent signals interviewers look for: clear problem decomposition before coding, explicit complexity reasoning, structured handling of edge cases, and the ability to articulate trade-offs between two reasonable approaches.

The discriminator between candidates who advance and candidates who do not is rarely the final correctness of the solution. It is the path to the solution: did you ask clarifying questions, did you state your approach before coding, did you handle edge cases without prompting, and did you communicate your reasoning throughout. Reports tagged "no hire" frequently cite a working solution with poor communication; reports tagged "strong hire" cite clear thinking even when the final solution was incomplete.

How To Use This Question Set

Real interview reports are a calibration tool, not a memorization target. Companies update their question pools every 2-4 months; memorizing exact problems risks misleading you when the interviewer uses a variant. The high-leverage use: identify the patterns that appear repeatedly in Gusto Software Engineer reports, practice those patterns on similar (not identical) problems, and use the reports to understand the interviewer's typical follow-up depth.

Filter the questions below by round type, difficulty, and recency. Focus first on reports from the past 6-12 months; older reports may reference questions that have since rotated out of Gusto's pool. Reports tagged with quantified difficulty (e.g., "medium-hard") are higher-signal than reports without difficulty tags.

Round-by-Round Expectations

Gusto Software Engineer loops typically span 4-6 rounds across phone screens and on-site or virtual on-site interviews. The structure varies by company: some run 1 recruiter screen + 1 technical phone + 3-4 on-site rounds; others run 1 recruiter screen + 1 OA + 4-5 on-site rounds. The recruiter screen is logistics and culture-light; the technical phone screen is medium-difficulty coding; the on-site loop covers coding, system design (at L4+ levels), and behavioral rounds.

Each round is designed to surface a specific signal. Coding rounds: correctness, code quality, complexity reasoning, communication. System design rounds: requirements clarification, design judgment, operational thinking. Behavioral rounds: ownership scope, leadership, ambiguity tolerance, conflict navigation. Strong candidates explicitly hit each signal dimension out loud during the round; weak candidates focus only on solving the prompt.

Common Interview Mistakes At This Combination

Reports tagged "no hire" at Gusto Software Engineer commonly cite: jumping into code without clarifying requirements, coding silently for 10+ minutes without verbalizing approach, missing edge cases (empty input, single element, very large input, overflow), and producing a working solution that the candidate cannot explain or refactor when probed. Strong candidates avoid these patterns by following a consistent template: clarify, verbalize approach, code with narration, test with examples.

Behavioral and design rounds have their own failure modes. Behavioral: stories that use "we" instead of "I" diluting individual signal, stories with no quantified outcome, defensiveness when probed about failure. Design: not asking clarifying questions, not stating requirements out loud, designing for a single server when the prompt clearly implies scale, ignoring operational concerns (deployment, monitoring, rollback). These show up in roughly half of Gusto Software Engineer interview retrospectives on LeakCode.

See All 13 Gusto Software Engineer Questions

Full question text, answer context, and frequency data for subscribers.

Get Access