Interview guides · Barrett Business Services
Barrett Business Services Software Engineer Interview Guide
Barrett Business Services Software Engineer interview guide: 3 rounds, SQL and debugging prep, estimation and behavioral answers.
The 60-second brief
Barrett Business Services (BBSI) delivers business management services to client companies. Candidates describe the Software Engineer role as the engineering work behind that operation: building and maintaining the internal tools staff use every day, and keeping them reliable as demand grows. Reported responsibilities run from gathering requirements through to deployment, with a large share of the time going to database management and query tuning. Engineers also join team meetings where upcoming projects are estimated, so explaining technical effort to colleagues outside engineering is part of the job. The only technology candidates name is SQL.
This guide is for engineers interviewing for a Software Engineer position at Barrett Business Services. It covers the three reported rounds (Recruiter Screen, Hiring Manager Interview, Panel Interview), the SQL, debugging and estimation questions candidates report, and the behavioral prompts about pivoting and team disagreement. It does not cover compensation negotiation, and it makes no claim about team structure or specific systems, because candidates describe none.
Candidates report three rounds over roughly 3-5 weeks: a Recruiter Screen, a Hiring Manager Interview centred on behavioral traits, and a Panel Interview with the development team that serves as the technical evaluation.
Focus areas
- SQL querying
- Query filtering (WHERE/conditions)
- Behavioral interviewing
Overview
The reported question list is short and unusually practical. On the technical side it is SQL (filtering rows, finding the second highest salary in an employee table) plus a general question about how you debug a complex issue. On the project side it is estimation, changing course after feedback, and resolving disagreements. There is no reported algorithm-heavy coding screen and no reported system design round, so spreading your time across large-scale design or dynamic programming buys little for this loop.
The SQL questions are small, which makes the explanation the real work. Candidates report that the loop focuses on how you communicate your reasoning, so for each query you write, say why you chose that shape. For the second-highest-salary question, know several routes (a subquery on the maximum, an offset query, a ranking window function such as DENSE_RANK) and be able to say how each treats duplicate salaries, NULLs and a table with fewer than two distinct salaries. For filtering, be fluent in WHERE versus HAVING, operator precedence between AND and OR, NULL comparisons and indexed versus unindexed predicates. Reports also list optimization for large datasets as a less common topic.
Because the role description pairs database work with estimation and stakeholder communication, treat the behavioral material as equal in weight to the SQL. Build three stories, one each for estimating and tracking a project, changing approach after feedback, and resolving a team disagreement, and rehearse them in STAR order with your own decision at the centre. Candidates also report that the panel can switch quickly between technical and cultural questions, so practise moving from writing a query to a story without a long reset.
Finally, choose examples from recent work. Candidates report that deeper technical questions follow your own examples, so pick projects where you can still describe the schema, the queries and the trade-offs in detail. Prepare questions about the team's current challenges for the panel, since reports list that as a good use of your time with them.
The Barrett Business Services interview process
These stages are what candidates report, not a published process. The reported pairing is behavioral depth in the earlier conversations and technical depth in the panel.
Recruiter Screen
Candidates describe the Recruiter Screen as an opening conversation about your background and whether your qualifications fit the Software Engineer role. No technical content is reported for this stage. Treat it as the first chance to show the communication style the later rounds focus on: a clear summary of your experience, a reason for wanting a business-services employer, and concrete detail when asked about your work. Have your logistics ready so the call stays on substance.
What to demonstrate
- How clearly you summarise your experience and qualifications
- Fit with a role built around SQL, databases and the development lifecycle
- Practical details such as availability, location and compensation expectations
How to prepare
- Write a short career summary that ends on database and SQL work, since those are the reported must-have skills
- Prepare a specific reason for choosing Barrett Business Services, built on the business management services it offers clients rather than generic enthusiasm
- List one recent project where you handled requirements through to deployment, with the part you owned
- Decide your salary expectations, notice period and location constraints in advance, and ask what the remaining rounds involve
Hiring Manager Interview
Candidates report that the Hiring Manager Interview is a deeper conversation focused on behavioral traits. The reported behavioral prompts cover estimating projects, changing approach after feedback and handling team disagreements, so that is the type of material to rehearse. Use STAR structure, keep the situation short, and spend most of your time on your reasoning and the result. Reports also say the role bridges technical work and the operational needs of the business, so link each story to a business outcome.
What to demonstrate
- Behavioral traits as shown in specific past situations
- How you plan, estimate and communicate project progress
- How you work with teammates and handle disagreement
How to prepare
- Write one STAR story for each of three themes: estimating and tracking a project, pivoting after feedback, and resolving a team disagreement
- State in each story the decision you owned, what it cost and the measurable result
- Prepare an example of explaining technical effort or a slipping schedule to a non-technical stakeholder
- Prepare questions for the hiring manager about how projects are estimated and how the team handles changes in scope
Panel Interview
The Panel Interview is reported as an on-site or virtual session with the development team, and it is the stage candidates describe as the technical evaluation. Candidates also report that technical and cultural questions can alternate quickly. The reported technical themes are SQL (joins, filtering, aggregate functions, window functions such as RANK and DENSE_RANK), breaking a large problem into smaller steps, and debugging a complex issue. Talk through your reasoning aloud as you write, because reports stress explaining logic rather than only producing the answer.
What to demonstrate
- SQL querying with joins, filtering, aggregates and ranking
- Problem decomposition and the ability to narrate your reasoning
- Debugging method on a complex technical issue
- Collaboration and communication with the people you would work with
How to prepare
- Write the second-highest-salary query three ways and be ready to compare how each handles ties, NULLs and tables with fewer than two distinct salaries
- Practise filter questions that combine WHERE, AND/OR precedence, NULL checks, IN and BETWEEN, then explain which predicates can use an index
- Prepare a debugging walkthrough from a real incident: reproduce, narrow, form a hypothesis, test it, fix, then prevent recurrence
- Rehearse switching from a technical answer to a behavioral story in consecutive answers, and prepare questions about the team's current challenges
Where candidates lose points
Reciting a second-highest-salary query from memory without saying how it behaves on duplicates, NULLs or a short table
Write the query, then say what happens when two employees share the top salary, when a salary is NULL and when only one distinct salary exists. Show a second approach, such as DENSE_RANK versus a subquery on the maximum, and say which you would ship and why. Candidates report that the loop focuses on explaining logic.
Answering the filtering question with only WHERE syntax
Cover AND/OR precedence and parentheses, NULL comparisons, IN and BETWEEN, WHERE versus HAVING, and how a predicate wrapped in a function can stop an index from being used. Reports list optimization on large datasets as a less common topic, so be ready for the scale follow-up.
Answering the debugging question with a list of tools instead of a method
Narrate a sequence from a real incident: reproduce the problem, find what changed, narrow the search by bisection or logging, test one hypothesis at a time, fix, then add a test or alert. Say how you separated the trigger from the cause.
Giving a single estimate with no ranges, assumptions or tracking plan
Break the work into tasks, give ranges, list assumptions and known risks, and describe how you re-estimate and report changes to stakeholders. Add a story from real work where you caught a slip early and offered options.
Telling behavioral stories in the plural, where the decision you made cannot be found
For the pivot and disagreement stories, say what you decided, what it cost and what happened. Keep the situation to a couple of sentences, then spend the time on reasoning, as STAR is meant to work.
Questions & practice
Merge partitioned event streams into one ordered feed with bounded lateness
Hard · k-way merge · watermarks · out-of-order streams
The read-model service consumes 64 log partitions carrying about 4,000 events per second in total. Each partition is ordered within itself, but partitions drift by up to 30 seconds, and the activity feed must present a tenant's events in occurred_at order. Produce the merge. State its complexity, the buffer it requires in events and in bytes, what happens when one partition is idle, and what you do with an event that arrives after you have already emitted its position. Payloads average 1 KB.
Approach
- Merge with a min-heap over the 64 partition heads keyed on (occurred_at, event_id): O(log P) per event and O(n log P) overall. The tie-break on event_id is what makes the output deterministic when two partitions carry the same millisecond, which matters because the feed is paginated and a non-deterministic order reorders pages under the reader.
- Emitting the heap head is only correct once every partition has produced everything up to that timestamp, so the emit condition is a watermark: the minimum across partitions of the highest occurred_at seen, less the allowed lateness. Events are held until the watermark passes them, which is what turns individually ordered streams into a jointly ordered one.
- Size the buffer from the lateness rather than guessing: 4,000 events per second times 30 seconds is 120,000 buffered events, and at 1 KB each about 120 MB of heap. That number is the real price of the ordering guarantee and belongs in front of whoever asked for it.
- Handle the idle partition explicitly, because it fails the feed rather than corrupting it: a partition with no traffic never advances its own maximum, so the watermark freezes and output stops entirely. Either every partition emits a periodic idle marker carrying the broker's current time, or the watermark falls back to wall clock for a partition silent beyond a threshold.
Follow-up
- The lateness budget is raised to five minutes. What is the new buffer, and what besides memory changes?
- The consumer restarts. Where does it resume from, and what does the feed look like for the first 30 seconds?
Diff a projection against the primary without per-row point reads
Hard · reconciliation · range hashing · throttling
The listing projection has drifted and some rows show a stale version. The primary holds 40,000,000 resource rows across 12,000 tenants while serving 1,200 writes and 14,000 reads per second. The obvious repair, reading each resource row and comparing its version against the projection, is correct and would eventually finish. Explain precisely why it is unacceptable here, then give a diff that finds the differing rows, state its complexity, and make it safe to run against a live primary. Replication lag is usually under 100 ms and is not bounded.
Approach
- Quantify the naive cost rather than calling it slow: 40,000,000 point reads at even 0.5 ms each is over five hours serialised, and the only lever is concurrency, which is exactly what you cannot spend. The primary's pool is sized for the write path, and 40,000,000 random reads evict the buffer cache that sustains the 85 percent cache hit rate, so the audit degrades the system it is auditing.
- Replace random access with one ordered pass per side. Both sides can be read in (tenant_id, resource_id) order, which is a sequential scan on each and a merge join in O(n) time and O(1) memory. For a dense diff that is the whole answer, and it reads the primary once instead of 40,000,000 times.
- For the expected sparse case, compare range hashes instead of rows: partition the key space, compute per range an order-independent aggregate over hash(resource_id, version), compare aggregates, and descend only into ranges that differ. With d differing rows and branching factor B, at most d ranges mismatch per level, so the drill-down examines O(d log_B(n/d)) ranges and reads full rows only in mismatching leaves.
- Aggregate with a sum modulo 2^64 or a multiset hash, never XOR. XOR is order-independent but self-cancelling, so two rows wrong in the same way, or a row duplicated on one side, leave the range aggregate matching and the range is declared clean.
Follow-up
- The diff reports 900 stale rows. How do you decide between patching those rows and rebuilding the projection from resource_revision?
- Same job, but the projection lives in a search index that cannot be scanned in key order. What changes?
Identify the heaviest tenants in a five-minute window under memory pressure
Medium · top-k · heavy hitters · streaming
The edge service handles about 3,000 requests per second across roughly 50,000 tenants, peaking near 9,000. Expose the 50 heaviest tenants by request count over the trailing five minutes so limits can be tightened before one tenant's backfill starves the fleet. You may not retain five minutes of raw records. Give the exact solution and its memory, then the bounded-memory approximation with its error stated as a formula, and say which you would ship and at what tenant cardinality that choice changes.
Approach
- Do the exact version first, because it is affordable at this cardinality: a ring of 300 one-second counters per tenant, advanced lazily, is 1,200 bytes of counters per tenant and roughly 60 to 90 MB for 50,000 tenants with overhead. Carry a running total and subtract the bucket you overwrite so a window read is O(1) rather than 300 adds.
- Extract the top 50 with a size-k min-heap over the tenant sums: O(d log k) for d tenants, against O(d log d) to sort them all. Maintaining the heap continuously instead of on query requires a tenant-to-heap-index map, because incrementing a count already inside the heap means sifting from a known position, and without that map you rebuild the heap on every request.
- State the approximation precisely rather than gesturing at sketches. Misra-Gries with m counters retains every item whose true count exceeds N/(m+1), and each retained count underestimates the truth by at most N/(m+1). With m = 1,000 and N = 900,000 requests in the window the error is roughly 900 requests, which is fine for spotting a tenant sending 50,000 and useless for ranking two tenants 200 apart.
- Say what breaks when the window slides: Misra-Gries and Space-Saving are insert-only and cannot be decremented as records age out. The workable construction is one summary per sub-window, say ten seconds, with 30 summaries merged at query time, and the merged error is the sum of the per-summary errors, so the bound degrades linearly in the number of sub-windows.
Follow-up
- The heaviest tenant is heavy because of one export job rather than user traffic. Should the limiter treat those as the same tenant?
- Two tenants sit tied at the boundary of the top 50. Does your answer flap, and does the flapping matter?
How would you filter results in a query?
Medium · Technical & Database Proficiency
Approach
- Separate the three filtering stages: WHERE filters rows before grouping, HAVING filters groups after GROUP BY (so it can test COUNT(*) or SUM), and a filter on a window result such as ROW_NUMBER needs a subquery or CTE because WHERE runs before window functions are computed.
- Handle NULL explicitly: status <> 'closed' silently drops rows where status is NULL, because the comparison yields UNKNOWN. Add OR status IS NULL, or use IS DISTINCT FROM where the database supports it. Use NOT EXISTS instead of NOT IN against a subquery that can return NULL, since a single NULL makes NOT IN return no rows.
- On a LEFT JOIN, put conditions on the right-hand table in the ON clause. The same condition in WHERE removes the unmatched rows and turns the query into an inner join.
- Keep predicates index-friendly. WHERE EXTRACT(YEAR FROM hire_date) = 2024 cannot use a plain index on hire_date, while hire_date >= '2024-01-01' AND hire_date < '2025-01-01' can. A leading-wildcard LIKE '%son' cannot use a B-tree index either. Confirm the plan with EXPLAIN.
- When the filter value comes from user input, pass it as a bind parameter instead of concatenating it into the SQL string. That closes off SQL injection and lets the database reuse the plan.
Follow-up
- Write a query that returns departments with more than five employees earning over a threshold. Which part of it goes in WHERE and which in HAVING?
- This filter is slow on a large table even though the column has an index. How would you find out why?
- How do you filter on a list of values the user picks, when the list can be empty?
Explain why the owner filter ignores the listing index
Medium · composite index · query plans · sort elimination
The only index on resource is (tenant_id, status, updated_at DESC, resource_id DESC). A new endpoint returns one user's resources across all statuses, newest created first: WHERE tenant_id = $1 AND owner_user_id = $2 ORDER BY created_at DESC LIMIT 20. On a tenant with 2M rows it takes 900 ms and EXPLAIN shows a sort above a large scan. Explain precisely why the existing index cannot serve it, give the index that can, and state which of these the new index still will not help: owner_user_id alone across tenants; the same query ordered by updated_at. PostgreSQL 16.
Approach
- Separate the two jobs an index does. For filtering, a composite btree is seekable only on a left prefix, so with no predicate on status the scan can at best range over tenant_id and test owner_user_id per row; PostgreSQL 16 has no btree skip scan to jump the unconstrained column.
- For ordering, the index is sorted by (status, updated_at) within a tenant and not by created_at, so the LIMIT cannot stop early: every matching row is read and then sorted. That is the 'Sort Method: top-N heapsort' line, and it is why the plan reads 2M rows to answer with 20.
- Derive the replacement from the access path — equality, equality, then the ordering column: CREATE INDEX CONCURRENTLY ON resource (tenant_id, owner_user_id, created_at DESC). The scan seeks to the (tenant, owner) range and walks 20 entries in order, so the Sort node disappears along with the row-read.
- Treat INCLUDE (title, status) as conditional, not free. An index-only scan still visits the heap for any row whose page is not marked all-visible, so on a table taking 1.2k writes/second the win depends on autovacuum keeping the visibility map current, and the wider index costs more on every insert.
Follow-up
- 90% of rows are status='active'. Would a partial index WHERE status = 'active' change your answer, and for which of the three queries?
- A dashboard runs this for 40 owners in one page load. What changes about the design?
How would you get the second highest salary from an employee table?
Medium · Technical & Database Proficiency
Approach
- Clarify the tie rule first. If two people share the top salary, decide whether the answer is the next distinct value or the second row. Also decide what to return when there is no second value: NULL or an empty result.
- Subquery version: SELECT MAX(salary) FROM employee WHERE salary < (SELECT MAX(salary) FROM employee). It returns the second distinct value, skips NULLs because MAX ignores them, and returns NULL when only one distinct salary exists. With an index on salary, both MAX lookups can be read from the index.
- Window version: compute DENSE_RANK() OVER (ORDER BY salary DESC) in a CTE, then keep rank = 2. DENSE_RANK keeps ties on the same rank without gaps. RANK would skip 2 after a tie at the top, and ROW_NUMBER would return an arbitrary one of the tied rows. Expect a sort, O(n log n), unless an index supplies the order.
- LIMIT/OFFSET version: SELECT DISTINCT salary ... ORDER BY salary DESC LIMIT 1 OFFSET 1. It returns no row when there is no second value, so wrap it as a scalar subquery if the caller expects NULL. In PostgreSQL, DESC sorts NULLs first by default, so add WHERE salary IS NOT NULL or NULLS LAST.
- Generalise it: the window version handles the Nth highest by changing the rank filter. It also handles the second highest per department with PARTITION BY department_id, which the nested-MAX version cannot do cleanly.
Follow-up
- Return the second-highest salary in each department, including departments that have only one employee.
- Return the employees who earn that second-highest salary, not just the amount.
- How would you get the Nth highest salary when N is a parameter?
Convert the listing endpoint from offset pages to stable cursors
Medium · pagination · cursors · index access path
GET /v1/resources returns a tenant's resources newest-updated first, today with page and per_page, backed by index (tenant_id, status, updated_at DESC, resource_id DESC). Callers are a browser feed and a nightly sync job that walks every page. Users report items appearing twice or vanishing between pages, and page 400 is slow. Design the cursor contract: what the cursor contains and how it is encoded, the exact WHERE and ORDER BY, what happens when a row's updated_at changes mid-walk, how a client detects the end, and what the sync job does when a cursor is rejected.
Approach
- Separate the two defects, because they have different fixes. Cost: OFFSET n makes the engine produce and discard n rows, so price grows with page depth rather than page size and page 400 pays for 400 pages of work. Correctness: while the set shifts, rows cross the offset boundary and are skipped or repeated, and nothing in the response lets the client detect it.
- Write the seek: WHERE tenant_id = $1 AND status = $2 AND (updated_at, resource_id) < ($k, $id) ORDER BY updated_at DESC, resource_id DESC LIMIT n. The tie-break is not decoration - updated_at is not unique, and two rows sharing a timestamp across a page boundary reintroduce exactly the skip this was adopted to remove. PostgreSQL seeks the composite index on the row-value comparison directly; on an engine that does not optimise a row constructor, expand it into the equivalent OR form or the plan quietly degrades to a scan.
- Encode the cursor as an opaque token carrying the sort key, the id, and a fingerprint of the filter and sort order, signed or at minimum validated. A cursor replayed against a different sort or filter must be a 400 with its own code, not a silently wrong page - the sync job cannot notice the difference otherwise.
- State the guarantee precisely rather than generously. Keyset is stable against inserts and deletes elsewhere in the set, because the position is a value and not a count. It is not a snapshot: updated_at is mutable, so a row that is edited during the walk re-sorts and may be seen twice or not at all. If the sync job needs exactly-once coverage, order on an immutable key such as (created_at, resource_id), or walk resource_revision by revision_id and treat updated_at as data.
Follow-up
- The client wants a total count and the ability to jump to page 400. What can you honestly offer instead, and what does each option cost?
- How do you paginate backwards, and what does that require of the index?
Can you explain your process for debugging a complex technical issue?
Medium · Technical & Database Proficiency
Approach
- Start by reproducing it and pinning down the facts. Write down the exact error or wrong output, when it started, which users or inputs it affects, and what changed around then (deploy, config, data volume, a dependency). I do not form a theory until I can trigger the failure or at least describe precisely when it happens.
- Narrow the search space in halves. Cut the input down to a minimal failing case, use git bisect between a known good commit and a known bad one, or compare a failing request with a passing one field by field. Each check should rule out half the remaining suspects, whichever way it comes out.
- Collect evidence before changing code. Read the full stack trace and the logs around the timestamp, add targeted logging or step through in a debugger, and check the data itself. For a slow query, run EXPLAIN ANALYZE and compare estimated with actual row counts, and look for a sequential scan or a missing index.
- Test one hypothesis at a time and change one variable per experiment. Then separate the trigger from the root cause: a deploy can expose a NULL that was always in the data, and rolling back hides the problem without fixing it.
- Close the loop. Fix the cause, add a regression test that fails without the fix, verify in the environment where it broke, and write a short note on cause, fix and how it was found so the next person does not repeat the search.
Follow-up
- What do you do when the bug only happens in production and you cannot reproduce it locally?
- How do you debug a problem that shows up intermittently, such as a race condition or a timeout?
- Tell me about the hardest bug you have tracked down. What was the root cause, and how did you confirm it?
Suggested practice checklist
Seven days built around the three reported rounds: SQL and debugging for the panel, STAR stories for the hiring manager, with a mixed mock at the end. Days that name questions list them in the plan so you can open them.
Day 1 — Map the loop and inventory your material
- Write the three reported rounds (Recruiter Screen, Hiring Manager Interview, Panel Interview) and note whether each is conversational, behavioral or technical.
- List four recent projects where you handled requirements through deployment, with the schema or queries you wrote on each.
- Write a short career summary and your reason for applying to Barrett Business Services.
Deliverable: A one-page loop map, a four-project inventory and a written career summary with a reason for applying.
Day 2 — SQL filtering fundamentals
- Work through filter exercises that combine WHERE, AND/OR with parentheses, NULL checks, IN and BETWEEN, and then repeat with HAVING after GROUP BY.
- Write the answer to the filtering question aloud, explaining each predicate and which would use an index.
- Attempt the practice question on why an owner filter ignores the listing index, then summarise the cause in two sentences.
Deliverable: A sheet of ten filter queries with notes on index use, plus a spoken answer to the filtering question and a written summary of the owner-filter problem.
Day 3 — Second highest salary and window functions
- Write the second-highest-salary query three ways: a subquery on the maximum, an offset query and DENSE_RANK in a window function.
- Run each against a table with tied top salaries, NULL salaries and only one distinct salary, and record which versions return the right result.
- Extend one version to second highest salary per department, then add a join and an aggregate to practise reading results.
Deliverable: Three working versions of the second-highest query, a table of their behavior on ties, NULLs and short tables, and the per-department version.
Day 4 — Debugging walkthrough and large-data tuning
- Pick one real incident from your work and write the debugging sequence: reproduction, what changed, narrowing, hypothesis, fix, prevention.
- Deliver it aloud as an answer to the debugging question, without naming tools until the method is clear.
- Work the practice question on converting offset pagination to stable cursors, to rehearse optimization on large datasets.
Deliverable: A written debugging sequence from a real incident, a recorded spoken answer and a short note on why cursors scale better than offsets.
Day 5 — Estimation method and story
- Take a past project and break it into tasks, give each a best, likely and worst case, and list the assumptions behind the totals.
- Compare your original estimate to what happened, and write down the adjustment you would now apply.
- Write a STAR story where you reported a slipping schedule to a non-technical stakeholder, and say it aloud.
Deliverable: A task-level estimate with ranges and assumptions, an estimate-versus-actual note and a STAR story on communicating a schedule change.
Day 6 — Pivot and disagreement stories
- Write the STAR story for changing approach after feedback, covering who gave the feedback, how you checked it, what it cost and the result.
- Write the STAR story for a technical disagreement with a teammate, with the evidence you used and how the decision was made.
- Say both stories aloud, then cut each until the situation takes two sentences and your decision is clear.
Deliverable: Two edited STAR stories, each with the decision, cost and result stated.
Day 7 — Mixed panel mock
- Run a mock that alternates a SQL question, a behavioral prompt, the debugging question and an estimation question, speaking your reasoning throughout.
- Review the recording for places where you gave an answer without explaining why, and redo those.
- Write three questions for the team about its current challenges, one for the hiring manager about project estimation.
Deliverable: A recorded mixed mock with a list of answers to redo, and four written questions for the interviewers.
Behavioural preparation
Candidates report that the Hiring Manager Interview centres on behavioral traits, and that project-management questions sit alongside the technical ones. For this role the three reported themes are estimation, changing approach after feedback and resolving disagreements. Prepare each as a short STAR story in which you made the decision, and expect to link it to the business need behind the work.
- Describe a time you explained a technical trade-off or a delay to a non-technical stakeholder.
- Tell me about a time a project ran behind its estimate and what you did about it.
How do you estimate projects to ensure deadlines are met?
Medium · Project Management & Behavioral
Approach
- Open with a method, not a number: split the work into tasks small enough to estimate (requirements, schema or query changes, implementation, review, testing, deployment), then estimate each as a range, such as best case, likely and worst case, rather than a single value.
- Add explicit allowances for known risks (dependencies on other teams, unclear requirements, review and release overhead) and state your assumptions so a stakeholder can see what would change the date. For unfamiliar work, run a short spike first and re-estimate from what it shows.
- Calibrate with history: compare earlier estimates with actual effort on similar work and adjust your future numbers by that gap instead of relying on optimism.
- Describe tracking and communication: check progress against milestones, re-estimate when the facts change, and tell non-technical stakeholders early, offering options (cut scope, move the date, add support) instead of only reporting slippage.
- Close with a short STAR example from real work that gives the original estimate, what shifted, what you did and the outcome. Do not claim you never miss deadlines; show how you caught the miss early.
Follow-up
- Halfway through, you discover the work will take longer than estimated. What do you do and who do you tell?
- How do you estimate a task in a codebase or schema you have never worked in?
- A stakeholder gives you a fixed date before you have estimated anything. How do you respond?
Tell me about a time you had to pivot your approach to a project based on new feedback.
Medium · Project Management & Behavioral
Approach
- Choose a story where the feedback arrived after real work was done, and say who gave it (a user, a stakeholder, a reviewer or a teammate) and what exactly it said. A trivial tweak will not carry the answer.
- Show the decision: explain how you checked the feedback against evidence, why it justified changing direction rather than adjusting details, and how you weighed the cost of work already completed so that sunk effort did not drive the choice.
- Cover execution: what you kept, what you discarded, how you re-planned the schedule and how you told the people affected. Tie the change to a business or operational need, since reports say the role connects technical requirements to the business.
- Give a concrete result and a lesson: what improved, what the pivot cost in time or rework, and what you now do earlier (for example showing a prototype or confirming requirements sooner) so the late change is less likely.
- The mistake that sinks this answer is a story where you were right all along, or where you changed course only because you were told to and learned nothing.
Follow-up
- How did you decide the feedback justified a pivot rather than a smaller adjustment?
- What did the change cost, and how did you communicate it to your team and stakeholders?
- What would you do differently to catch that feedback earlier?
How do you handle disagreements within a development team?
Medium · Project Management & Behavioral
Approach
- Choose a real technical disagreement with a teammate, such as a schema design, a query approach or how to scope a release, not a personality clash, and describe both positions fairly. A story where the other person was simply wrong undermines the answer.
- Show your process: listen and restate their argument, agree on the criteria that matter (correctness, maintenance, delivery date, risk), then settle the question with evidence such as a quick prototype, a measurement or a query plan instead of opinion.
- Explain how the decision was made and owned: who had the final say, when you brought in the manager and how the team committed once it was decided, including if the outcome went against you.
- State the result and the relationship afterwards: what shipped, whether the evidence changed anyone's mind (including yours) and how the working relationship held. Use 'I' for your own actions and name the contribution of others.
- Avoid two failures: claiming you never disagree, and describing a win that left the team resentful.
Follow-up
- What if the decision went against you and you still thought it was wrong?
- When do you bring in the manager rather than keep working it out between the two of you?
- Describe a time the other person's argument changed your mind.