Bridging software and the physical world.
I’m Radosław Gajewski, a Software Engineer in R&D at BSH in Rzeszów. I design the test architecture, hardware-in-the-loop benches, and internal developer tools that power fully automatic coffee machines across 15 platforms.
Testing embedded software isn’t just about checking what shows up on a display. The code we write controls real water valves, boilers, pumps, and grinders. Having started my career with a Master’s in Materials Science at AGH in Kraków, I naturally look at software through the lens of the physical system it controls—how it behaves under load, where the hardware bottlenecks are, and how to measure real-world results.
When I joined BSH in late 2019, I was the very first software engineer at the Rzeszów site. Since then, I’ve grown alongside the division—from sketching our first automation processes with a pencil on paper and setting up our initial repositories, to guiding a team of 4 engineers and owning the global test architecture for our product lines.
What I build
Lightweight, Containerized Test Benches
We run continuous integration 24/7 on real, physical coffee machines across 3 test benches and 9 stands. I designed a decoupled Docker architecture where isolated containers run the tests, a dedicated broker container handles communication with the PLCs and measurement devices, and a web-app container provides both manual and automated control over the environment. It’s so lightweight and scalable that an entire bench node can run off an old laptop (and could practically run on a Raspberry Pi if it weren't for the measurement hardware drivers).
See the bench architecture →A Unified Test SDK & Autonomous Recovery
Writing an automated test shouldn't require reinventing how to talk to the hardware. I architected a single, unified Python SDK that abstracts away asynchronous DBus communication, fixture setup, and process monitoring. More importantly, it features an autonomous recovery system: if a physical machine fails mid-test, the framework tracks the exact screen-by-screen failure path, resets the hardware and water/power states back to initial conditions, and keeps the test suite running without human intervention.
See the test SDK →Synthetic Data, Computer Vision & AI Tooling
Older appliances can't report their telemetry over software, so I trained custom PyTorch models to read their physical displays in real time. Because real-world training data is scarce, I built a large-scale synthetic image and video generator from scratch and wrote the custom PyTorch training loops myself. Beyond computer vision, when corporate red tape delayed our access to AI coding tools, I spent a month building our own Cursor-like IDE prototype and a RAG-based assistant (using a fine-tuned Mistral model) over our proprietary docs and codebase.
See the vision & AI work →