HORUS/blog

Sep 5, 2026 · robotics-career · robotics-jobs · getting-started · learning-robotics

What a Robotics Software Engineer Actually Does All Day

The day is mostly integration, debugging and testing on hardware, not inventing algorithms. Here is the honest hour-by-hour picture before you chase the job.

A robotics software engineer spends most of the day integrating, testing and debugging code on real hardware, not inventing control algorithms or training models. The job is mostly seams: parts that each work alone and fail together, on whichever foundation the team chose, ROS 2 or HORUS. That flips on a small research team, where you may write most of the stack yourself. The rest of this post is for someone deciding whether to aim at this job, who has read the adverts and cannot picture the actual week.

The job adverts do not help. One asks for C++, ROS 2, control theory, computer vision, Linux and a master's degree; the next asks for Python, PyTorch and a passion for robots. You cannot tell from either whether the work is mathematics, plumbing, or something else entirely.

So you build a picture out of the only material available, which is conference talks and demo videos. In those, someone explains a planner with beautiful diagrams, or a humanoid folds laundry to music. You assume the day is spent producing that, decide you are not clever enough, and put the idea down for another year.

Then someone who actually does the job says something confusing. They spent last week on a logging format. They spent three days on a cable. They lost a fortnight to a fault that turned out to be a connector that only misbehaved once the robot warmed up. It sounds like modesty, or like complaining, and you cannot tell which. Either the job is far more glamorous than they let on, or the adverts describe a person who does not exist.

What you want is an honest account of a week, so you can work out whether you would enjoy it.

What does a robotics software engineer actually do all day?

Most of the day goes into making separately working parts behave as one machine, and only a slice of it goes into writing anything new. A typical morning opens with logs from a run that failed overnight: the robot stopped in the corridor, and the question is whether the camera, the map, the planner, the motor driver or Friday's change is responsible. Answering that means replaying recorded data and narrowing the list until one part is guilty. Then comes the fix, which is often small, sometimes a single line, followed by the slow part, which is proving the fix in simulation, then on the machine, then again because the fault only shows up on a shiny floor. Around that sit the ordinary tasks of any software job: reviewing a colleague's change, updating a configuration, writing a small tool that turns a log into a chart, and waiting in a queue for the one robot everybody needs this afternoon. It is real engineering. It is simply not the part that appears in the demo video.

What counts as robotics software, and what does not?

Robotics software is everything between a sensor reading and a motor command, plus the machinery that keeps that path honest. It has four rough layers. Drivers talk to cameras, encoders and motor controllers, and mostly deal in units, timing and the sensor's own peculiarities. Perception turns raw readings into statements about the world, such as where the robot is or where the table edge sits. Decision code chooses what to do next, and control code turns that choice into commands the motors can obey without the machine lurching. Wrapped around all four is the part nobody advertises: logging, replay tools, simulation setups, calibration routines, deployment scripts and the dashboards that let a human see what the robot believed. What is usually not your job is designing the circuit boards, choosing the gearbox, drawing the chassis or training a large model from scratch, though on a small team you may touch all of those in a bad month. Knowing which layer a role sits in matters more than the job title, because two people with the same title can have completely different weeks.

What kind of robot codebase will you spend your days inside?

Your day is shaped less by the job title than by the codebase you inherit on your first morning. Some teams live inside ROS 2, where the work means nodes, launch files and packages other people wrote. Some live in a vendor's SDK, where the machine already does its documented job and you script it. Some maintain an in-house C++ stack written before you arrived. Some work mostly in simulation and model training, with a thin layer touching real hardware. Some write firmware, where the entire world is one chip. And some build on a smaller foundation such as HORUS, an open-source real-time middleware for Rust, Python and C++ in which all three languages share the same shared-memory ring buffers, so a Python process and a C++ process on one machine pass messages to each other without serialising them. Read the table below as a description of days rather than a ranking, and notice that the differences are about what you touch, not about who is more of a real engineer.

OptionWho it is forWhat it assumes you knowWhen to pick itWhen not to
A ROS 2 codebaseEngineers who want the widest choice of employersLinux, workspaces, launch files, package layoutThe team's value sits in navigation, mapping or manipulation packagesYou want the whole system in your head by the end of week one
A vendor SDK codebaseEngineers joining a company that bought its robotsThe vendor's API and where the API stopsThe machine already does most of the jobYou want to change how the machine moves underneath
An in-house C++ stackEngineers who want to own the whole pathThreads, memory, build systems, reading code with no documentationThe company's product is the stack itselfYou need a large community to answer your questions
HORUSEngineers on mixed-language teams shipping on one computerYour message shapes and how your loops are scheduledPython, C++ and Rust parts must share data on one boxThe team's real work lives in ROS 2 packages
A simulation and learning codebasePeople arriving from machine learningPython, data pipelines, training loopsThe hard part is the model rather than the machineSuccess is judged on what the robot does on a real floor
Firmware on a microcontrollerEngineers who want nothing between them and the motorRegisters, timers, interrupts, flashingThe product is a small device with motors and a batteryYou want cameras, maps and recorded logs
A fleet and tooling codebaseEngineers arriving from web or backend workServices, deployment, databases, dashboardsMany robots exist and somebody must watch themYou want to be near the machine every day

