Figure 6 Student behaviour analytics markdown is used to support tables and figures and MathJax library [32] is used for I4TRXstyle mathematical formulas. If a question that was already used by a student is saved via the edit form (e.g. to fix a bug in the question) Edgar will save changes to a new question while automatically deactivating the old question so it does not to appear in future exams. This keeps the history accurate, and past students’ exams with er- roneous question will still be linked to the original question. This behaviour can be overridden via "save in place" option which does not instantiate new question that could be useful for fixing (minor) text typos. Additionally, questions can have custom tags having meanings (e.g. "requires-attention" to mark a question to be checked) and list of reviewers. In our experience it is very important to structure a strict question writing/reviewing process and to assign responsibility for the question to author and reviewer. Questions are organized into a network of nodes of arbitrary types (e.g. unit, module, tutorial, etc.) and a question belongs to one or many nodes. In practice, we’ve encountered a dilemma whether to structure the questions and nodes thematically or organizationally. It appears that organizational structure is more used, but often both are used as shown in Fig. 7 and Fig. 8. Except in rare cases when the same unit, module or tutorial is used in several courses, nodes are typically structured hierarchically in a tree. Once the questions are grouped in nodes it is possible to define an exam using those nodes. An exam can have multiple parts where one exam part corresponds to one node and additionally defines minimum and maximum questions to be generated at random from the assigned node. Building on the example in Fig. 7 we could, for instance, define an exam with three questions using two exam parts (EP):