Skip to content

ProServIQ · Professional services, with the IQ to prove the answer

Software built to be right — and to prove it.

Bring us an idea, or a problem where a wrong answer is expensive. We build the product or system that solves it — and a second, independent instrument beside it that checks every answer it gives. When the two disagree, you hear about it before your customers do.

The name, decoded

Pro
Professional-grade engineering — work we put our name to.
Serv
In service of your problem: we build what it needs, and you own it.
IQ
Intelligence you can check — every answer computed a second, independent way.

How it works

From an idea to software you can defend, in three steps.

  1. 01

    You bring the problem

    An idea for a product, a process that needs building, or a system you already run and are not sure of. You do not need to know how it should be built — only which answer would be expensive to get wrong.

    You get

    One conversation, free, and a straight answer on whether we can help.

  2. 02

    We build it

    The product or system that solves it, from a specification agreed in writing before any code. A fixed fee, weekly written notes on what we find, and nothing kept back by us at the end.

    You get

    Software you own outright, as source.

  3. 03

    We prove it

    A second instrument, written separately and sharing no code with the first, answers the same question by a different route. Every result comes back established, divergent or unestablished — never a confident guess.

    You get

    The checker, and the written argument for why the answer is right.

Already running the system? Start at step three: we build only the check, run it against your real inputs, and report every place the two disagree. Compare the ways to work with us →

Ways to work with us

Build something new, check something you already run, or guard what you store.

01

Verify an existing system

We build a second instrument for a computation you already run, and report where the two disagree.

You receive

the checker, its method, and a register entry you may publish or keep

2–4 weeks · fixed fee

02

Build with the check included

A solution whose correctness argument is written alongside it, by a checker that shares no code with the thing it checks.

You receive

the solution, its checker, and the argument connecting them

6–12 weeks · fixed fee

03

A gate on what you store

A refusal layer ahead of your data, because a dropped record and a stored-but-wrong record are indistinguishable downstream.

You receive

the gate, its refusal log, and what it declined and why

3–5 weeks · fixed fee

Software fails silently far more often than it fails loudly.

A crash announces itself. A wrong answer does not. It arrives on time, in the right format, inside the expected range, and is acted on.

The only way to catch one is to compute the answer a second time, in a way that could not have made the same mistake.

What we will state in writing

A computed answer earns belief only from an instrument that could not have made the same mistake.

The second instrument, across five systems

Scheduling
a checker that re-derives every constraint from the finished schedule and shares no code with the model
Statutory computation
a separately written reference implementation, plus a solver checking both against stated invariants
Agent output
deterministic verification against what the agents asserted
Data intake
a gate ahead of storage that refuses rather than coerces
Time series
transfer entropy where the industry uses correlation
How a second instrument is built →

What a second instrument catches

One number, two readers.

Published check 0032 · a parsing case, not a product

Two functions in one system both claimed to read an amount off a document. On an ordinary input they differed by a factor of one hundred. Both had shipped. Both had passing tests.

ON THE DOCUMENT600000.00strip every non-digitread the decimal point60000000600000100× APARTand both were in productionTHE SAME READERS, ANOTHER INPUT(-) 1,00,52,670POSITIVEa loss recorded as income
Plate 1 · one input, two readers, a hundredfold gap

A separate instrument recomputes the answer and records disagreement. That is step three above, in every domain we work in.

Why nothing caught it

  1. Both functions were documented as returning the same unit.
  2. Each was tested against inputs its own author had in mind.
  3. Neither was ever run against the other, because nothing said they were two answers to one question.
  4. A hundredfold error is still a plausible number — it arrives on time, in range, and nothing throws.

Divergent · 100× on one input · sign lost on another · one grammar now, and the unit is in the type system

The machinery

What a second instrument is actually made of.

Eight techniques, all running in production, none of them specific to a domain. Each one exists because something got past the first instrument — and each is written down here with what it cost to learn.

196
test files
0
imports from the engine into its checker
93
expired rules found claiming to be current
100×
the gap between two readers of one number

01

Two engines, no shared code

The primary engine compiles rules from data. The checker implements the same specification directly — plain tables, whole-number arithmetic, no rules engine, no solver, no shared constant. It is written to be able to disagree.