What does the job feel like if you come from web or backend work?

It feels like losing your fastest feedback loop and gaining a much stranger set of bugs. In web work you change a line, reload, and know within seconds whether you were right. On a robot, the same change may require a build, a deployment to the machine, a walk to the lab, a battery that is charged, and a colleague who is not currently using the robot. The loop that took seconds now takes an hour, so the habits that made you productive, such as trying three variants quickly, stop paying. What replaces them is thinking longer before running, and building tooling so that recorded data can answer questions without the robot. The bug categories change too. You will meet faults that depend on temperature, on the order two things started in, on a floor surface, or on a cable being bent a particular way. None of those exist in a web service, and none respond to the debugging instincts you built there. The compensation is that when it works, a physical thing moves, and that never stops being satisfying.

What changes if the robot is a small board rather than a full computer?

Everything gets smaller, slower to change, and much less forgiving. On a machine with a full operating system you have logs, a package manager, a debugger and the ability to ask what happened after the fact. On a microcontroller you may have a single serial line and a blinking light, so the skill becomes designing your program so that the light and the line tell you enough. Memory stops being infinite in practice, and the question of whether something is allocated while the motor loop is running becomes a real question rather than a theoretical one. Deploying means flashing, so the cycle is longer again. On the other hand, the whole system fits in one head, which is a genuine relief after a large stack where nobody understands all of it. Many engineers find they prefer one world strongly over the other, and it is worth discovering which you are early, because the two career paths diverge quickly and the day-to-day satisfaction is very different.

How long does it take before you are useful on a robot team?

Expect to be genuinely useful in a few months and genuinely confident somewhere in the second year, even if you were a strong programmer before. The first weeks go into learning the machine rather than the language: what each sensor reports, what the coordinate frames mean, which parts of the codebase people trust, and who to ask when the robot behaves strangely. Then comes a stretch where you can fix things that are already understood, which is real contribution and feels like it. The step that takes longer is being the person who can look at a failure nobody has seen before and form a sensible first guess. That guess comes from having watched many failures, and there is no shortcut through it. What speeds it up is time near hardware, reading logs from other people's failures, and the discipline of writing down what you thought was wrong before you find out. If you want the pre-job version of this timeline, what to learn and in what order is the map most people wish they had.

What do you need to know before your first day?

You need to be a competent programmer in one language, comfortable on Linux, and unbothered by things that fail for boring reasons. Everything else is learnable on the job, and most teams expect to teach it. Being competent in one language means you can structure a program, read someone else's code without panic, and use version control without ceremony. Linux comfort means the terminal is not an obstacle, because almost all robot software runs there and almost all instructions assume it. The third item is temperament rather than knowledge: a great deal of the work is eliminating boring explanations before reaching the interesting one, and people who find that tedious are unhappy quickly. What you do not need on day one is control theory, deep mathematics, a robotics degree, or fluency in every framework in the advert. Adverts list wishes. What gets people hired is evidence that they have made a machine do something and can explain why it went wrong, which is also what employers look for in a portfolio.

What does a bad week on a robot team look like?

A bad week is one where the robot fails in a way you cannot reproduce, and each attempt costs an hour. The classic version: the machine works all morning, then drifts, and by the afternoon it is stopping short of the shelf. You check the code, which is unchanged. You check the map, which looks correct. You replay yesterday's log through today's code and the fault does not appear, which is worse than if it had. Somewhere in there you discover that the fault only happens after the robot has been running long enough to warm up, or only when a particular colleague starts a second program on the same computer, or only when the sun is on the corridor floor. Weeks like this are not failures of your ability; they are the actual shape of the work, and every experienced engineer has a collection of them. The professional skill is not avoiding these weeks. It is narrowing them quickly, keeping a written trail, and refusing to change two things at once no matter how tempting it becomes.

What changes as the robot gets more demanding?

