Skip to main content

Two shifts, one building

Importing from FET 4 min read

Half your school arrives at seven and leaves at noon. The other half arrives at noon. Most timetabling tools quietly assume you are one school.

At seven in the morning the building fills. At half past twelve it empties and fills again with different students, taught partly by the same teachers, in exactly the same rooms.

If you run a school like this you already know the two facts that make it hard. The rooms do not get a break, and neither do some of the staff. Everything that is merely inconvenient in a single-shift school — a lab double-booked by twenty minutes, a teacher with no gap between the last morning lesson and the first afternoon one — becomes structural.

And then you open a timetabling tool and discover it thinks you are one school with a very long day.

A long day is not two shifts

The difference is not cosmetic. In a single-shift model, "period 7" is just later than "period 6". Nothing stops a teacher being scheduled across the boundary, because to the software there is no boundary — only a longer row.

But there is a boundary. It is the reason your afternoon staff can be different people, the reason a room needs clearing, the reason "she teaches mornings only" is a sentence that means something.

A model that cannot express the boundary cannot protect it. You end up enforcing it by hand, checking every draft for crossings that should have been impossible to create.

FET already knows

This is worth saying plainly, because it is the part people miss: FET itself handles this properly. It is not a workaround or a community patch. FET works in one of four modes, and the mode decides which families of constraint exist at all.

One of them is Mornings-Afternoons. In that mode the solver works in half days rather than days, and an entire constraint family appears that does not exist otherwise — rules about mornings and afternoons as distinct things.

The solver's half-day grid, all twelve columns monday1 · monday2 · tuesday1 … saturday2, 435 activities, header reading No Conflicts
The solver's half-day grid, all twelve columns monday1 · monday2 · tuesday1 … saturday2, 435 activities, header reading No Conflicts

So the boundary stops being something you police. It becomes something the model knows about.

Reading it back is the other half

A half-day grid is the right shape for a solver and the wrong shape for a human. Nobody thinks in twelve half-days. They think in five days, each with a morning and an afternoon.

FET knows this, and records both: the half-days the solver works in, and a separate list pairing them back into real days. Roughly half the real Mornings-Afternoons files we have seen carry that pairing; the rest carry only the half-days.

We keep whichever your file has. If the pairing is there, it comes in with everything else and goes back out on export, unchanged. If it is not there, we do not manufacture one — and when you switch a timetable into Mornings-Afternoons yourself, we build it, because at that point there is nothing to carry and you have asked for the shape.

The same grid filtered to the afternoon half-days only: monday2 · tuesday2 · wednesday2 · thursday2 · friday2 · saturday2, with the filter chip DAYS 6 hidden left visible so the frame explains itself
The same grid filtered to the afternoon half-days only: monday2 · tuesday2 · wednesday2 · thursday2 · friday2 · saturday2, with the filter chip DAYS 6 hidden left visible so the frame explains itself

That is the whole policy, and it is deliberately boring: we show you your own file. A structure FET never wrote is not a structure we will invent for you, however helpful the invention might look.

Your timetable carries whichever mode it was created or imported with, and the mode is shown in the header of the data screen. You do not configure it here; you see what FET set.

One warning worth reading twice

If you own the timetable, that mode badge is a button, and clicking it starts a switch.

Switching modes deletes data. It has to: the modes do not share a constraint vocabulary, so leaving Mornings-Afternoons means the morning/afternoon rules have nowhere to go. That is why only the owner can do it, and why the badge is just a label for everyone else.

It is not a setting to try out. Decide the mode in FET, where the constraints live.

Why this matters more than it sounds

Two-shift schooling is not a niche. It is normal across much of Turkey, Morocco, Latin America and South Asia — anywhere a building serves more students than it has seats.

There is already a FET tool built specifically for the Moroccan morning/afternoon system, which tells you two things: the demand is real, and it has been underserved long enough that people build their own.

If your school runs two shifts, the mode already exists in the software you are using. What has been missing is everything after the solver — reading it, sharing it, printing it, putting it on a wall — in a shape that admits your day has a seam in the middle of it.

How a two-shift day imports →