Client case

Rebuilding the management system of a 60-company buying group

A management system that never fails but that nobody can change any more costs more than one that breaks. That was the position this Lyon buying group was in: everything worked, nothing moved, and every new business need was being handled outside the tool.

60+

member companies now managed through the platform we delivered

~50

approved suppliers, with agreements and amendments held in the DMS

Fixed price

scope and price committed contractually, source code handed over

This page describes the rebuild of the management system of a 60-company buying group: a Lyon-based group of more than 60 member companies and around fifty approved suppliers, working in refrigeration, air conditioning and professional kitchen equipment. Its website and management application ran on a monolithic proprietary framework that had become a brake. We replaced it batch by batch, at a fixed price, without stopping the group's operations.

The starting point: a frozen foundation

By French standards the group is a mid-sized structure, yet it runs the same processes as a far larger central body: assessing membership applications, negotiating and renewing annual approval agreements with some fifty suppliers, collecting revenue declarations, computing year-end rebates, and retaining the contractual evidence behind all of it.

The public website and the management application shared one foundation: a monolithic proprietary framework, chosen years earlier, that had become the main constraint. The problem was never an outage — the system ran every day — it was immobility. Each change cost more than the last, skills for that stack were getting scarce, and the functional scope had frozen on the day the framework stopped moving.

This is the classic position of a member network with no IT department: the system is neither broken enough to force a decision, nor flexible enough to follow the organisation. So people work around it — and the workarounds end up being the real information system: a workbook here, a shared mailbox there, a network folder for the agreements.

What was stuck, process by process

None of these processes was missing before the rebuild. All of them existed — they simply lived outside the tool that was meant to carry them.

ProcessBefore the rebuildAfter
Membership applicationsContact form, email exchanges, no consolidated view of live applicationsOnline application file, required documents listed, assessment in dated stages
Approval agreementsTemplates carried over year to year, amendments scattered, renewal dates tracked from memoryTooled annual campaign, versions retained, amendments attached, deadlines visible
Revenue declarationsFiles returned by email in inconsistent formats, manual chasing and re-keyingSupplier keys in their own space, checks on entry, live campaign progress
Rebate calculationCampaign workbook, copied formulas, manual adjustments with no record of their authorEngine running the group's actual scales, line-by-line detail, replayable statement
Document managementAgreements on a network share, found by file nameDMS searching inside the agreements, linked to supplier and campaign
What these five rows have in common: the arithmetic was never missing — the memory of what had been done was.

How the project was split and sequenced

A full rebuild sells easily as one block and delivers very badly that way. The project was split into batches ordered by business dependency rather than technical convenience: each batch had to be usable in production before the next one started, and every two-week sprint ended with a demo.

  1. Scoping and data model

    Workshops to write down the rules as they were actually applied: member statuses, the life cycle of an approval, the scope of declarations, the mechanics of the scales. Deliverable: a data model and a fixed-price scope, before the first line of code.

  2. Portal and identity foundation

    The first batch to go live: member and supplier accounts, roles and permissions, reference data. Without it, none of the later processes has anywhere to live.

  3. Supplier approval and document management

    Application and annual approval workflows, with the DMS alongside: agreements, amendments and supporting documents attached to the supplier and the campaign, searchable by content.

  4. Revenue declarations

    The collection module went live before the calculation engine, deliberately: a clean campaign was needed to give the engine a reliable base to work from.

  5. Rebate calculation engine

    The last functional batch, and the one that consumes everything else. Acceptance ran the engine against an already-closed campaign, then investigated every discrepancy until it was explained or corrected.

What was delivered

  • A member and supplier portal, in which each party sees only its own scope.
  • The approval workflows: application, assessment, annual agreement, amendments, renewal.
  • A revenue declaration module, with visible campaign progress.
  • A year-end rebate engine running the group's actual scales.
  • A document management system that searches inside the agreements, not just across file names.

The terms are part of the result: a firm fixed price, two-week sprints with a demo, a dedicated project team — project manager, senior back-end developer, front-end developer — source code handed over to the group, and contractual maintenance once steady state was reached. MEKANO is a Lyon development studio that works only on this kind of management software for buying groups, co-operatives and member networks; that focus is what makes a fixed price viable across a scope this wide.

The technical decisions, and what justifies them

The platform runs on Go, React and PostgreSQL. None of those choices was made on taste: each answers a concrete constraint of this group's business.

Go, for calculations that get replayed

The rebate engine has to recompute a whole campaign several times during acceptance, then again months later to justify a disputed amount. A compiled language with predictable runtime behaviour makes those replays fast and, above all, reproducible.

Go, for a spiky load profile

The load is not constant: quiet for eleven months, then concentrated into the few weeks of the campaign when every supplier logs in at once. The foundation had to absorb that profile without sizing the whole year for three weeks.

