Carnegie Robotics · Software Engineer
Updated · 2026-10-02

Carnegie Robotics Software Engineer
Interview Guide

THE 60-SECOND BRIEF

Candidates describe Carnegie Robotics as a company whose software lets autonomous systems perceive, navigate and operate outside the lab, with applications reported from defense to agriculture. The Software Engineer role reported here covers middleware, message serialization, process management, loggers fast enough to saturate NVMe drives, over-the-air update mechanisms, CUDA kernels for GPU acceleration and geospatial data. Engineers work alongside mechanical and electrical engineers and with manufacturing and test technicians, so the code has to run on real machines.

This guide is for candidates applying for a Software Engineer position at Carnegie Robotics. It covers the three reported stages, the ten questions candidates report (transformation matrices, profiling, C++ and Python, GDB and valgrind, geospatial coordinates, and five project-history prompts), the reported requirements (C++, Python, 3D geometry, kinematics, autonomous-systems experience) and a week of practice built from them.

Candidates report three stages over roughly three to five weeks: a Recruiter Screening Call, Technical Interviews that often include live coding, and an Onsite/Virtual Interview with several engineers, a presentation on previous work and deep technical discussions.

Coding interviews (problem solving)Data structures & algorithmsC++

34 min read

Browse Software Engineer questions

See the practice prompts

16Practice promptsAcross five skill areas

The work candidates describe sits between application code and hardware. Reported examples are infrastructure pieces (message serialization, process management, custom loggers that write to NVMe drives, OTA updates) next to perception-side work (point clouds, GPU kernels, geospatial data). The reported requirements put C++ and Python first, then 3D geometry and kinematics, then experience with autonomous systems or robotics. Rust, Go and CUDA are listed as extras, and candidates mention that the role requires US Person status and comfort working with little supervision.

The ten reported questions split into two groups. Five are technical and domain questions: how you handle transformation matrices and kinematic chains, how you use perf or Callgrind to speed up software, what you have done with C++ and Python in robotics or computer vision, a low-level failure you debugged with GDB or valgrind, and how you keep geospatial data and coordinate systems accurate. Five are project-history questions: working with physical hardware, taking feedback in code review or on GitHub pull requests, working autonomously on a hard problem, why robotics meets industry interests you, and prioritising several R&D projects at once. The topic mix candidates describe adds coding problems, data structures and algorithms, C++ and software-engineering concepts.

Preparation therefore has three strands. First, fluent C++ under live-coding conditions, with the data-structure and streaming problems in PracHub's practice set as exercise. Second, a small set of domain answers you can back with working code: compose and invert rigid transforms, read a profile, narrate a debugger session, name the frame and datum of every coordinate. Third, four or five project stories that survive follow-ups, because candidates also report a presentation on previous work and say that GitHub repositories and project documentation may be looked at, so the projects you present need to be ones you can explain down to the trade-offs.

01

Recruiter Screening Call

reported

Candidates report an initial call with a recruiter about your background and fit for the role. No technical content is reported for this stage, so treat it as the place where your story is set: which projects you lead with, why robotics, and whether you meet the listed requirements. Candidates describe a US Person requirement for the role and a preference for people comfortable with low supervision, so be ready to speak to both plainly.

What to demonstrate

  • Whether your background lines up with the reported requirements: C++, Python, 3D geometry, kinematics, autonomous systems or robotics
  • Your reasons for wanting robotics work specifically
  • Eligibility and logistics that the recruiting team has to confirm

How to prepare

  • Write a short walk through your CV that leads with the project closest to autonomous systems, hardware or geospatial data, and name your exact contribution to it.
  • Prepare a specific answer to why robotics and real-world industrial use interests you, drawn from something you built or studied rather than from the company's description.
  • Confirm your work-authorization status and availability before the call, and ask the recruiter what the later stages involve.
Carnegie Robotics Software Engineer candidate reports ↗
02

Technical Interviews

reported

Candidates report one or more technical interviews, often with live coding to establish baseline skills. The topic mix they describe is coding problems, data structures and algorithms, C++ and software-engineering concepts. The reported domain questions (transformations, profiling, geospatial accuracy, debugging) are not tied to a stage, so prepare them here as well as for the onsite. Plan to type working C++ while talking through your reasoning.

