School Operations
bina teaches across time zones, so the working day is longer than any one team’s shift. Every child’s day is a set of appointments that has to be right, and every one of them has to change when a child moves class, a family signs up for a club, or a teacher stops being available. Without shared systems, the coordination work can grow with the roll. bina’s answer is a record: enrollments are dated rows that keep their history, a class roster is resolved from those rows at the moment somebody asks, schedules are authored once and published into every personal calendar, and the things families decide for themselves land without an administrator touching them. The people who run the school work that record with AI: a question about a cohort is asked in words and answered from the data platform bina built, with answers that can be checked against the source records. This is the system that decides whether the cost of running the school grows with the roll. bina is building it so that it doesn’t.
One move. A few things worth getting right.
Walk through a fictional class transfer. Resolve a timetable clash, approve a dated change and recover a delayed calendar update.
Illustrative workflow · fictional groups · no live school data
- Request
- Review
- Scheduled
- Applied
Transfer request
- From / to
- Group A → Group B
- Effective date
- Next Monday, 09:00 school time
- Learning fit
- Teacher review complete
- Capacity
- One place available in this example
Request received
The learner remains in Group A. Nothing changes before review and the effective date.
Calendar: unchanged.
Change history
- Request recorded. Existing placement retained.
What the operations engine is made of
This is one of bina’s longest-running systems, built around the work of carrying a working school from term to term. The administration, scheduling and family-facing services sit alongside newer work such as intake recommendations. Those recommendations still need review and their own production gates.
Dated enrollmentLive Every membership carries the day it starts and the day it ends.
Live rostersLive The class list is worked out at the moment somebody asks for it.
Schedule authoringLive The week is built on a grid, with repeats, amendments and undo.
Calendar publicationLive Every student and teacher gets their own week, in their own time zone.
Placement requestsLive A move is a request with a date, an approver and a trail.
Family self-serviceLive Clubs and electives chosen by families, without an administrator.
The teacher’s deskLive The daily surface: today, the class, the register, the materials.
Questions in wordsLive The team asks the record questions, in words, with AI.
Automatic placementIn build Seating a new intake without anybody drawing up a list.
Three ways a school runs itself
Every school solves these problems somehow. What separates the columns is what a change costs once the term has started, what the record can tell you about a day that has not happened, and whether the people running the school can ask it a question nobody wrote a report for.
| A spreadsheet and a shared calendar | A packaged school system | bina | |
|---|---|---|---|
| Who builds the week | A coordinator, in a sheet, copying blocks across tabs and then into invites. | An administrator, in the vendor’s timetable module, within the shapes it supports. | Whoever owns the week, on a grid, with repeats, shared blocks across groups, undo, and several people able to hold it open at once. |
| Where the timetable is published | In whatever calendar each person happens to keep. | In the portal or calendar integrations the package supports. | Into every student’s and teacher’s own calendar, assembled per person and converted into their own time zone, with no notification storm when a block moves. |
| What a mid-term move costs | A message in a channel, and somebody remembering to change five places. | A form, and a rebuild of whatever the module recalculates. | One request with an effective date. It executes on that date as a resumable sequence (membership, seat, rosters, calendars, classroom), recording each step it reaches. |
| What a future date can tell you | Only what its dated entries or saved snapshots preserve. | What has been keyed in, once the term rolls over. | The composition of any group on any day, resolved from dated memberships, with the movements still awaiting a decision applied, so a lead can see the class they are about to create. |
| What stops a double booking | Somebody noticing. | A validation in the module that owns the timetable. | A conflict check that refuses the save, and the database itself refusing overlapping memberships and overlapping bookings, including for rows backdated after the fact. |
| How a family joins a club | They email, and somebody adds them. | Through a parent module where available, or through the office. | They do it themselves, in their own portal, with capacity, a waitlist that promotes quietly, ranked preferences for year-long courses, and the calendar following on its own. |
| What the people running it can ask | Whatever a formula reaches across the tabs somebody kept up to date. | Built-in reports, supported queries and exports for further analysis. | Questions within the caller’s authorized data scope, in words. Every operational change is a dated row against a known child, reachable through one governed interface, so the team puts AI on the record and asks a cohort question directly. |
| The trade | It works until the roll grows, and then it needs people. | The school fits the vendor’s idea of a school, and its data lives inside it. | This is the oldest thing bina has built, and it grew in layers. For a long stretch a single lesson had several representations at once (the block that generated it, a mirrored row, the published calendar event), and most of the serious operational bugs of the past year trace to two of them drifting apart. The architecture that collapses them into one lesson row, with every consumer reading a projection of it, is designed in full and the migration is running phase by phase behind contract tests that keep the existing consumers answering throughout. Until it lands, a roster change arriving by an unusual path can still leave a stale list on somebody’s screen, and the team pays for that in investigations. |
One change, and everywhere it has to land
Moving one child between two groups is a small decision that touches a surprising number of things: two rosters, two personal calendars, a teacher’s week, the register, the shared classroom. Doing it by hand means doing all of it, in order, without forgetting one. Half-done is the state that actually hurts, because it looks finished. Hover any checkpoint on the rail to see what stops that happening.
Checkpoints. one open request: a child holds at most one open placement request at a time. no double booking: a conflict sweep refuses the save, and the database refuses overlapping memberships and bookings. the past is read-only: a day that has happened cannot be edited or redeployed. an effective date: a change executes on the day it takes effect, whatever day it was approved. recorded work only: the worker acts on recorded work items and does nothing when there are none. resumable by design: each execution records the step it reached and carries on from there.
The commitments that shape it
A school’s operations record is only worth what it can be trusted to say a year later. Four commitments hold this one: the past is never recomputed, a fact is stored once and resolved everywhere, a change carries the day it takes effect, and unfinished work stays visible until it is resolved.
The past is never recomputed
A day that has happened is frozen: ordinary deployment does not rewrite it, a teaching period that has ended is read-only, and today itself needs a specific permission to touch. History accumulates by writing new dated rows over old ones, and historical entries are retained under the record’s lifecycle rules. This is what makes a movement record, an attendance mark or a roster from two terms ago something a person can rely on.
Stored once, resolved everywhere
A class list exists in exactly one form — dated memberships — and every surface that shows one resolves it the same way. The list an interface returns is the list a save accepts and the list a report totals. Copies of the list are the source of nearly every operational bug worth naming in this system, and the consolidation currently in flight exists to remove the last of them.
A change carries its own date
Approving a move and applying a move are separate events with separate days. A decision taken in week two for a change in week four sits visible in the preview and lands on the morning it was meant to. That separation is what allows a lead to work through a queue of movements in one sitting without having to time a single one of them by hand.
A partial change is not a finished change
Anything that has to reach a calendar records a work item first, and the worker acts only on recorded work items. Each execution records the step it reached, so a run that stops partway carries on from there and rewrites nothing behind it. An item that has not reached a terminal state stays visible as an item, which is the difference between a failure somebody fixes and a failure that looks like success.
Families do their own admin
Clubs and electives are chosen by families in a portal of their own, with capacity, waitlists, ranked preferences and a switch window. The guardrails sit underneath: enrollment changes record work items, additions land on a nightly batch, removals go through near-instantly, and a family flipping their mind three times in an evening leaves the calendar exactly as correct as if they had decided once.
The record is built to be asked
Every operationally meaningful change is a dated row against a known child, reachable through one governed interface: keys carrying named scopes, a hard split between reading a record and reading who it is about, and a machine-readable description of exactly what a given key may call. That shape is why the team can put AI on the data platform and get a cohort answer in a sitting, and it is why an automation and a person cannot see two different schools.
What compounds
Operating cost comes loose from the roll
A new class is rows and a deployment. A new time zone is a field on a class. A new club is a registry entry and a self-service link. They need not each bring a new coordinator or another standing meeting. The claim this direction has to support is that bina can teach several times as many children without an operations department several times the size, and every part of it is built against that claim.
A question costs a question
Because the record is dated, structured and reachable through one interface, the team asks it things nobody wrote a report for, and asks in words. New operational questions arrive constantly in a growing school; in most of them the cost is a ticket, a sprint and a dashboard nobody opens twice. The aim is to investigate directly, with an answer checkable against the rows it came from.
Running the school writes the history
Every movement, every seat, every register mark and every club sign-up is a dated fact the moment it happens, because that is simply how the work gets done. Nobody is asked to record anything twice for the sake of analysis. What accrues is a longitudinal record of how a school actually moves. It is the substrate the learning loop and the safeguarding work both read from.
Three things are queued behind this one. The first is consolidation: collapsing the several representations of a lesson into a single row that every consumer reads a projection of, which is designed in full and migrating phase by phase behind contract tests. The second is teacher replacement as one action: naming a replacement and having every affected lesson, calendar, group and link move together, on top of the conflict guards that already exist; today it is done by hand, lesson by lesson, which is slow and easy to leave half-finished. The third is the register drawing itself from who actually joined the lesson: the capture direction already sees every arrival, and what stands in the way is resolving a child who joins under a nickname to the right person before a mark lands on their record. Automatic seating waits only on its production gates.