Skip to content

Our Solution Areas

Software & Application Development

Custom software development, mobile and web applications, system integration.

Industrial software lives under conditions an office application never sees: the network drops, shifts hand over, operators touch the screen wearing gloves, and no record may ever be deleted after the fact. We write production tracking applications, operator terminals, field mobile apps and ERP/MES integrations by taking those constraints as the starting point rather than as edge cases.

Where it pays off

A plant can have a working control layer and still write its output figure into a spreadsheet by hand at the end of the shift. That is usually where software work starts: making data that already exists on the floor usable, or beginning to record something that was never captured at all.

The applications asked for most often:

  • Production tracking and reporting. Records by work order, batch, shift and downtime reason; downtime analysis and the OEE components (availability, performance, quality) read from one place.
  • Operator terminal. Selecting a work order on the touch panel at the line, confirming a recipe, entering a downtime reason, logging a quality measurement.
  • Field mobile app. Maintenance rounds, periodic checklists, fault reports and stock counts — on a phone, often outside network coverage.
  • Test and measurement software. Desktop applications that collect data from instruments, evaluate it against an acceptance criterion and leave behind a record tied to a serial number.
  • Data capture points. Barcode and RFID readers recording where a product passed; handhelds for warehouse and shipping movements.

What makes industrial software different

Compared with an enterprise application doing nominally the same job, the difference is not in the feature list — it is in the assumptions:

  • “There is internet” does not hold. Wireless coverage on a production floor is patchy: behind machines, down warehouse aisles and inside cold rooms are blind spots in most plants. The app has to work offline, keep data locally and sync when the link returns.
  • The interface is used with gloves on. Large touch targets, few steps, as little keyboard entry as possible. The most frequent action should come down to a single tap.
  • Shift handover is an event. Software has to tie “who is working” to the shift; a session left open and a half-finished entry contaminate the next shift’s data.
  • Clock synchronisation matters as much as the data. If terminal, PLC and server disagree on the time, downtime durations come out meaningless. Every component takes its time from a common source (NTP).
  • Response time must not hold up production. A screen the operator waits on is a line waiting. The entry completes locally at once and the upload runs in the background.

How we work

We start with the data model: which events get recorded and which key (work order, serial number, batch) ties them together. Drawing screens before that is settled ends with a report that, three months later, cannot answer the question actually being asked.

Then we test the interface on the floor. A screen that looks fine in the office can be unreadable under the lighting at the line, or simply not match how the operator stands. We run a terminal with its real users, in real noise, before accepting it.

Integration is done against a contract: an OpenAPI or proto file, sample requests and responses, and the error cases written down. That is how you can see what broke when the other system changes.

Deployment can be on-premise or hosted; the deciding factors are whether the data may leave the site and what happens when the internet is cut. For on-premise we package with Docker, so upgrading and rolling back come down to a single command.

What we watch for

Records cannot be deleted. The audit trail is part of the data model, not a feature bolted on later.

Permissions are actually enforced. Hiding a menu item is not authorisation; the check always happens on the server.

Backups are verified by restoring them. A backup that has never been restored does not count as a backup.

The application makes its own failures visible. A sync that silently returns nothing is the most expensive class of bug; failed transfers should sit in a queue and be counted on an administrator screen.

How this connects to the other areas

A software layer is only as good as the source beneath it. Data from a line whose tag dictionary was never set up properly will count wrongly no matter how good the interface looks — which is why we usually plan applications together with industrial automation and data acquisition and analytics. The network side of terminals and field devices is handled under industrial communication systems.

Frequently asked questions

Does production stop when the network goes down?

Not if the application is built for it. We write terminal and mobile apps around a local queue: the record lands in the device's own store first and syncs to the server once the connection returns. The price of that is conflict handling — when two devices post against the same work order, which one wins has to be a written rule. We settle that rule at the start of the project; otherwise offline capability quietly turns into data loss.

Can you connect to our existing ERP?

If it exposes an interface, yes; if not, we build an integration layer in between. What matters is the direction and frequency: stock and work orders are usually read from the ERP, while actual production is written back to it. We do not recommend writing straight into the ERP database — that bypasses its own validation logic and breaks at the first version upgrade. Transfers also have to be idempotent, because an interrupted transfer that runs again must not post the same quantity twice.

An operator entered a wrong record. Can we delete it?

We do not delete records, we add a correcting one. Production data serves as evidence for both quality and traceability, and a record that can be erased retroactively loses that status. In practice the wrong entry moves to a "cancelled" or "corrected" state, and who changed what and when stays in the audit trail. The operator only sees the current value on screen; the history opens in the administrator view.

Does everyone share one account on the terminal?

No, and we rule it out from the start. On a terminal running under a single shared account the audit trail is meaningless, because nobody can tell where a mistake came from. Instead we set up a sign-in that takes seconds — a short PIN or a badge scan. Open sessions close at shift handover, and a session that sees no activity expires on its own.

Smart solutions, secure tomorrows

Let us carry your production into the future

Tell us about the bottleneck on your line and we will come back with a measurable improvement plan. Write to us for an initial discussion and requirement analysis.