What to demonstrate

  • Working code on a live problem, which is what a live coding stage tests by its format
  • Data-structure and algorithm choices and their complexity
  • C++ fluency: ownership, containers, iterators, const-correctness
  • The reasoning you say out loud while you solve

How to prepare

  • Solve problems in C++ in a plain editor without autocomplete: the interval and peak-concurrency problem, the top-k-in-a-window problem and the stream-merging problem in the practice set are good material.
  • For each problem, state the complexity, name two edge cases (empty input, ties, duplicates, out-of-order data) and test them before you say you are done.
  • Rehearse the transform-composition and profiling answers with a short code example for each, so you can write them rather than only describe them.
  • Keep a Python version of each solution ready in case you are asked to switch languages.
Carnegie Robotics Software Engineer candidate reports ↗
03

Onsite/Virtual Interview

reported

Candidates describe a more extensive series, often day-long, onsite or virtual, with several engineers, a presentation on previous work and deep technical discussions. The reported evaluation areas include hardware-software integration (IPC and middleware, memory and CPU limits on embedded systems, debugging with GDB on deployed systems) and geometry (coordinate systems, transformations, point-cloud basics, custom kernels and profiling). Prepare a presentation and rehearse the deep-dive questions out loud.

What to demonstrate

  • How clearly you present previous work and the decisions behind it
  • Depth on hardware-software integration: IPC, middleware, resource limits, debugging in deployed environments
  • Comfort with 3D geometry, coordinate systems and point-cloud basics
  • Consistency across several conversations with different engineers

How to prepare

  • Outline a presentation of one project: problem, architecture, the two decisions you would defend and the one you would change, and the measured result.
  • Choose a project that touched hardware or a deployed system, and prepare the debugging story with the exact tools and the root cause.
  • Practise explaining IPC choices (shared memory versus sockets, serialization cost, message ordering) and a memory or CPU budget you had to meet.
  • Update your GitHub profile and project documentation so that the repositories you mention have a readable README and build instructions.
Carnegie Robotics Software Engineer candidate reports ↗

PracHub editorial advice for the preparation topics above.

01

Describing transformations without naming conventions

When you explain how you handle transformation matrices and kinematic chains, state the frame convention (parent-from-child), multiplication order, homogeneous 4x4 form, how you store rotation (matrix or quaternion), and how you keep it valid (renormalise, check orthonormality). Be ready to write a compose-and-invert function and a test with a known answer.

02

Calling something slow without a profile

Do not guess at hotspots. Say you build with optimisation on and debug symbols, record with perf (perf record -g, then report) to find hot functions, use Callgrind for instruction and cache behaviour on a small deterministic input, change one thing, and measure again. Keep before and after numbers from a real project.

03

A debugging story that is only a tool name

For the GDB and valgrind story, walk through symptom, reproduction, hypothesis, evidence, root cause and fix. Name the specific error (use-after-free, invalid read, race) and how you confirmed the fix, rather than saying you stepped through it.

04

Coding in silence or skipping tests on the live problem

Candidates report live coding in the technical stage and talk about explaining your reasoning. State the approach and complexity before typing, write C++ you can compile in your head, and run through empty, duplicate and out-of-order inputs at the end.

05

Presenting previous work you cannot defend in detail

Pick a project where you made the design decisions. Prepare the alternatives you rejected, the measured result, and what failed. Check that the repository, README and build steps for anything you mention are current, since candidates report that interviewers may look at them.

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

9 technical prompts0 include a worked solution

Identify the heaviest tenants in a five-minute window under memory pressure

medium
top-kheavy hittersstreaming

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
  1. 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.
  2. 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.
  3. 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.
  4. 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?

Find overlapping job attempts and peak concurrency from lease records

medium
sweep lineintervalsleases

A day of job_run history yields about 50,000,000 attempt records: (job_run_id, job_type, attempt, started_at, finished_at which is NULL when the worker died, lease_expires_at). Leases expire on a clock, so a job that outran its lease ran twice. Produce (a) every job_run_id whose attempts overlapped in wall-clock time and (b) the peak number of simultaneously running attempts per job_type with the minute it occurred. Target O(n log n). State how you treat a NULL finished_at and what clock skew does to your answer.