How we know

The checker imports nothing from the engine it checks. Zero edges, enforced by a test that reads the import graph.

A mirror that imports the original verifies nothing. Independence has to be structural or it is decorative.

02

A proof over every input, not a test over examples

The risk model carries a formal certificate: an SMT solver proves that a bound holds across the entire input space, and returns a named counterexample when it does not. Loosening a parameter breaks the proof rather than quietly widening the model.

How we know

Runs in CI as an UNSAT certificate. A failure names the exact inputs that break the bound.

Tests sample a space. A proof settles it. For a claim you intend to put in writing, sampling is not enough.

03

Units in the type system

Values that differ only by scale are branded distinct types at compile time and identical at runtime. Passing one where the other belongs is a build error, not a plausible number on somebody’s screen.

How we know

The brand is mutation-proven: weakening it makes the guard assertions themselves fail to compile.

The hundredfold error earlier on this page is exactly this class. It is the cheapest whole category of bug to delete permanently.

04

Rules are data, and every result is pinned to them

The rules a computation ran under are compiled from files and digested to a hash. Every stored result records that hash, the engine version and the inputs — so a result from two years ago can be replayed under the rules it was actually computed under, not today’s.

How we know

A provenance-only edit moves the hash. That is correct, and it is why archived rulesets are kept.

A system that cannot reproduce its own past answers cannot defend them. Most cannot.

05

Rules expire, and the system knows when

Every rule carries a validity window. A rule repealed in 1993 is applied to 1992 and refused for 1994, rather than being deleted — because a historical computation still needs the rule that governed it.

How we know

Auditing this found 93 repealed rules reporting themselves as still in force, with their repeal dates sitting unparsed on the page they came from.

Most systems model the current rules and silently lose the ability to explain any earlier answer.

06

Isolation lives in the key, never in a filter

Records are addressed by a path that contains the tenant. There is no query-time filter to forget, because there is no query-time filter.

How we know

A key that omitted the tenant was found by seeding one client under two accounts — a case no fixture built, because every fixture used its own identifier.

A filter fails open: one missing clause leaks a customer’s whole book. A key fails closed.

07

A build that is not byte-reproducible is not evidence

Derived artefacts are written so that two machines produce identical bytes, and each records the digest of the source it was derived from.

How we know

Two platforms had been emitting different bytes for the same input through newline translation alone — which would have made “rebuild and compare” useless as an acceptance test.

If you cannot rebuild it and get the same thing, you cannot prove what produced it.

08

Three states, never two

Every result reports established, divergent, or unestablished — and the third travels all the way to the screen with the reason and the remedy attached.

How we know

Seven defects in one audit were the same shape: a three-state fact flattened to two at a response boundary. Fixing them at the producer exposed five more nobody had reported.

A system with two outcomes has to file “could not tell” under one of them, and it always files it under the reassuring one.

None of this is a research prototype. It is the machinery behind an instrument we run every day — and it is the same machinery we build into someone else’s system.

See it in the instruments →

Interactive · check 0031

Add the eighth person.

Every state below was produced by the real solver before this page was built. Nothing here is illustrative.

Controls

Staff

Constraints

Hover a constraint to see the cells it governs. C8 can be switched off.

14 days · 3 shifts · 7 staff

INFEASIBLE · 0.089s

Tue01Wed02Thu03Fri04Sat05Sun06Mon07Tue08Wed09Thu10Fri11Sat12Sun13Mon14
Early··············
Late··············
Night··············

No solution exists

Coverage requires four shifts on each weekend day. One shift per person per day makes that four DISTINCT people. Everybody is owed one full weekend off, so nobody can staff both. Two weekends therefore require eight distinct people, and the roster has seven.

Pre-computed · CP-SAT · states generated from the model, not written by hand · read the method

Start here

Bring us the problem.

Tell us what the software should do — or which answer you are unsure of — and who acts on it. A person replies within two working days with whether we can build it, and how we would prove it right.

First conversation
Free — and if the answer is no, it comes with the reason.
Every engagement
A fixed fee, agreed in writing before any work starts.
What you keep
The source, the checker, and the argument connecting them.

Or write to contact@proserviq.com