System architecture
We decide how the pieces fit together before anyone writes code — what runs where, what happens when something fails, and how the parts talk to each other. These are the decisions that get expensive to revisit once a line is running.
Migrating C++ to Rust
C++ is everywhere in industrial software, and an enormous amount of valuable working code is written in it. But it was designed for equipment that was never going to be on a network, and its sharp edges — manual memory management, undefined behavior, data races — are no longer the price of performance: Rust is in the same performance class and rules that whole category out at compile time, with modern tooling and dependency management around it. So rather than paying for that maintenance year after year, we migrate — incrementally, not as a rewrite. Rust and C++ run side by side in the same product, so the highest-risk parts move first and the rest keeps working, and you get the memory-safety benefit where it counts without pausing delivery. We are fluent in C++ and will happily maintain what you already have in the meantime.
Application development
Requirements through commissioning, with the discipline the rest of software engineering takes for granted: version control, code review, automated testing. One definition of the data, typed end to end — the same types checked by the compiler in Rust on the machine and in TypeScript in the browser, so an operator screen cannot quietly disagree with the controller it is driving. Mismatches surface at build time rather than during commissioning, which is where they get expensive. Python sits alongside both for test rigs, tooling and data work.
Firmware and real-time
High-level logic belongs on a PC, where it can be tested automatically, changed quickly and updated in the field. Timing-critical and safety-critical logic belongs on a microcontroller or PLC, where behavior is predictable. We draw that line deliberately and build both sides of it.
Operator interfaces
Web-based HMIs by default. The same interface runs on the panel at the machine, on a tablet out on the floor, and on a laptop off site — so a supervisor can monitor, and where it is appropriate control, without walking the line. Standard web protocols and frameworks — SvelteKit, in our case — keep both the first build and the next decade of changes cheaper than the proprietary, per-seat toolkits much of the industry still runs on, many of which were designed in the 1990s. Qt stays in the toolbox for devices that cannot run a browser, and for safety-related functions that have to live on the panel itself rather than at the far end of a network.
Machine and robot integration
Whether it is a PLC on the other side of OPC UA, Modbus or MQTT, or a robot behind a REST API and a websocket, we pull the logic up out of the device. What stays behind is only what genuinely has to live there — which means far fewer of the fiddly, error-prone updates that this equipment handles worst.
Linux as the platform
We build on Linux, real-time or not. A mainline kernel with PREEMPT_RT gives deterministic timing on the same machine that runs everything else, so hard real-time no longer requires a separate proprietary runtime. Everywhere else, ordinary Linux means a long security-update life, hardware you can buy from anyone, and tooling that every engineer you hire already knows.
Remote and over-the-air updates
A software fix for equipment in the field should not need a van and a laptop. We build update paths that are staged, verified and reversible — an image either applies completely or rolls back, so a bad update never strands a machine on a customer site. Driven from wherever suits you: a cloud service, your own servers, or an engineer with a USB stick.
AI where it earns its place
The clearest win today is in how the software gets built. AI tooling shortens the loop between a change and a tested, reviewed result, and that is time you are otherwise paying for. Beyond development, a plant floor produces a great deal of data nobody currently reads — cycle-time optimization, quality inspection and anomaly detection are real openings, and we would rather scope one against your data than promise you a number up front.