Why “adaptive learning” is usually a demo
Generating a personalised learning path is not technically hard. Generating one that a ministry of education, an international coalition or a corporate L&D department will accept as defensible is an entirely different problem, and the difference is almost all architecture.
A recommendation engine that says “do this next” because a model said so cannot survive the question “aligned to what?” The system needed to answer that question structurally — every activity, every assessment item, every generated path traceable to a published competency standard.
Constraints that shaped the design
Partners arrive with a programme already in flight. International coalitions don’t adopt a platform and abandon their curriculum. Whatever we built had to accept an existing programme as an input and make it richer, not replace it. Integration friction was therefore a first-order product metric, not an implementation detail.
Some of the users are children. That single fact propagates through every layer: what you may store, how long, who may read it, what leaves the boundary for analytics, what a support engineer can see while debugging. Retro-fitting that is not realistic — it has to be a property of the data model from day one.
The team was deliberately small. Small teams can move quickly, and they cannot carry operational sprawl. Every architectural choice was also implicitly a staffing choice.
Decisions and trade-offs
Make the competency graph the shared vocabulary
Instead of a schema per partner, everything — items, activities, evidence, outcomes — was expressed as edges against a competency graph aligned to a published standard. A new partner’s programme is then a mapping exercise onto an existing vocabulary rather than a bespoke integration.
That’s what compressed onboarding from weeks to days, and it wasn’t a performance optimisation — it was a modelling decision made two years earlier. The cost is real: you have to get the graph right, and changing a shared vocabulary once several coalitions depend on it is genuinely expensive. Versioning the graph, and treating standard alignment as data rather than code, is what makes it survivable.
Keep scoring deterministic; keep AI on the generative side
There’s a strong pull to let a model do the scoring too. I kept a hard line: scoring is deterministic and versioned; adaptivity is generative and constrained. A learner’s result must be reproducible years later, explainable to an institution, and identical for two learners who did the same thing. A stochastic scorer forfeits all three.
The AI-assisted work lives where variation is a feature rather than a liability — assembling personalised learning and training programmes, sequencing activities, adapting to the learner’s demonstrated profile. And it selects from a curated, standard-aligned pool rather than generating unbounded content, so the output stays inside the defensible envelope.
Encrypt end to end, and design around what that costs
End-to-end encryption is easy to add and hard to live with, because the moment data is opaque to the server you lose the ability to query it. The resolution was to be deliberate about what is genuinely sensitive: identity-linked responses and records travel inside a key-scoped crypto envelope, while the analytics store receives de-identified, aggregate-shaped data that was never joined to a person in the first place.
The trade-off is that some product ideas simply become unavailable, and you have to say so out loud early. That’s a better outcome than discovering it after a feature has been promised.
Consent as a gate in the request path
Guardian and institutional consent isn’t a checkbox on a signup form; it’s a condition that must hold at read time and change over time. Modelling it as a gate that every access traverses — rather than a flag checked once at registration — is what makes revocation actually mean something.
Own DevOps rather than delegate it
Automated dev and staging deploys, auto-scaling production, CI/CD across the board — run by the same people writing the services. With a lean team this is not a luxury; the alternative is a queue in front of every release. The cost is that architecture decisions have to account for their own operational weight, which in practice acted as a healthy brake on complexity.
What I’d do differently in 2026
I’d invest earlier in making the competency graph externally browsable. Partners understood the value immediately once they could see it; before that, “standard-aligned” was a claim they had to take on trust. Turning the model into a visible artifact would have shortened a lot of conversations.
I’d also formalise evaluation of the generative layer from the start — a held-out set of pathway-generation cases with expected properties, run on every change. Generative components drift, and without a regression harness you find out from a user.