Approach
  1. Define the interval before sorting anything: an attempt occupies [started_at, COALESCE(finished_at, lease_expires_at)). finished_at is observed and lease_expires_at is only a promise, so every attempt without a finish contributes an estimate and the whole result is a lower bound on overlap rather than an exact count.
  2. For peak concurrency, sweep: emit 2n endpoints, sort by (timestamp, kind) with ends ordered before starts at equal timestamps, then walk the sequence maintaining a counter per job_type and record each type's maximum with its timestamp. O(n log n) dominated by the sort, O(n) space, or O(1) extra if the sort is external and the walk streams.
  3. For overlap detection, do not compare attempts pairwise. A single global sort by (job_run_id, started_at) gives both the grouping and the order; within a group, keep the maximum end seen so far and report an overlap exactly when the next start is less than that running maximum, which is one linear pass after the sort.
  4. Half-open intervals matter and are easy to get wrong: with closed intervals an attempt ending at the same millisecond another begins reads as concurrency two, and across 50,000,000 records that artefact swamps the real signal.
Follow-up
  • A handler is not idempotent and you have found 400 overlapping jobs. Which of them actually caused damage, and what would you query to find out?
  • Peak concurrency for one job_type is 4 against a configured cap of 4. Is the cap working, or is the data hiding attempts that never started?

Merge partitioned event streams into one ordered feed with bounded lateness

hard
k-way mergewatermarksout-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
  1. 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.
  2. 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.
  3. 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.
  4. 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?

The week follows the three reported stages: coding and C++ first, then the geometry, profiling and debugging answers, then project stories and a presentation rehearsal. Days that practise reported questions point at them, and coding days use PracHub's practice set.

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 inventory your projects
  • List the three reported stages and write what you expect to be asked at each, using the reported topics: coding, data structures and algorithms, C++, hardware-software integration, geometry.
  • List every project in your history that involved hardware, a deployed system, geometry or a profiler, and mark the two you could present for a long deep-dive.
  • Write a short pitch for why robotics interests you, using a real example, and note your work-authorization status for the recruiter call.

Deliverable: A one-page loop map, a ranked project list with two chosen, and the written robotics motivation pitch.

02Live C++ on intervals and top-k
  • In a plain editor with no autocomplete, solve the overlapping job attempts and peak-concurrency problem (sort and sweep, or a heap) in C++.
  • Solve the heaviest-tenants-in-a-window problem, choosing between a hash map with a heap and a bounded structure, and state its complexity.
  • Say each approach aloud before writing, then list three edge cases and test them.

Deliverable: Two compiling C++ solutions, each with complexity stated and a list of tested edge cases.

Practice prompt ↗Practice prompt ↗
03Streams, ordering and profiling
  • Solve the problem of merging partitioned event streams into one ordered feed with bounded lateness, using a k-way merge with a heap and a watermark.
  • Profile a small C++ program of your own with perf record and perf report, then with Callgrind, and fix one hotspot.
  • Write a before-and-after note with numbers, and rehearse the answer to the profiling question using it.

Deliverable: A working stream-merge solution and a profiling note with measured before and after numbers.

Practice prompt ↗Practice prompt ↗
04Transforms and geospatial coordinates
  • Write C++ (or Python) that composes, inverts and applies rigid transforms along a chain of joints, with a test whose answer you can check by hand.
  • Write a one-page reference on coordinate frames: which frame each input uses, which datum and projection geospatial data uses, and where conversions happen in your code.
  • Answer the transformation question and the geospatial-accuracy question aloud, using your code and note.

Deliverable: A tested transform-chain implementation, a coordinate-frame reference page and two spoken answers.

Practice prompt ↗Practice prompt ↗
05Low-level debugging and the C++ and Python story
  • Reproduce a heap overflow or use-after-free in a small program, then find it with GDB (backtrace, watchpoint) and valgrind memcheck.
  • Work through the practice debugging scenario in which instances grow by hundreds of megabytes per hour, and write the investigation order you would follow.
  • Write your C++ and Python robotics or vision story, including the boundary between languages and one measured result.

