Building a timetable is a mathematically hard problem. But in practice, the difficulty lies less in the solver than in how the constraints are written.
Separate hard constraints from preferences
"A teacher cannot teach two classes in the same period" is a hard rule; violate it and the timetable is invalid. "Put maths in the morning" is a preference; if it is not met, the timetable is still usable.
Treat them as the same thing and the solver finds nothing, making the timetable look unsolvable.
Read the infeasibility
When no timetable can be produced, the real information is which constraint blocked it. A good system does not say "no solution found"; it tells you which teacher's weekly load exceeds their available hours.
Be ready for change
A teacher's availability will change mid-term. Being able to regenerate the whole timetable is the single biggest difference from planning by hand — one change no longer means rewriting the entire grid.
Measure the result
Once the timetable is generated, the indicators to look at are clear:
- Free periods per teacher
- Classroom utilisation rate
- Balance of daily lesson load
- Share of block-lesson rules satisfied
Conclusion
Automatic timetabling does not take the planner's job away; it takes over the repetitive part, freeing the planner to think about the rules instead.