The work shifts from making things happen to making them happen on time, and that is a different kind of engineering. Early on, the questions are whether the arm reaches the cup and whether the map is correct. Later, with more sensors, a heavier model on board and a machine that must move near people, the questions become whether the reading arrived before the decision needed it and whether the same thing happens every cycle. Failures change character too. Instead of the code being wrong, the code is right but occasionally late, and a correction that comes late is not a smaller correction, it is the wrong one. That is when teams start caring about how messages move between processes, whether data is being copied more than it needs to be, and what happens when the machine is busy. It is also the point where projects reconsider their foundations, which is why projects outgrow their first framework so consistently that the pattern is almost a rite of passage.

What do you give up by taking a robotics software job?

You give up speed, and for many people that is the real cost. Compared with web or backend work, features arrive in weeks rather than days, because a change is not finished until it has survived hardware. You give up some tooling comfort as well: the debugging and observability tools around robot code are thinner than the ones around web services, and you will build small ones yourself. You may give up salary, since robotics companies frequently pay less than large software firms for comparable skill, and you will give up some choice of employer, because robotics jobs cluster in particular cities. Finally, you give up the clean satisfaction of a system where everything is deterministic. Robots are physical, so your correct program will still be defeated by dust on a lens, a floor that reflects, or a gripper that grips slightly differently when cold. In exchange, you get work where the result exists in the room with you, which is why most people who move into robotics stay.

When is ROS 2 the better choice?

ROS 2 is the better choice for almost anyone entering the field, and pretending otherwise would be dishonest career advice. It is what most employers use, so learning it is directly employable, and the vocabulary of nodes, topics and transforms is the shared language of the industry. It is also the right technical answer for a huge class of robots: anything that must map a building and navigate it, anything doing collision-aware arm planning, anything with a sensor whose only usable driver is a ROS 2 package, and anything spanning several machines or a fleet. Those packages represent years of work you cannot recreate. HORUS is not the answer for those projects, and choosing it there means rebuilding plumbing that already exists in order to lose the packages that were the point. The honest place for smaller foundations is later and narrower: a specific machine, a mixed-language team, one computer, and a bottleneck someone has actually measured rather than assumed. Learn the common thing first, then earn the right to disagree with it.

Is the job mostly control theory and path planning?

No, and here is why: those are specialist seats, and most robotics software work sits around them rather than in them. On a working team, a small number of people own the controller and the planner, and they usually own them for years. Everyone else is building the system those components live in: drivers, message plumbing, calibration tools, state machines, safety interlocks, test rigs, deployment, logging and the many small pieces of glue that turn a set of clever components into a machine that works on a Tuesday. This is why so many strong programmers assume they are unqualified and never apply. They read a job advert that mentions kinematics, imagine a week of derivations, and never learn that the actual week involves reading logs and reasoning about which part lied. If your instinct is that the mathematics sounds intimidating, that is normal and mostly irrelevant, and what actually makes robotics hard is worth reading before you disqualify yourself.

Is robotics software just normal software engineering with hardware attached?

Partly, but not the way you think. The craft is the same: you still write functions, review code, use version control and argue about naming. What differs is not the code but the truth model. In most software, the program is the system, and when the program is correct the system is correct. On a robot, the program is a guess about a physical world that is reporting to you through imperfect sensors, and correctness is not enough on its own. The second difference is that time is part of correctness, so an answer that is right but arrives after the moment it was needed has failed. The third is that you cannot fully test what you ship, because the real world produces conditions your tests did not contain. What follows from this is a different working style: more logging, more replay, more suspicion, more willingness to believe the fault is in the physical layer rather than in your logic. Engineers who transfer well are the ones who accept that the world outranks the code.

How do you decide whether this job is right for you?

Spend one weekend making a physical thing move, and pay attention to how you feel when it fails. That single exercise predicts your happiness in this career better than any amount of reading, because the failing is the job. Buy the cheapest board with a motor and a sensor, get it doing something small, then deliberately break it and find out why. If the hunt is interesting, this work will suit you. If the hunt feels like an obstacle in the way of the interesting part, you may be happier in a role where the interesting part is the whole day. Two follow-up questions sharpen it further. Do you enjoy owning something end to end more than shipping visible features quickly? And are you comfortable being wrong in front of a machine that will not argue but will not cooperate either? If you do not have hardware yet, you can answer most of this in simulation, and the free resources worth using to learn robotics software will get you there without spending anything.

Decide by situation rather than by job title:

When the foundation question eventually reaches your desk, weigh it on the five axes of the HORUS Fit Framework — ecosystem size, setup effort, team size fit, deployment target, and licence — and take the option that loses on the fewest, with no scores or numbers involved. And if your future looks like one machine with a Python layer, a C++ layer and a boundary between them that keeps eating afternoons, star HORUS on GitHub so it is in your list when you start building.

Found this useful? Share it:Discuss on HNShare on X