Deliverable: A written debugging narrative from symptom to fix, an investigation order for the memory-growth scenario, and the C++ and Python story.

Practice prompt ↗Practice prompt ↗Practice prompt ↗
06Project-history stories
  • Write the hardware project story, the code-review feedback story and the autonomy story, each with situation, your decision, result and a lesson.
  • Write the prioritisation answer around a real period when several projects competed for you.
  • Say all four aloud, then ask a friend for follow-up questions and answer them.

Deliverable: Four rehearsed stories, each with notes on the follow-up questions you were asked.

Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗Practice prompt ↗
07Presentation and full dry run
  • Build the outline for your presentation of previous work: problem, architecture, two defended decisions, one regret, measured result.
  • Present it aloud to someone, then take questions on trade-offs and failures.
  • Clean up the README and build instructions of the repositories you will mention, then run one coding problem, one domain answer and one story back to back.

Deliverable: A presentation outline presented once, cleaned-up repositories, and a completed mock run.

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

The reported project-history questions cover hardware work, code review, working autonomously, motivation for robotics and prioritising R&D work. The debugging question and the C++ and Python experience question are also asked as past-experience prompts. Candidates describe a role with low supervision and cross-discipline collaboration, so choose stories where you made the decisions, worked with people outside software, and can give a measured result.

What is your experience with C++ and Python in the context of robotics or computer vision?

medium
Technical and Domain Knowledge

What is your experience with C++ and Python in the context of robotics or computer vision?

Approach
  1. Open with the split, not a list of languages. Say which parts you wrote in C++ (latency-sensitive loops, drivers, serialization, memory-aware code) and which in Python (tooling, offline analysis, test harnesses, prototypes), and why the boundary sat where it did.
  2. Show concrete C++ practice: RAII and smart pointers for ownership, no allocation in hot loops, move semantics for large buffers, and a linear-algebra library for transform maths if you used one.
  3. Walk through one vision or robotics pipeline end to end: input (images or point clouds), processing steps, output, and one measured result such as frame rate, latency or error. If you used PyTorch, say how the model reached C++ (for example a TorchScript export loaded with libtorch).
  4. Cover the bridge between the languages: pybind11 or a similar binding, who owns the memory, and how you avoided copying large arrays between Python and C++.
  5. Be honest about depth. If one language is weaker, say what you would study next; claiming equal mastery of both is the fastest way to be exposed by a follow-up.
Follow-up
  • Where did the Python and C++ boundary cost you performance, and how did you measure it?
  • How do you pass a large image or point cloud between the two without copying it?
  • What would you refuse to write in Python on a robot, and why?

Can you describe a time you had to debug a failure in a low-level system using GDB or valgrind?

medium
Technical and Domain Knowledge

Can you describe a time you had to debug a failure in a low-level system using GDB or valgrind?

Approach
  1. Choose a failure with a non-obvious symptom: a crash that only appeared in the deployed build, intermittent memory corruption, a hang or a slow leak. State the symptom and how you reproduced it, for example by enabling core dumps or running gdbserver on the target.
  2. Narrate the sequence as hypotheses: take a backtrace (bt, thread apply all bt), inspect frames and variables, set a watchpoint on the corrupted field, and check build flags (a debug-info build changes timing and layout).
  3. For memory errors, explain what Valgrind's memcheck reported (invalid read or write, use of uninitialised value with --track-origins=yes, leaks with --leak-check=full), and why you might switch to AddressSanitizer or ThreadSanitizer when valgrind's slowdown hides a timing bug. Helgrind or ThreadSanitizer covers races.
  4. Name the root cause precisely (use-after-free, out-of-bounds index, race on shared state, uninitialised member, callback outliving its object), the fix, and the regression test or stress loop that showed it stayed fixed.
  5. Avoid ending with only the tool name. A story that says I ran GDB and found it shows no reasoning; the story is the chain from symptom to hypothesis to evidence.
Follow-up
  • Why could you not reproduce it under a debugger, and how did you deal with the timing change?
  • What would you have done if you could not attach a debugger on the target?
  • What did you change so that this class of bug would be caught earlier?

