Skip to main content
skodle
Browse help docs
All help docs
Help

Building a timetable the solver will stand behind

Describe the week and what has to be taught in it, and the solver proposes a timetable. It will tell you what it could not place and why, rather than forcing a lesson in and leaving somebody to find it in September.

For Timetablers, leadership and admin · reviewed 2 September 2026

The 1 points where someone must decide

Everything else can be worked on in any order. These cannot move without a person.

  • PublicationCandidatePublished
1

Lay out the period grid

Coordinator

/admin/timetable · /management/timetable

app.skodle.com / admin / timetable
3
skodle
MJ

Periods

Including the ones nothing may be scheduled into

Period 1 · 08:30–09:20

Every teaching day

Teaching

Break · 09:20–09:40

Every teaching day

Protected

Period 2 · 09:40–10:30

Every teaching day

Teaching

Enrichment · 14:00–15:00

Wednesday only

Teaching

Break and lunch sit in the grid on purpose, marked as non-teaching, so the solver leaves them alone instead of scheduling through them.

/admin/timetable

The grid is the shape of the week: each period has a label, a start and an end, and the days it runs on. A period that runs every teaching day needs no days listed.

Break and lunch belong in the grid rather than being left as gaps, marked as non-teaching. A solver that cannot see lunch will schedule a lesson through it, so the way to protect a period is to describe it rather than to omit it.

  • Label, start and end time, and the days it runs.
  • Non-teaching periods are visible to the solver and never filled.
  • With no teaching periods defined, nothing can be generated at all — and the solver says exactly that.
2

State what has to be taught

Coordinator

/admin/timetable

app.skodle.com / admin / timetable
3
skodle
MJ

Requirements

What each class needs, per week

MYP8A · Mathematics

5 per week · S. Khan · Room 14

5 periods

MYP8A · Games

2 per week · not on Wednesday

Blocked day

PYP4A · Unit of inquiry

4 per week · no room set

4 periods

A blocked day is how a real constraint gets in: games needs the field, and the field is gone on Wednesday.

/admin/timetable

A requirement is one line: this class, this subject, this many periods a week — optionally with the teacher who takes it and the room it needs. That is the whole input, and it is deliberately small, because a timetable argument is usually about the requirements rather than about the algorithm.

Days can be blocked per requirement. This is where the awkward real constraints live, and stating them up front is cheaper than discovering them in the published week.

3

Generate a week and look at it

Coordinator

/admin/timetable

app.skodle.com / admin / timetable
3
skodle
MJ

Candidate timetable

Nothing is saved at this point

MYP8A · Mathematics

5 of 5 placed

Placed

MYP8A · Games

1 of 2 placed · no free period left that is not Wednesday

Unplaced

Teaching periods

30

Placed

27

Unplaced

1

Unplaced comes with a reason. Add periods, free a teacher, or ask for less — those are the only three fixes.

/admin/timetable

Generating shows what the solver would produce without writing anything. Requirements it could not fully place are listed as unplaced, each with the reason it failed — a lesson is never forced into a slot that breaks a constraint and left for somebody to discover later.

The candidate is checked for clashes using the same engine the live timetable is checked with, so a proposal cannot be presented as clean on the solver's own say-so.

  • Unplaced is information, not a failure — it is the timetable telling you the week is over-subscribed.
  • The three real fixes are more periods, a freer teacher, or fewer required periods.
  • Nothing reaches the school until the candidate is accepted.
4

Accept it

Coordinator

/admin/timetable

app.skodle.com / admin / timetable
3
skodle
MJ

Publishing the week

Re-solved on the server before anything is written

Replace the published week

Solver starts from an empty week

Replace

Add to what is published

Keeps existing slots and fills around them

Add

A candidate that clashes with itself is refused rather than written. A broken week is worse than no week.

/admin/timetable

Accepting can either replace the published week or add to it. Replacing starts the solver from an empty week; adding keeps what is already published and fills around it.

The week is solved again on the server at this point rather than taking the candidate the browser sends back. The roster may have moved since the preview, and a client can send anything it likes — neither is a good reason to publish a timetable to a school.

Gate · Publication

CandidatePublished

The re-solved week is checked for clashes before it is written, and a clashing candidate is refused outright. The solver should never produce one; if it does, that is a bug, and refusing is a better answer than publishing a broken week and finding out from a corridor full of children.

5

What everybody else reads

TeacherStudent & family

/teacher/timetable · /student/timetable · /parent/timetable

app.skodle.com / student / timetable
3
skodle
MJ

Timetable · student portal

The published week, scoped to the reader

Period 1 · Mathematics

Room 14 · S. Khan

08:30

Break

09:20

Period 2 · Unit of inquiry

Room 6 · A. Iyer

09:40

Teachers see their own teaching week rather than the whole school's.

/teacher/timetable

Once published, the week is what teachers, students and families read, and what attendance and cover are organised against. A teacher's view is narrowed to their own teaching rather than the whole school grid.

Keeping the timetable current is covered in Running the day — this doc is about building it in the first place.

Who can approve what

Designations are assigned in IB roles and are separate from the account role somebody signs in with.

DesignationSeesApproves
AdminThe whole school grid, unscopedPeriods, requirements, generating and publishing
ManagementThe whole school gridThe same as admin
TeacherTheir own teaching weekNothing — the timetable is a school record
Student and familyThe published week for that studentNothing

If something looks empty

Nothing can be generated at all

No teaching periods are defined, so there is nowhere to put anything. Build the period grid before the requirements — the solver reports this reason explicitly rather than returning an empty week.

A subject comes back unplaced every time

The week is over-subscribed for that constraint. The reason on the unplaced line says which one, and the fixes are the same three: add periods, free the teacher, or reduce the periods required.

Lunch has a lesson scheduled through it

The period is missing from the grid, or it is marked as teaching. A break the solver cannot see is a break it will fill.

Publishing was refused as clashing

The re-solved week clashed with itself, which should not happen. Nothing was written. That is a bug worth reporting rather than retrying.

The published week does not match the preview

The week is solved again when it is accepted, and the roster may have changed between the two. Generate again to see the current picture before publishing.

Still stuck?

Bring the unit you are working on. Thirty minutes with someone who has taught the programme.