Interview guides · C.H. Robinson
C.H. Robinson Software Engineer Interview Guide
C.H. Robinson Software Engineer interview guide: reported rounds, questions and how candidates describe the process.
The 60-second brief
A Software Engineer at C.H. Robinson builds and scales the core technology driving one of the world's largest third-party logistics (3PL) platforms. Software engineers directly influence the proprietary transportation management systems (TMS), supply chain visibility tools, and automated pricing engines that move billions of dollars in freight globally. The engineering team focuses on creating resilient microservices, high-throughput data pipelines, and intuitive internal and customer-facing interfaces that optimize supply chain operations. At C.H. Robinson, technology is integral to the core logistics business. Software engineers work on challenging problem spaces including route optimization algorithms, real-time IoT tracking integrations, event-driven data scaffolding, and automated freight-matching platforms.
This guide is scoped to a Software Engineer candidate at C.H. Robinson.
Focus areas
- SQL
- Relational database design
- CRUD operations
The C.H. Robinson interview process
C.H. Robinson candidates report 3 rounds over 3-5 weeks. The stages below are what candidates describe, not a published process.
Phone Screening
Initial phone screening to assess candidate's background and fit for the role.
What to demonstrate
- Initial phone screening to assess candidate's background and fit for the role
- Depth in SQL
How to prepare
- Be able to walk your CV end to end in two minutes, and say why this company specifically.
- Have your salary expectations, notice period and location constraints ready, and ask for the rest of the loop in writing.
Technical Interviews
Multiple rounds of technical evaluations to assess coding and problem-solving skills.
What to demonstrate
- Multiple rounds of technical evaluations to assess coding and problem-solving skills
- Depth in SQL
How to prepare
- Answer aloud and timed: Explain the four main pillars of object-oriented programming (OOP).
- Answer aloud and timed: How do you stop a program running an infinite loop within the terminal?
Behavioral Assessments
Interviews focusing on cultural fit and collaboration within the team.
What to demonstrate
- Interviews focusing on cultural fit and collaboration within the team
- Depth in SQL
How to prepare
- Prepare three examples from your own work, each with a decision you made and an outcome you can quantify.
- Re-read the description of the behavioral assessments above and write down what you would ask to confirm before it.
Where candidates lose points
Master database basics thoroughly
Expect direct questions on SQL joins, database normalization, schema design, and basic query optimization. Be ready to draw entity-relationship structures on a whiteboard or virtual canvas.
Be prepared to explain your language of choice deeply
If you state proficiency in C# or Java, be ready for language-specific mechanics (e.g., memory management, thread execution, async keywords, interface implementation).
Use the STAR method for behavioral questions
Clearly structure your behavioral answers by describing the Situation, Task, Action, and Result. Focus heavily on collaboration, conflict resolution, and technical initiative.
Questions & practice
What does the using keyword mean and do in C#?
Medium · Language Fundamentals & Core CS Concepts
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
What is the difference between asynchronous and synchronous programming?
Medium · Language Fundamentals & Core CS Concepts
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
Explain the four main pillars of object-oriented programming (OOP).
Medium · Language Fundamentals & Core CS Concepts
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
How do you stop a program running an infinite loop within the terminal?
Medium · Language Fundamentals & Core CS Concepts
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
What is 13 in binary, and what is 18 mod 7?
Medium · Language Fundamentals & Core CS Concepts
Approach
- Say what the runtime actually does before reasoning about the code.
- Name what is shared across threads and what owns each piece of state.
- Identify the window where an invariant is briefly untrue.
- Distinguish a value from a reference to it, and say which one you handed out.
Follow-up
- What happens if two callers reach this at the same time?
- Where could this allocate more than you expect?
Write a function to reverse a string or sort a list by rank.
Medium · Practical Coding & Web Technologies
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Explain the difference between controlled and uncontrolled React components.
Medium · Practical Coding & Web Technologies
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
How would you implement a breadth-first search (BFS) algorithm or find the maximum element in an array?
Medium · Practical Coding & Web Technologies
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
What are the core differences between HTML, CSS, and JavaScript in modern web development?
Medium · Practical Coding & Web Technologies
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
Given an internal tool UI, what are your key takeaways, and how would you identify design or functional issues
Medium · Practical Coding & Web Technologies
Given an internal tool UI, what are your key takeaways, and how would you identify design or functional issues?
Approach
- Restate the input: its shape, its size, and what is guaranteed about it.
- Name the brute-force solution and its complexity before improving on it.
- Choose the data structure from the access pattern, not from familiarity.
- State the target complexity and say which constraint rules the naive version out.
Follow-up
- How does this change if the input no longer fits in memory?
- What is the worst case, and how likely is it on real data?
What are the basic CRUD operations in SQL, and what are the three main types of SQL joins?
Medium · Databases & Data Scaffolding
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
How do you write a query to find the maximum salary or record in a database table?
Medium · Databases & Data Scaffolding
Approach
- Name the grain you start from and join outward from it.
- Check whether any join is one-to-many before aggregating, or the sums inflate.
- Say which index the query would use, and what makes it unusable.
- Handle the rows that do not match: that is usually the actual question.
Follow-up
- How does the query change if that join becomes one-to-many?
- What happens to this when the table is ten times larger?
How would you design a relational database involving students, classes, and registration?
Medium · Databases & Data Scaffolding
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
What are the trade-offs between relational databases and key-value or document stores?
Medium · Databases & Data Scaffolding
Approach
- Clarify what is being asked and what a complete answer contains.
- State your assumptions explicitly before working the problem.
- Say what you would check first and why it is the highest-information step.
- Work from the requirement backwards to the design.
Follow-up
- What assumption would you test first?
- How would you know your answer was wrong?
What is a three-tier architecture, and how do the presentation, business logic, and data layers interact?
Medium · Architecture & System Design
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
How would you design the software backend and data scaffolding for an online store?
Medium · Architecture & System Design
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
Walk us through a system design for real-time tracking of moving delivery trucks across a logistics network.
Medium · Architecture & System Design
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
What are the differences between REST, CQRS, SOLID principles, and Domain-Driven Design (DDD)?
Medium · Architecture & System Design
Approach
- Say who the caller is and what they do when the call fails halfway.
- Define the identity of a request so a retry cannot double-apply it.
- Separate accepted, pending, failed and confirmed; they are different facts.
- Design the error taxonomy before the success shape; callers branch on it.
Follow-up
- What happens if the caller retries after a timeout?
- How does a client discover it is on an old version of this contract?
What is EDI and EDIFACT, and how do protocols like FTP and SFTP support enterprise data exchange?
Medium · Architecture & System Design
Approach
- Fix the scope first: who calls this, how often, and what they do when it fails.
- Name the read and write paths separately; they rarely have the same bottleneck.
- Choose a partition key and say what query it makes expensive.
- State the consistency you need, and where you are willing to be stale.
Follow-up
- What breaks first when traffic grows ten times?
- How does this behave when that dependency is down for an hour?
One customer endpoint stalls deliveries to every other destination
Medium · bulkhead · timeouts · saturation
The egress service delivers about 1.5k webhooks/second across 40,000 destinations, with a per-destination concurrency cap of 4 and a 10-second connect-plus-read timeout. Throughput falls to 300/second, queue depth climbs, and p99 delivery latency for unaffected destinations goes from 200 ms to minutes, while the error rate barely moves. One tenant holds 900 destination rows whose URLs share a hostname that now answers in 9.5 seconds. Explain the mechanism with the arithmetic, then give the containment in the order you would apply it.
Approach
- Look at saturation before errors. A flat error rate with collapsing throughput says nothing is failing, things are waiting, so the first signal to pull is in-flight request count or pool wait time rather than the error counter. This is the distinction that decides the whole investigation.
- Group in-flight work by resolved host, not by destination id. The cap is keyed per destination row, so 900 rows sharing one hostname buy 3,600 concurrent slots against a single host, each held for 9.5 seconds. The bulkhead was never a bulkhead for that host, and grouping by the wrong dimension is why the dashboard looked healthy.
- Do the arithmetic in both directions. Required concurrency is arrival rate times latency, so 1.5k/second at 200 ms needs about 300 in flight, which is entirely consumed by 3,600 slow slots; conversely whatever concurrency is left sustains rate equals concurrency divided by 9.5 seconds, which is the 300/second you are seeing. Matching both numbers is what promotes this from a plausible story to the mechanism.
- Explain why the circuit breaker never helped. It opens on consecutive failures, and a 9.5-second response inside a 10-second timeout is a success. Slow is not failing, so an error-rate breaker cannot see this; you need a slow-call ratio, a deadline propagated from the caller's remaining budget, or a concurrency limiter.
Follow-up
- The host recovers to 80 ms. How long does the queue take to drain, and what does the drain do to the recovered host?
- Where should the 10-second timeout number actually come from?
Suggested practice checklist
Built from the rounds and topics C.H. Robinson candidates report.
Day 1 — Map the C.H. Robinson loop
- Write out the reported sequence: Phone Screening, Technical Interviews, Behavioral Assessments.
- For each round, write one sentence on what it is judging, from the description above, and mark the one you are least ready for.
Deliverable: A one-page map of the 3 reported rounds, with the weakest marked.
Day 2 — Work SQL
- Spend the session on SQL, which C.H. Robinson candidates report being tested on.
- Write one worked example in SQL and time yourself on it.
Deliverable: One timed worked example in SQL.
Day 3 — Work Relational database design
- Spend the session on Relational database design, which C.H. Robinson candidates report being tested on.
- Write one worked example in Relational database design and time yourself on it.
Deliverable: One timed worked example in Relational database design.
Day 4 — Work CRUD operations
- Spend the session on CRUD operations, which C.H. Robinson candidates report being tested on.
- Write one worked example in CRUD operations and time yourself on it.
Deliverable: One timed worked example in CRUD operations.
Day 5 — Answer out loud: Language Fundamentals & Core CS Concepts
- Answer aloud, timed: What does the
usingkeyword mean and do in C#? - Answer aloud, timed: What is the difference between asynchronous and synchronous programming?
Deliverable: Spoken answers to 2 reported Language Fundamentals & Core CS Concepts question(s), under time.
Day 6 — Answer out loud: Databases & Data Scaffolding
- Answer aloud, timed: How would you design a relational database involving students, classes, and registration?
- Answer aloud, timed: What are the basic CRUD operations in SQL, and what are the three main types of SQL joins?
Deliverable: Spoken answers to 2 reported Databases & Data Scaffolding question(s), under time.
Day 7 — Answer out loud: Architecture & System Design
- Answer aloud, timed: What is a three-tier architecture, and how do the presentation, business logic, and data layers interact?
- Answer aloud, timed: How would you design the software backend and data scaffolding for an online store?
Deliverable: Spoken answers to 2 reported Architecture & System Design question(s), under time.
Behavioural preparation
Behavioural rounds judge the decision you made and what it cost.
How do hash tables work, and how do you handle key collisions?
Medium · Databases & Data Scaffolding
Approach
- Pick a story where you made the decision, not one where you watched it.
- State the situation in two sentences and spend the rest on the reasoning.
- Give the blast radius: what could have broken, and what you measured.
- Name the disagreement and how you resolved it with evidence.
Follow-up
- What would you do differently if you ran that again?
- How did you know your change caused the improvement?
Ship under a deadline and bound the debt you chose
Medium · pagination · technical debt · tradeoffs
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
- 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.
- 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.
- 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.
- 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?
Estimate work you have never done and defend the range
Hard · estimation · backfills · expand-contract
You are asked to estimate a change you have never attempted: add a column to a 100-million-row table, populate it, move reads across, and drop the old shape. Give a range with the assumptions that generate it, including batch size, the signal your backfill throttles on, and wall-clock hours, and name the three unknowns that would move the number most. Then describe a real estimate you gave under comparable ignorance: how you expressed its uncertainty, what you committed to, and how wrong you turned out to be.
Approach
- Decompose into independently deployable steps before estimating anything: add the column nullable, write both shapes, backfill in batches, verify, move reads, stop writing the old shape, drop it. That is four deploys spread over days, and the calendar estimate is dominated by them rather than by the loop's runtime.
- Do the arithmetic aloud for the part that has arithmetic in it: batch size times number of batches times per-batch duration, at a write rate the primary can absorb alongside roughly 1.2k writes per second of production traffic. The loop is throttled by replication lag and lock waits, not by how fast it can issue statements.
- Price the schema step by its lock rather than its statement duration. In PostgreSQL an ALTER TABLE taking ACCESS EXCLUSIVE waits for every open transaction on that table while later queries queue behind it, so a millisecond change issued during a thirty-second analytics query stalls that table for thirty seconds. Adding a nullable column with a non-volatile default avoids a rewrite from version 11; a new index wants CREATE INDEX CONCURRENTLY, which cannot run inside a transaction block and leaves an invalid index behind if it fails.
- Express the answer as a range whose endpoints each trace to a stated assumption, then name the cheapest experiment that collapses it, which is almost always running one real batch against the real table and multiplying.
Follow-up
- How do you verify the backfill genuinely finished, given rows written by production traffic while it ran?
- Where does the backfill resume from after a worker is killed mid-batch, and what makes that resume point trustworthy?