Tell me about a project where your code had to interact with physical hardware. What were the challenges?

medium
Behavioral and Project History

Tell me about a project where your code had to interact with physical hardware. What were the challenges?

Approach
  1. Pick a project where a sensor, actuator, board or test rig was involved and you wrote or changed code that touched it. State what the hardware did and what your code was responsible for in two sentences.
  2. Name the challenges specifically: timestamps and clock drift between devices, driver or firmware quirks, noisy readings, units and frame conventions, behaviour that differed between simulation and the real device, limited access to the machine.
  3. Describe how you made progress without constant hardware access: logging and replaying recorded data, simulators or mocks, hardware-in-the-loop tests, and what you checked first when behaviour looked wrong.
  4. Include a moment where the hardware overruled your assumptions and what you changed, plus a safety or recovery measure (watchdog, limits, safe default) if there was one.
  5. Close with the result and what you would do differently. A story told entirely in software terms misses the point of the question.
Follow-up
  • How did you separate a software fault from a hardware or wiring fault?
  • How did you test the code when the device was not on your desk?
  • Who on the mechanical or electrical side did you work with, and what did you need from them?

How do you handle feedback on your code during peer reviews or GitHub pull requests?

medium
Behavioral and Project History

How do you handle feedback on your code during peer reviews or GitHub pull requests?

Approach
  1. Use two stories in one answer: a time you received a review comment you disagreed with, and your general habits as a reviewer and author. A single story with no pushback sounds untested.
  2. Describe the comment concretely (naming, ownership, an unsafe cast, missing test, a performance claim) and what you did: ran a benchmark or wrote a test to settle it, or accepted the point and changed the code.
  3. Show how you work on a GitHub pull request: small reviewable commits, a description that states intent and how it was tested, replies to every thread, and a follow-up when you defer something.
  4. Show the other side: you review others by asking questions, pointing at the line and the reason, and separating must-fix from taste.
  5. The mistake that sinks this answer is defensiveness or the claim that you accept all feedback. Show a case where evidence changed your position, or where you held yours with data.
Follow-up
  • Tell me about a review comment that turned out to be wrong, and how you handled it.
  • How do you keep a long-running pull request from becoming hard to review?
  • What do you check first when you review someone else's C++ change?

Describe a situation where you had to work autonomously to solve a complex technical problem.

medium
Behavioral and Project History

Describe a situation where you had to work autonomously to solve a complex technical problem.

Approach
  1. Choose a problem that had no clear owner or specification and where nobody was available to hand you the answer. State what was unclear and what success looked like once you defined it.
  2. Show how you broke it down: a reproduction or minimal experiment first, a written plan with milestones, and decisions you recorded as you made them.
  3. Show the limits of autonomy. Name the point at which you asked for input or told a teammate what you were doing, and why you chose that moment; working alone is not the same as working silently.
  4. Give the result with a measure, and what you left behind (documentation, a test, a script) so the next person was not dependent on you.
  5. Avoid the hero story in which you disappeared for weeks and came back with a surprise; avoid the opposite, where you describe waiting for direction.
Follow-up
  • How did you decide when you were stuck enough to ask for help?
  • What did you do when you realised your first approach was wrong?
  • How did you keep the rest of the team informed while you worked alone?

What interests you about the intersection of robotics and real-world industrial applications?

medium
Behavioral and Project History

What interests you about the intersection of robotics and real-world industrial applications?

Approach
  1. Tie your interest to something you have done or studied: a project where code controlled or measured something physical, a course in perception or control, or a hobby build. Name it and say what you learned that pure software did not teach you.
  2. Say what draws you about the constraints: sensor noise, limited compute and memory, behaviour in the field where you cannot easily attach a debugger, and collaboration with mechanical and electrical engineers. Candidates describe exactly these conditions for this role, so refer to them as the work you expect.
  3. Connect it to the reported application areas, defense to agriculture, with a specific thought about one of them. Have a straight answer ready about how you feel about defense-related work, since candidates describe it as one of the fields and as a nice-to-have background.
  4. Finish with what you would contribute: for example the C++ and geometry skills you would bring, or the logging and debugging habits you built on past projects.
  5. Avoid a generic statement such as I love robots. Any specific, checkable detail beats enthusiasm.
