EduLib: rescuing and rebuilding a live lesson authoring platform
EduLib is a Romanian education client's web platform for building interactive lessons and tests and for putting learners through them. The product worked; the code under it did not, having been passed between teams for more than five years until nothing new could be added without breaking something else. We mapped it, rebuilt it, delivered the redesign that had been blocked, and then built the new lesson and activity types the client had been asking for.
- Education technology, Romania
- Embedded front-end delivery team acting as the client's front-end technical authority, since their only technical counterpart was a backend team lead
- React with Redux and Redux Saga, inherited five years stale and brought forward as part of the work
The client came to us in January 2022 with a large web application that was already live and already failing them. It let authors build interactive lessons and tests, and it let learners work through them. The product was good. The code underneath was more than five years old, built by a succession of teams across a succession of periods, and it had accumulated the worst of each of them, up to and including enough instability that nothing new could be added safely. They had a redesign they wanted to ship and modules they wanted to build, and neither was possible. What they asked for was blunt: make it work, make it ready for the redesign, and make it possible to build on again.
This was January 2022, before anyone could hand a codebase to a model and ask what it did. We read the application and mapped its architecture by hand, working out what was load-bearing and what was residue left behind by teams who had moved on. Only then did we plan: the order the refactor would run in, which legacy came out when, and how five years of deferred library upgrades would land without stopping delivery. With no front-end counterpart on the client side, the analysis, the plan and the risk calls were ours to make and ours to be right about.
Stage one was the rescue: the architecture reworked, the legacy removed, the application rewritten into something a person could read and a team could extend. Stage two was the redesign, once the client brought their designs, with every activity type restyled and the interface around them with it. Stage three was the point of the first two. They wanted new lesson types and new activity types, and we built them by reusing what stage one had made reusable, which is the difference between a refactor that pays for itself and one that just feels tidy.
Two things made the delivery harder than a rewrite normally is. A lesson is not a single screen: it is authored, previewed, taken by its author as a test, reviewed, met by a learner, submitted, marked up with comments, and read back. That is the same entity rendered eight different ways under different permissions, where a wrong boundary means one role sees what it must not. The second is that lessons had to print. A lesson rendered by a browser and the same lesson paginated onto paper are not the same artifact, so every activity type was verified in that mode too, worked through with the QA team until the printed version matched what the screen promised.
It reached production with every goal the client set met: the application stable, the redesign delivered, and new modules buildable again. The engagement closed early in 2023 because the work was finished, not because it stalled. No client-confirmed metric is published for this engagement. The relationship outlasted the project, though: the same client came back for a video player with quizzing built into it, and later for the platform that pulled everything under one roof. EduLib is where that line starts.