The BC Learning Network is a consortium of public school districts in BC who offer online learning opportunities to their students. BCLN contracted us to rebuild their Student Management System from the ground up. Their existing solution had grown to become an unmaintainable collection of various PHP scripts that was deeply coupled Moodle (an open source learning management system).
After an audit of the existing code base, it became clear that a rewrite was necessary. Our goal was to build a system that could be self hosted by districts, use modern technologies and user interface patterns, and reduce the cost of maintenance significantly through better system architecture.
Some of the problems we helped solve:
- Introduction of an agile development process with much more frequent delivery schedule (roughly every 2 weeks) in additional to a more maintainable code base (version control, modern git practices, modular code)
- Designed a modern interface as a single page application fixing some of the design problems in their old system
- Delivered the product as a docker image for simpler installation of SMS and the dependent services by districts hosting themselves
- Abstracted integration with the Moodle API instead of their existing direct MySQL table manipulation. The ultimate goal was to provide support for alternative LMS systems with Moodle being the obvious first choice, but the existing solution (querying moodle tables directly) was extremely fragile
Technologies choices made:
- Much of the data is a suitable candidate for NoSQL document storage with some aspects of relationships (students are complex documents while they are related to courses through enrolment). We opted to use RethinkDB to provide us with simple document storage and relational joins as needed. In addition, change feed queries allow for simple ingress into Elasticsearch and the future potential for real-time results in the interface
- AngularJS for frontend code to provide a codebase in a widely adopted, easily referenced framework allowing for easier handoff to other maintainers
- Docker Compose for simplified installation by districts without the need to manually install specific services used by SMS2 (RethinkDB, Elasticsearch, Redis)