PostgreSQL, for rules and for search

Scales, validity periods, pro-rata and adjustments are relational data: the constraints that matter belong in the schema, not in application code. Full-text search across the agreements is served by the same engine, with no extra component to operate.

React, for dense data-entry screens

The most-used screens are not content pages but entry and review screens: filing a declaration, assessing an approval, recording an adjustment. They need immediate validation and workable tables.

One last criterion weighed as much as the others: longevity. The previous platform did not die of its features, it died of its foundation. Anything depending on a single vendor was ruled out in favour of three widely adopted technologies — ones the group can hire for, have audited, or hand to another supplier without a rewrite.

What was hard

Three things, and not one of them was a development problem.

Migrating the data

Data from an ageing system is not wrong, it is ambiguous: the same supplier present several times because the legal name changed, agreements with no end date, declarations tied to the calendar year for some and to an offset financial year for others. The migration called for judgement calls rather than code, made with the people who knew the history of each case. It was the heaviest demand on the group's own time, and it should be budgeted from the scoping stage.

The rules nobody had written down

The specification described the scales. Practice held more: a long-standing exception granted to a historic supplier, a pro-rata method applied from memory for years, a rounding rule never formalised. They all surface at the same moment — when the engine meets an already-closed campaign and the amounts do not land. Working through them one by one is tedious and non-negotiable: this is where members' trust in the new tool is won.

Adoption, on the supplier side above all

Members adopt a portal quickly when it simplifies an obligation they already have. Suppliers have no structural reason to change habits: filing in a dedicated space asks an effort of them that email never did. The switch was handled by supporting the first campaign closely, keeping a fallback channel for latecomers, and accepting that part of that campaign would still run the old way. Planning for that lag stops it being read as a failure.

What the group gets out of it today

We will not publish a time-saving percentage: the before was never measured in conditions that would make the comparison honest, and an invented figure always turns on whoever quotes it. What can be observed is of a different kind.

  • A rebate amount can be justified to a supplier straight from the platform, with no manual reconstruction.
  • A declaration campaign has readable progress while it runs, rather than a count made afterwards.
  • An agreement is found by its content — a clause, a rate, a name — not by remembering the file name.
  • A functional change is quoted and delivered inside a sprint, instead of hitting the limits of the old foundation.
  • The source code sits with the group, which can have the platform audited or change supplier.

The rebuild did not remove work, it moved it. Time once spent reconstructing, chasing and re-keying now goes into checking, assessing and negotiating. That shift is less spectacular than a percentage, but it is the one a group's general manager notices first.

Frequently asked questions

Would this transfer to our own group?
The processes largely do: membership applications, annual supplier approval, revenue declarations, rebate calculation and document management appear in almost every buying group and co-operative, whatever the sector. What does not transfer are the rules: your scales, your bases, your campaign calendar and the split between the central body and its members are yours alone. That is what the scoping workshops exist to write down, and why the fixed quote comes after them, never before.
How long does a rebuild of this scope take?
It is counted in months, not weeks: five successive batches, each in production before the next begins, on two-week sprints with a demo at the end of every one. What stretches a schedule is almost never the development — it is the data migration and the number of unwritten rules to reconstruct. The actual timeline of this project, with its dated milestones, is one of the things we go through during the discovery call.
Do we have to rebuild everything at once?
No, and this project shows the opposite. Batching exists precisely to avoid a big bang: the portal went live while rebates were still being calculated the old way, and declarations ran for a full campaign before the engine took over. Many groups start with a single batch — usually the calculation engine or the declarations — and decide what comes next once that first scope is live.
Who ran the project on the group's side?
We do not detail this group's internal organisation, since the reference is published anonymously. What we can say, because it holds for every project of this kind: you need a single point of contact on your side, empowered to decide on business rules, available for the acceptance of each batch and for the judgement calls of data migration. Without that person, questions stay open and the schedule slips. It is the first risk factor, ahead of anything technical.
What if our calculation rules are different?
That is the default assumption. The engine we delivered does not hold configured standard scales; it holds this group's rules, modelled during scoping. For you the approach would be identical: two workshops to write down the scales as you actually apply them — unofficial exceptions included — then acceptance testing that runs the engine against one of your already-closed campaigns. The acceptance criterion is landing on your amounts, to the euro.
Can we speak to this client before committing?
Yes. The reference is published anonymously on this site, but the group's name and a contact there are shared on request during the discovery call, once we have checked there is no direct competition between your two organisations. It is the most useful way to test what you have just read: questions about timelines, internal workload and adoption get better answers from someone who has lived through them.

Let's talk about your situation

Thirty minutes, no commitment. You leave with a straight answer on feasibility, a budget order of magnitude and the next steps.

Book the call