You build machines.
I build the software that ships with them.

Integrators and machine builders can win the machine contract and still be short on software people. I cover everything between “the machine arrived” and “your customer’s people run it every day”. The operator interface is the visible part. Below it are three layers, listed in the order they usually cause trouble.

Not ready for a call? Send the device manual or your client’s spec. Within a day you get a straight answer: whether it’s doable, what concerns me, and roughly what it takes. Send it

Where I am right now: I work 10:00–20:00 UTC: afternoons in Europe and the whole US morning. You get a reply within 12 hours.

NowOperator HMI for an industrial robot, for a North American systems integrator (in progress)

Schematic: a machine and its controller connect to an operator HMI over Modbus, OPC UA or MQTT; the HMI sends counts and batches up to the customer’s ERP and receives work orders. A dashed frame marks the proof layer around all of it. The safety relay sits outside the software.
proof layer: simulated first, checked in CI Machine M Controller Modbus / OPC UA / MQTT Operator HMI work orders counts, batches Customer ERP machine layer the seam safety relay (not mine) proof layer: simulated first, checked in CI Machine Controller Modbus / OPC UA / MQTT Operator HMI work orders counts, batches Customer ERP safety relay (not mine)

What I do, and what people call me about#

Software for machines, and for the people who build them

You ship 20 machines a year and maintain 20 interfaces. Each model has its own screens, its own quirks, its own commissioning days on site, and every support call starts with “which version is it?” I build one operator interface that configures per model, with PLC, Modbus, OPC UA or MQTT underneath, plus the device integration and a remote support path (how access is controlled). Commissioning gets shorter and your team stops maintaining variants.

I also know ERP. I spent two years rebuilding one (BOM, work orders, batches, traceability) before I worked on machine software. The trade calls this layer shop floor to top floor; in ISA-95 terms it’s Level 2 to Level 4. I do that work, but I don’t sell an MES. My ERP experience is an in-house ERP/WMS rebuild and a machine maker’s BOM, work-order and batch systems, not every product on the market; if your customer runs a specific one such as SAP, ask, and I’ll tell you exactly where my experience ends. So when your customer asks whether the machine’s data can go into their system, you don’t need a second vendor to answer: I look at which system it is and tell you plainly what it takes.

A client actually asked me: “Our field engineer adjusted the tool parameters and renamed the points himself, so what exactly did your work buy us?” My answer  ·  If you’re an integrator or an OEM, there’s a page written for you

  1. The machine layer

    “It runs, but the operator can’t run it.” One operator interface configured per model, instead of a screen set per machine. Devices that were never meant to be read, read anyway: Modbus, OPC UA, MQTT, serial, vendor SDKs. Alarm and interlock paths that report failures clearly instead of failing silently.

    Live now: an operator HMI for an industrial robot, for a North American integrator. And a public repo where every attempt to make a machine do something dangerous is refused, with all checks running in about a second.

  2. The seam

    “The shop-floor count doesn’t match the ERP count.” Work orders going down, WIP and batches coming back up, traceability, reconciliation. ERP people don’t touch machines, and machine people don’t know what a work order means to the business. Usually nobody owns this layer. I’ve worked on both sides of it.

    93% of manufacturers have MES in place, but only 23% report full integration across ERP, PLM, quality and OT systems. That gap is this layer. (Rockwell Automation report, July 2026, 1,560 decision-makers in 17 countries.)

  3. The proof layer

    “You’re not on site, so how do I know it works?” I build against a simulated device first, so the software is finished and tested before the real machine is ready. Mock-mode demos show the whole path working before I have any of your credentials. Improvements are locked in with CI checks so they can’t quietly regress, and every milestone comes with written verification and screenshots.

    The first half of this has an industry name: virtual commissioning. Industrial companies quoted by Rockwell Automation put the cost of fixing a machine issue during commissioning at up to 100× the cost in design, so I quote this up-front work as a separate line item. Examples: the ClickHouse case below is measured by the database’s own query_log and protected by a CI check, and everything in the demo library runs without credentials.

If your problem isn’t one of these, describe it in your own words. That includes “AI wrote the code for this machine and now nobody dares touch it”, which I hear often and do take on. I’ll tell you honestly whether it’s mine to solve, and if it isn’t, I’ll say so rather than take the job. If the question is whether it can be done at all, there’s a three-day sprint for that

