Skip to content
AZCY

Parent communication

How SchoolVoice proves a message actually reached a parent.

Proving delivery to parents when the messaging providers report late, out of order, or sometimes not at all.

The problem

SchoolVoice

Schools send the same message four ways and still cannot say who received it. The register says the number is correct; the parent says nothing arrived. Both are usually telling the truth.

The naive architecture is what almost every school system in the market ships: send to a gateway, get a 200, mark it delivered. That number is meaningless — the gateway has accepted the message, not delivered it. The system then reports a delivery rate that a head teacher makes decisions on, and the number is fiction.

The requirement was not a messaging feature. It was to be able to answer 'did this parent get this message' truthfully, including when the truthful answer is 'we don't know'.

The constraints

Fixed before anything was drawn.

Not requirements, which move. These are the facts of the problem that no amount of engineering was going to change, and every decision downstream had to survive them.

  • The gateways are not ours

    Delivery runs through third-party SMS, email, and voice providers we do not control and cannot change. Their receipts arrive on a callback — seconds later, hours later, twice, or never. Every design had to survive that rather than assume around it.

  • A school's idea of a recipient is not a gateway's

    A gateway addresses a phone number. A school addresses a household — which may be two parents, three numbers, and two children enrolled. The reconciliation had to bridge those two models, not pick one.

  • Silence is ambiguous and must stay ambiguous

    No receipt can mean delivered-but-unreported or dropped. Rendering it as either one is a lie, and a school acts on the display.

  • Cost differs by channel and the difference matters

    Voice costs materially more than SMS and reaches households SMS does not. Any design that hid that from the person choosing would push schools toward silently excluding the parents they most need.

The architecture

What the constraints forced.

  • Identity that survives a third party

    Every send carries an identity that makes the round trip through a provider that knows nothing about our data model. When a receipt returns, it resolves to the individual parent it was for — not to a phone number that three records share.

  • Idempotent reconciliation

    Receipts are not unique and are not ordered. The reconciliation is written so the same receipt landing twice produces one outcome, and a late receipt does not overwrite a newer state with an older one.

  • Three states, not two

    Delivered, failed, and unknown are all first-class, and unknown is displayed as unknown. A head teacher can act on 'we don't know' — they cannot act on a false green tick.

  • One student record underneath

    Attendance, results, and fees write to the same household the messages are addressed from, which is what prevents the fee reminder going to the parent who paid last week.

The decisions

Each one cost something.

A decision presented without its cost is a decision nobody had to make. These are the ones we would defend, and what we gave up to take them.

  • Show 'unknown' rather than resolving it optimistically

    The alternative reports a delivery rate that is fiction, and schools make real decisions on it.

    The trade-off

    The dashboard looks worse than a competitor's, and we have to explain why on every demo. We would rather have that conversation than be the reason a closure notice was assumed delivered.

  • Put per-channel cost in front of the sender, at send time

    Channel choice is where a school unknowingly excludes its hardest-to-reach households. Cost at the moment of choosing turns that into a decision.

    The trade-off

    It makes the expensive channel visibly expensive, which sometimes makes schools send fewer voice messages than they should.

  • One student record shared across every module

    Two copies of a household is what produces the reminder to the parent who already paid.

    The trade-off

    Every module is coupled to one schema, so a change to the household model touches everything. That cost is real and it is worth it.

Where it stands

The platform is built and running, and it can answer the question it was built for: what happened to this message, to this parent, on this channel — including when the honest answer is that we do not know.

The engineering that matters transferred: the reconciliation model here is the same one behind every delivery-guarantee problem we take on, and it is why the delivery half of a client system is not a research project for us.

We build systems like this for other organizations.

SchoolVoice exists because we met the same operational failure enough times to engineer it properly. Yours is probably a different failure. That is the conversation we want, and you will have it with an engineer.