Airtable

Airtable Software Engineer Interview Questions

9+ questions from real Airtable Software Engineer interviews, reported by candidates.

9
Questions
3
Round Types
5
Topic Areas
2025
Year Range

Round Types

Phone 6 Onsite 2 Phone Screen 1

Top Topics

Questions

I completed technical phone screen for Airtable and wanted to share my experience. No AI allowed unfortunately :( ## Overview - Quick intros - Demo of a feature in an Airtable app - The actual exercis

## Problem Detect circular references or dependency cycles in a spreadsheet cell or graph structure. ## Likely LeetCode equivalent No direct unambiguous match. ## Tags graph, hash_table, recursion

## Problem Given a table as a list of rows (each row is a list of string values), infer the most specific data type for each column. Types in priority order: `int` > `float` > `date (YYYY-MM-DD)` > `boolean (true/false)` > `string`. A column's type is the most specific type that all non-empty values in that column can be parsed as. ```python def infer_column_types(rows: list[list[str]]) -> list[str]: pass ``` **Example:** ``` rows = [ ["1", "3.14", "2023-01-01", "true", "hello"], ["2", "2.71", "2023-06-15", "false", "world"], ["abc", "1.0", "not-a-date", "true", "!"], ] output -> ["string", "float", "string", "boolean", "string"] ``` ## Follow-ups 1. Empty cells -- should they be treated as missing (skip for type inference) or as the string `""`? 2. Dates appear in multiple formats (`MM/DD/YYYY`, `DD-MM-YYYY`). How do you handle ambiguous formats? 3. A column is 99% integers but has one outlier string. What threshold would you use to decide the type? 4. Extend to also return nullable status: a column is nullable if any cell is empty.

## Problem Design or implement a connection pool with acquire/release semantics and a maximum connection limit. ## Likely LeetCode equivalent No direct match with high confidence. ## Tags design, queue, coding_other

## Problem Find all groups of duplicate files in a filesystem by comparing file content hashes or sizes. ## Likely LeetCode equivalent LeetCode 609 - Find Duplicate File in System. ## Tags hash_table, strings, arrays

## Problem Design a file backup strategy or determine minimum files to back up given constraints. ## Likely LeetCode equivalent No direct match with high confidence. ## Tags greedy, arrays, coding_other

## Problem Build or construct a file directory structure from a list of paths or operations. ## Likely LeetCode equivalent No direct match with high confidence. ## Tags strings, hash_table, coding_other

## Problem You have a list of tasks, each with a `duration` (minutes) and a `deadline` (minute of the day they must finish by). The day starts at minute 0. You can process only one task at a time. Maximize the number of tasks completed before their deadlines. ```python def max_tasks_finished(tasks: list[dict]) -> int: # tasks: [{"name": str, "duration": int, "deadline": int}] pass ``` **Example:** ``` tasks = [ {"name":"A", "duration":60, "deadline":120}, {"name":"B", "duration":30, "deadline":50}, {"name":"C", "duration":100, "deadline":200}, ] # Greedy: B (done at 30 < 50), A (done at 90 < 120), C (done at 190 < 200) output -> 3 ``` ## Approach Sort by deadline (Earliest Deadline First). Greedily schedule tasks in deadline order, accumulating time. If adding a task would miss its deadline, skip it. EDF is optimal for maximizing task count with unit-equivalent tasks. ## Follow-ups 1. Prove that Earliest Deadline First is optimal here, or describe a case where it fails. 2. Tasks now have integer priorities. You want to maximize total priority, not count. How does your algorithm change? 3. Some tasks are dependent -- Task C cannot start until Task A finishes. How do you incorporate dependencies? 4. The schedule must also include mandatory breaks (e.g., 30-minute lunch at minute 240). How do you insert them?

## Problem Implement an in-memory database table that supports: - `insert(row: dict)` -- add a row (rows have a unique `id` field). - `delete(id)` -- remove a row by id. - `query(filters: dict) -> list[dict]` -- return all rows matching all key-value filters (AND semantics). - `update(id, changes: dict)` -- update specific fields of a row. ```python class Table: def insert(self, row: dict) -> None: ... def delete(self, id: int) -> None: ... def query(self, filters: dict) -> list[dict]: ... def update(self, id: int, changes: dict) -> None: ... ``` **Example:** ``` t.insert({"id":1,"name":"Alice","dept":"Eng"}) t.insert({"id":2,"name":"Bob", "dept":"Eng"}) t.query({"dept":"Eng"}) -> [{"id":1,...},{"id":2,...}] t.update(1, {"dept":"PM"}) t.query({"dept":"Eng"}) -> [{"id":2,...}] ``` ## Follow-ups 1. `query` scans all rows. How would you add an index on a specific column to speed up equality lookups? 2. Support range queries (`age > 30`). What data structure would you use for a range index? 3. How do you handle schema evolution -- adding a new column to existing rows? 4. Implement `query` with OR semantics as well as AND. How does the filter language change?

What Airtable Looks for in Software Engineer Interviews

Airtable Software Engineer interviews are calibrated against the level and scope expected of the role. Across 9+ 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 Airtable 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 Airtable's pool. Reports tagged with quantified difficulty (e.g., "medium-hard") are higher-signal than reports without difficulty tags.

Round-by-Round Expectations

Airtable 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 Airtable 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 Airtable Software Engineer interview retrospectives on LeakCode.

See All 9 Airtable Software Engineer Questions

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

Get Access