Skip to content

Case Studies

Building compliance automation on top of systems you do not control

When the authoritative data lives in two vendor platforms, the engineering problem shifts from storage to synchronisation, mapping and making failure visible.

Notes from building ComplianceLink: modelling requirements as data, resolving many-to-many contractor and site relationships, and keeping two vendor systems in agreement without becoming a third source of truth.

The constraint that shapes everything

When the data you need is authoritative in someone else’s platform, the temptation is to copy it into your own database and work from there. That produces a third version of the truth, which diverges immediately and permanently.

The alternative is to treat those systems as the source, hold only the relationships and rules that neither of them models, and invest the engineering effort in keeping synchronisation honest.

Requirements are many-to-many

A contractor is not simply compliant or non-compliant. They are compliant for a specific site, doing specific work, at a specific time. A different site imposes a different document set; a different work type changes it again.

Modelling this as a resolved relationship — contractor, site, work type, resulting requirement set — rather than as a status flag on the contractor is what allows the question to be answered correctly for each assignment instead of approximately overall.

Rules as data, not conditionals

Requirement definitions change when a client updates their site rules or a regulation moves. If those rules live in application code, each change is a development task and a deployment.

Storing them as versioned data means the compliance team changes what a site demands directly, and historical evaluations remain interpretable because the version that applied at the time is still recorded.

Evaluate continuously, not on request

Checking compliance when someone opens a screen means gaps are discovered by whoever happens to look. Evaluating continuously — on document change, requirement change or new assignment — means the system finds the gap and raises it.

This turns compliance from a periodic audit activity into an exception-handling workflow, which is a considerably smaller amount of human work.

Synchronisation failure must be loud

The dangerous failure is not an integration that breaks visibly. It is one that stops quietly while the interface continues to display data that is now days old, with no indication that it is stale.

Dead letter queues with full context, replay tooling, and alerting on the absence of expected traffic are what make this class of failure detectable. They are not optional extras in a system whose entire purpose is to be correct about the current state.

Identity should come from the organisation

Building a separate user list means joiners and leavers are handled twice, and the second one is always forgotten. Deriving access from Entra ID group membership means the organisation’s existing identity processes govern the platform automatically.

For enterprise buyers this is also frequently a procurement requirement rather than a preference, which makes it worth building in from the start.

Written by the Webnatrix engineering team. This is evergreen technical writing, maintained as our practice changes rather than published to a date.

Dealing with this in your own systems?

Describe the situation and we will tell you how we would approach it.