Spreadsheets to one source of truth
For a retail group, 50+ Excel files became a single PostgreSQL source of truth.
An old system is usually the most accurate description of how the business works, written over years in rules nobody remembers writing. We recover those first, then replace in stages small enough that the operation keeps running.
Nothing is switched off until the replacement has done the same work on the same records and agreed.
Every change threatens reporting, permissions, an integration, or a rule nobody can locate. So the safest available decision is to keep paying for the problem.
Spreadsheets, inboxes, and one long-serving colleague hold what the application cannot. Replace the application on its own and that is what gets lost.
Everyone agrees the platform is outdated. Nobody can name the weekend when the operation could stop long enough to switch.
Workflows, data ownership, integrations, custom logic, and the undocumented rules, read out of the running system rather than out of a manual that stopped being updated.
What to rebuild, what to keep and wrap, what to retire, and the order that keeps the operation working through every stage.
Interfaces, services, permissions, and data models built on the rules recovered from the old system, including the exceptions it quietly carried.
Records moved with their history, old and new outputs compared until they agree, people trained, and each legacy path switched off deliberately by a named owner.
For a retail group, 50+ Excel files became a single PostgreSQL source of truth.
A dated operations tool replaced by a maintainable product that keeps the records, roles, and reporting the business had learned to rely on.
A brittle all-in-one application separated into modules with explicit boundaries, so the riskiest piece could be replaced without disturbing the rest.
Read the running system: workflows, workarounds, data dependencies, integrations, and the rules that now exist only as behaviour.
OutputCurrent state and risk assessment
Define the target, the boundary of each stage, the interim controls, and the smallest release that proves continuity.
OutputReplacement blueprint and cutover plan
Rebuild in stages, each one reconciled against the old system before anything is allowed to depend on it alone.
OutputReplacement running real work
Retire legacy paths once the operation trusts the replacement, then extend it into what the old system could never do.
OutputA system that can change again
See where activity, approvals, exceptions, and reporting sit once the spreadsheets propping up the old system are no longer needed.
Open the demonstrationTreat migration, reconciliation, and rollback as product requirements. They are the parts of the project the operation actually feels.
Carry audit history and record ownership across the move. A record that arrives without its history arrives less trusted than it left.
Prefer staged replacement over a single cutover unless the workflow genuinely allows the business to stop.
Describe it in a sentence or two. We will come back with what we would build first, what it would take, and whether you actually need us for it.