Tools I use: PLC · Modbus · OPC UA · MQTT / Sparkplug B · operator HMI stacks · ClickHouse · MySQL binlog · event-driven services.

One-page PDF if you’re passing me on to someone.

Work you can check#

Each project below comes with something you can check yourself: a running demo, measured numbers, or handover docs. The first is the company where I spent nearly two years.

Nearly two years inside a robot manufacturer

Sole developer for every internal system at Standard Robots, a Shenzhen AMR maker: BOM and supply chain, CRM, deployment, and a binlog recovery that got back 100% of deleted data. Not their fleet software. Signed CTO letter available on request.

100% of wiped production data recovered, by reverse-engineering MySQL binlogs

Making a dashboard query scan 230× less data

≈230×less data scanned: 1.9 GiB → 8 MiB, same query, measured by query_log

Same 50M-row table, naive vs tuned ClickHouse schema, measured with the DB’s own query_log: 1.9 GiB → ~8 MiB scanned. One-command reproduce, CI-guarded, with a 3-min walkthrough.

A machine that refuses to do dangerous things

$ python3 break_it.py
  [1/11] Position outside physical travel           PASS
  [2/11] Position sensor unplugged mid-move         PASS
  [4/11] Person steps into the working envelope     PASS
  [6/11] Undocumented command injected              PASS
  [9/11] Recovery: can it come back after E-stop    PASS
  …
All 11 checks held.

9 / 9dangerous attempts refused, plus 2 recovery checks

A machine commanded over MQTT, with a gate layer that classifies every command by the harm it could cause. The test harness runs 11 checks in about a second: nine attempts to make it misbehave, all refused, and two that confirm it can still stop and recover. Those two matter, because a test suite that only checks refusals would pass even if the machine did nothing at all.

Besides these case studies, there’s a shelf of public demos that run without credentials, each with a note on what it does and doesn’t prove. Browse the demo library

What people worry about when hiring one person#

Whether I’m good enough, you can check for yourself. The usual worries are different: I can’t reach him during my hours, my finance team can’t pay him, and if he disappears, I’m stuck. Here are my answers to those three, and to the questions that follow from them.

Demo before commitment
You see working software before you spend a dollar on implementation. Mock modes let me prove the mechanics without touching your credentials. And where automation truly needs a login, it still doesn’t need your password: a session you sit next to, or a throwaway credential you can revoke.
Async & transparent
I work asynchronously and send short Loom recordings that show exactly what has been built. Bugs and risks are raised early. Documentation is written with each milestone, because docs left until the end often don’t exist when someone has to step away.
I hold it when it breaks
In an emergency, I recovered 100% of lost production data by reverse-engineering MySQL binlogs. When something breaks, I stay with it until it’s fixed.
I tell you where my layer ends
The software I deliver doesn’t implement your safety interlocks. E-stop, guard doors and light curtains belong in a safety relay or a rated safety controller, which keeps working even if my code is wrong. I build the layer above it, gate it carefully, and put that boundary in the contract. Be wary of anyone who offers to put your E-stop in the application layer.
You own it, fully
Source can go into your repository from day one instead of being handed over at the end. If you stop at any point, you hold something complete and runnable, so you never risk more than one milestone. Handover docs cover how to run it, how to move it to your own accounts, and every credential to replace. Nothing ties you to me.
Your data stays in the US
I’m based in Shenzhen, so security teams reasonably ask about this. Your project runs on my servers in the US, and your data stays there: device logs, recipes, exports and backups are not copied outside the US. I keep no standing access to your network or your customer’s. When a remote session is needed, you start it, it has a time limit, and you can watch it. I use throwaway accounts you can revoke, never your passwords. Every change arrives as a commit in your repository for you to review, and the software I deliver doesn’t send data anywhere you haven’t approved. If your policy restricts which AI tools may see your code, tell me at the start and I’ll work within it. If your policy requires the data to stay in the EU, say so in your first message and I’ll tell you straight away whether I can meet it.

And what I don’t do

  • No functional-safety certification or SIL/PL sign-off: I implement and verify safety logic; your certified engineer certifies it.
  • No on-site installation or mechanical commissioning: my job is making that week on site as short as possible.
  • No mechanical design, electrical drawings or panel building.
  • No project management. If the job is chasing vendors and running status meetings, I’m the wrong hire. I deliver code and verification.
  • Nothing I can’t verify: if I can’t picture how to prove a requirement was met, I say so before quoting, not after building.

