The spreadsheet stopped scaling.
It worked until four people were filling in the same one. Now there are three versions of the file, someone overwrote a row without noticing, and nobody remembers which one was current.
APIs and custom management systems
We design APIs and management systems for companies whose way of working does not fit an off-the-shelf product: a data contract written before the code, integration with the systems you already run, and prior history migrated with its context.
It worked until four people were filling in the same one. Now there are three versions of the file, someone overwrote a row without noticing, and nobody remembers which one was current.
The same record is typed twice: once into billing, once into the operations system. When they disagree, whoever checked last wins.
It works, but it imposes its own way of working. Every exception your business has ends up in a side spreadsheet, which takes you back to problem one.
Every field has a name, a type and a defined response for when something fails. The contract is written before the code: that is what lets you connect a new system next year without reopening the first one.
Billing, the warehouse, the spreadsheet your sales rep keeps. Instead of replacing them, we connect them so a record is entered once and travels.
Previous years come across with their context: who, when, and against which document. A new system that starts empty forces you to keep the old one running just to look things up, and then it replaced nothing.
Logs of what happens, usage metrics, alerts and backups. It is the difference between “the system feels slow” and knowing which query slowed down, since when, and for whom.
Not the org chart: what happens on a Tuesday. Who enters what, at which point, and which spreadsheet appears when the system falls short.
Which entities exist, which fields are mandatory, and what happens when an incomplete record arrives. Written and agreed before the first screen.
One module goes into use while the rest stays as it is. If a stage does not work, it is corrected with the operation running, not during a single-night migration.
Once the system is in use, the cases nobody mentioned in the meeting show up. It is adjusted with that information, not with the original assumption.
Evidence, not a promise
Control Romeva was designed exclusively for Transporte Romeva’s operation. It connects quotations, route sheets, delivery notes, invoices, collections, purchases, inventory, fleet, personnel and financial control: quoting and collecting happen inside the same system, each role sees what it needs, and every movement retains its operational context. That is what we can publish — the scope, not the screens — and it is enough to show how far a custom system can go when a whole operation fits inside it.
See the Control Romeva caseFrequently asked questions
It is the door two programs use to hand each other data without a person copying it by hand. If your billing software holds the customer list and your dispatch system holds another one, the API is what makes them the same list instead of two that drift apart. You do not always need one: if a single system covers the whole process, an API only adds a piece to maintain.
It depends on where the problem sits. If the system does its job and is merely isolated, we integrate: it costs less and nobody has to be retrained. We replace it when the tool imposes a process the operation cannot follow, and that is decided after the mapping, not before.
It migrates with its context: who, when, and against which document. It is the slowest part of the project and the one with the most surprises, because old data is rarely as tidy as people remember. A new system that starts empty forces you to keep the old one running to look things up, and that is not a migration: it is one more system.
Three things you can count: how many processes are included (quoting, invoicing, collecting, purchasing, stock control), how many systems have to talk to each other, and the state of the data being migrated. The mapping exists precisely to put a number on those three before anyone commits to a budget.
Maintenance is agreed at the start. One thing is not up for discussion: the code and the data are yours from day one. A custom system you cannot take to another provider is not custom: it is a lease with a different name. You can agree on ongoing monthly support or handle it change by change; either way, maintenance means the system keeps running when something around it changes — a version, a supplier, a tax rule — and that there is someone to call when it does not respond.
Because the system tells you before a user does. Every operation is logged, response times are measured, and alerts fire when something stops responding. Without that, the first person to learn the system is down is whoever was about to invoice. What gets measured and what triggers an alert is decided with you: an alert that fires at anything ends up ignored, and then it protects nothing.
Tell us how you work today and where it breaks. We start by mapping the operation; only with that on the table can anyone say whether you need a system of your own, an integration between the ones you already have, or two steps of the current process corrected. All three answers are possible, and they cost very differently.
Request an operations review