Follow-up
  • Which part of the robotics stack would you least want to work on, and why?
  • What have you built outside work or study that connects to this?
  • What would you want to learn in your first months?

How do you prioritize tasks when working on multiple R&D projects simultaneously?

medium
Behavioral and Project History

How do you prioritize tasks when working on multiple R&D projects simultaneously?

Approach
  1. Start with a concrete situation: several R&D efforts with different owners, deadlines or unknowns running at once. Name how many and what each was, without exaggerating.
  2. State the method you actually use: list everything, then rank by impact, deadline, dependencies and cost of delay, and give extra weight to anything that needs scarce hardware or test-rig time.
  3. Treat research work differently from delivery work: put an explicit stopping rule on exploratory tasks (a question to answer or a result to reach) so they do not consume the week.
  4. Explain how you communicated the trade-offs: what you dropped or delayed, who agreed, and how you made the new plan visible. Prioritisation decided silently is a weak answer.
  5. Close with the outcome and one thing you changed afterwards, such as a weekly re-rank or a shared task board.
Follow-up
  • Tell me about a priority call you got wrong and how you recovered.
  • How do you handle a request that pushes aside work you consider more important?
  • How do you protect time for deep debugging or experimentation?
  • 01

    Can you describe a time you had to debug a failure in a low-level system using GDB or valgrind?

  • 02

    Tell me about a project where your code had to interact with physical hardware. What were the challenges?

  • 03

    How do you handle feedback on your code during peer reviews or GitHub pull requests?

  • 04

    Describe a situation where you had to work autonomously to solve a complex technical problem.

  • 05

    What interests you about the intersection of robotics and real-world industrial applications?

  • 06

    How do you prioritize tasks when working on multiple R&D projects simultaneously?

PracHub preparation framework ↗
How long does the Carnegie Robotics process take?

Candidates report three stages over roughly three to five weeks, with some describing three to four from first screen to decision. The stages are a Recruiter Screening Call, Technical Interviews and an Onsite/Virtual Interview. Because the last stage involves several engineers and is often described as day-long, keep your calendar flexible and confirm scheduling details with the recruiter.

Carnegie Robotics Software Engineer candidate reports ↗
Which languages and tools should I prepare?

C++ and Python are the languages listed as must-haves. Candidates also mention PyTorch and libtorch, GDB, valgrind, perf and Callgrind, and CUDA, with Rust or Go as extras. Prepare live coding in C++ first, and be ready to discuss the others from real experience rather than a quick skim.

PracHub Software Engineer practice ↗
What happens in the onsite or virtual stage?

Candidates report a series of conversations with several engineers, a presentation on your previous work and deep technical discussions. Prepare one project you can present with its architecture, trade-offs and measured results, and expect follow-up questions on how it behaved on hardware or in deployment.

PracHub Software Engineer practice ↗
Do I need robotics experience?

The requirements candidates describe list demonstrated experience in autonomous systems or robotics, strong 3D geometry and kinematics, and C++ and Python. If your experience is partial, prepare a project that shows transforms, sensor data or hardware interaction, and be explicit about what you built yourself.

PracHub Software Engineer practice ↗
What are the work-authorization requirements?

Candidates describe the role as requiring US Person status, and mention a background in defense-related government contracting as a nice-to-have. Settle your eligibility questions with the recruiter early, in the first call.

PracHub Software Engineer practice ↗
How should I prepare for the geometry and kinematics questions?

Practise writing code, not only formulas. Compose and invert rigid transforms along a chain, state the frame convention and rotation representation you use, and know the difference between local frames and geospatial coordinate systems with a datum and projection. Test with a case whose answer you can verify by hand.

PracHub Software Engineer practice ↗
Do my GitHub projects matter?

Candidates report that interviewers may look at GitHub or project documentation to judge coding style and documentation, and that personal and open-source projects are welcomed. Pin the repositories you want seen, write a clear README with build steps, and be ready to discuss any code you link.

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.