How a first job usually goes#

  1. You send me the messy version. The client’s email, the device manual, a photo of the panel. I don’t need a specification; if you had one you probably wouldn’t need me.
  2. Within a day you get a straight answer: whether it’s doable, what concerns me, and roughly what it takes. If it’s still genuinely uncertain, that’s what the three-day sprint is for. If you already know the scope, I’ll give you a fixed-price quote for free.
  3. Fixed scope, milestones, something running early. You see working software at the first milestone. Every delivery comes with documentation and a handover, because you’re the one who supports it afterwards.
  4. The code is yours. Full source, no lock-in, no dependency on me. I keep the rights to framework pieces I wrote before your project, and you get a perpetual licence to use them. I’ll put that in writing.

Why you can trust me with it#

Bohea Still
Bohea Still (Shang Baohua), Shenzhen
Hours
10:00–20:00 UTC
Covers
European afternoons and all of the US morning
Reply
Under 12 hours, always. Usually under 4.
First demo
Under 24 hours from the scoping call
Now
Operator HMI for an industrial robot, for a North American systems integrator (in progress)
Phone
US number (+1 971), shared on request
On contracts
Shang Baohua: invoices, W-8BEN, entity on request

I work nights by choice. It’s when I concentrate best, and it lines up with your working day. I prefer writing because it’s precise, searchable and works across time zones. We get on a call when a decision is stuck.

The CTO of Standard Robots wrote and signed an assessment of my work there. It’s available on request and I can show it any time: tell me who you are and what you’re evaluating, and you’ll have the signed PDF within 24 hours. If you’d rather talk to him directly, I can set up a call. I check with him first, which usually takes less than a week.

How I got here, in order

  1. 2015–19

    B.Eng · Xi’an University of Science and Technology

  2. 2019–21

    Learned to hear what a business really needs

    HKC Corporation, display-panel manufacturer · HQ IT, building the company’s internal ERP and WMS.

    I rebuilt a fragile monolithic ERP/WMS as event-driven microservices and worked alongside the business teams from spec to launch. Downtime failures fell by about 90% and throughput went from 50 to 5,000+ QPS. Talking every day with the people who used the system taught me to build what the business needs, which is often not what the ticket says.

    50 → 5,000+QPS after rebuilding a panel maker’s ERP/WMS, downtime down ~90%

  3. 2021–23

    Learned to engineer a mediocre model into reliable value

    Shenzhen Turing Robot · document understanding for banking and securities clients, started before ChatGPT existed. One of the engineers on the team.

    The job was extracting tables from PDFs: borderless tables, cells that span several lines, several cells squeezed into one. Open-source tools got about 55% right. We combined two engines and matched each cell to the coordinates of its characters by text similarity, which reached 99.5%. Adding a document-conversion path brought multi-format fidelity to 99.99%. That isn’t comparable to today’s LLMs, but the lesson still applies: careful engineering plus domain knowledge beats a raw model. (I’m still on good terms with the founders.)

  4. 2023–24

    Learned to hold a schedule when the work is big and messy

    Shenzhen Coming Financial · a paid consumer platform for investor and roadshow events. One of 8 backend engineers.

    I led production database migrations across seven microservices and owned the high-concurrency paid flows. This is where I learned to deliver large, non-standard work in phases, one milestone at a time, without dropping anything.

  5. 2024–26

    Learned how a machine company actually works, from the inside

    Standard Robots, Shenzhen, an industrial AMR maker · sole developer for every internal system the company ran.

    I built and held everything the company ran on except the robot: BOM and supply chain, CRM, expenses, file storage, deployment. Along the way I saw how a configuration becomes a bill of materials, how one model variant multiplies into part numbers, and where after-sales calls really come from. I also recovered 100% of deleted production data by reverse-engineering MySQL binlogs, with operations still running. Backed by a signed letter from the CTO, available on request.

  6. 2026

    Went full-time independent

    Full-time on my own since 2026. This is my work now, not a side project.

  7. 2026

    Launched boheastill.com

    This site is my permanent base. Projects and client relationships run from here, not from any single platform.

Working together#

