I own the copyright to a school-centered system called Muse, so I began there, stripping back and rebuilding the code to produce a user authentication and management system—today called, Gibbon. With this in place, I began building one of Gibbon’s defining features: a flexible system for controlling functionality for users across the system. Like Drupal, it has a flexible set of modules, each defining a set of actions users could perform. Grouped in roles, users can then be given access to functionality with just the check of a box. Gibbon has core modules and themes and is built to allow easy integration of additional code to adjust both functionality and appearance.
With the framework in place, I began replicating in the database and code various structures found in schools, like: academic years, year groups, spaces, roll groups, courses, classes, students, and teachers. Each of these structures was designed to work for a broad range of schools, such as those catering to different ages (primary or secondary school) and those teaching different systems (e.g. UK National Curriculum, IBO, etc). With this type of flexibility comes difficulty, as it requires thinking not just about the case in front of you, but of all possible cases. For example, you cannot simply hard-code in a school week running from Monday to Friday, as this is not universal around the world. Although time and resources were limited, I spent a lot of time on this, reasoning that it would save time in the future.