What working with me looks like: terms, paperwork, and how to start.

The terms

  • I sign your NDA directly and honor it.
  • Every delivery ships with written, screenshot-backed verification.
  • You receive full source, documentation and a handover. You own the result outright, with no dependency on me or any platform.
  • Backed by 30 days of post-delivery support.
  • Liability is capped at the fees you’ve paid, and indirect or consequential loss is excluded, the same clause your other vendors use. I’d rather you read it here than find it in the contract.

How I quote

Fixed scope, tiered quotes, milestone payments. The price I quote is the price. If your budget is tight, say so in your first message: I’ll tell you straight away whether it fits, instead of letting you find out three calls later.

  • Implementation: fixed price. You’re paying for an outcome, not hours. If I’m faster than planned, I keep the difference; if I’m slower, that’s on me.
  • On-site days: the only item billed by the day, since time on site can’t be compressed. Most projects need none; that’s what the simulator is for. When one is needed, it’s for software commissioning, not installation.
  • Rush: +30–50%. A tighter deadline has a real cost, so I price it openly.

For reference, my current engagement: a first project, delivered, then a second, five-figure project with the same client, now in progress.

Every milestone leaves you three documents

Together they give your accountant everything needed to reconcile the payment without chasing anyone.

  1. A signed agreement

    Scope, milestones and deliverables in writing, signed by both sides before any work starts.

  2. My invoice (PDF)

    One PDF invoice per milestone with your company name, the amount and the project, ready to file.

  3. The channel’s official payment record

    Pay the way your finance team prefers. If you’d rather use Upwork, we contract there and Upwork’s records apply; if we met on Upwork, we stay on Upwork, since that’s their rule and I follow it. Paying directly works too: through Payoneer, by corporate card or bank transfer, and you receive Payoneer’s official payment record.

US clients: I provide a W-8BEN for your tax reporting. You deal with one person, and the paperwork works like any proper vendor’s.

If your procurement or compliance team needs to contract with a company rather than an individual, tell me and I’ll arrange it before we sign.

First time buying software this way? Most clients book it under project implementation or fold it into commissioning; ongoing work goes in the maintenance line. Happy to write the invoice so it lands where it needs to.

Passing me along to someone?

Say this: “I know someone who does the software that ships with machines, from operator screens to machine data landing in the customer’s ERP. He works remotely, and the code goes into your own repo.” Then send them boheastill.com, or forward the one-page PDF as it is. It has a line describing what I do, three things they can verify, and how to reach me.

Not sure it’s even possible?

If the question is “can this be done at all”, you can find out without committing to a project. A three-day Feasibility Sprint gives you a written answer either way, with a running demo if it’s feasible. It costs the same whichever way the answer goes, and if I can’t reach a conclusion you pay nothing. If you already know what you want built, skip it and ask me for a quote; quotes are free.

Recent notes#

  • You can’t see a refactor. So try to break the machine.

    You paid for a refactor and nothing looks different: same paths, same screens. My answer is not to review the code, but to take a break-it checklist to the machine. If you can’t make it fail unsafely, you’ve seen what you paid for.

  • One email per milestone

    You want “an HMI”, and that’s the whole spec. I split the work into milestones so it can’t spiral, and run each one with a single email. From your side, one big risk becomes a series of small stages you can watch being completed.

  • Why I lead with a runnable demo

    A quote is cheap and a claim is easy. Giving you something that runs on mock data, before you hand over any credential, moves the risk from you to me.

All notes

Get in touch#

Book 20 minutes

Pick a slot. You don’t need to write an email first. By the end of the call you’ll have three things: your problem described back to you so you know I understood it, my view on which layer it’s stuck in, and a rough price range. No slides, no discovery phase, no follow-up sequence. If it’s not a fit, I’ll tell you on the call.

The calendar shows times in your timezone automatically, and the invite arrives with a Google Meet link. Slots cover European afternoons and the US morning.

Book 20 minutes

Start here

Tell me what your platform can’t do and what that’s costing you. I’ll reply with an honest view on whether it’s solvable, and if it is, usually with a demo.

hi@boheastill.com

Don’t want to write an email? Leave your problem and a way to reach you (email is best). You’ll get a reply within 12 hours.

This goes straight to my inbox through Web3Forms. Nothing is stored on this site, and I read every message myself.