All articles

How to build a learning management system (LMS)

An LMS looks like courses and a progress bar. Underneath are content standards, accessibility duties, and reporting — most of which a mature platform already does.

A learning management system seems like one of the friendlier things to build. There are courses, there are learners, there is a progress bar that fills up, and at the end someone gets a certificate. Then you start listing what the platform actually has to do — track every learner's progress across every module, mark assessments, issue certificates that mean something, report to a manager who has to prove compliance, work for a learner using a screen reader, and import content built in a tool you do not control — and the friendly project reveals its real size. Most organisations that think they need a custom LMS need a better-configured off-the-shelf one. A few genuinely do not, and the difference is worth getting right before you commit.

First ask whether Moodle is enough

The off-the-shelf LMS market is deep and mature. Moodle, in particular, is open-source, free of licence cost, endlessly extensible, and already handles courses, enrolment, quizzes, grading, certificates, and the content standards you would otherwise implement yourself. Commercial platforms cover the same ground with more polish and support. Before you build anything, the honest question is whether one of these, configured properly and perhaps themed to look like yours, covers what you need. For a training company delivering fairly standard courses, or a school running ordinary classes, the answer is usually yes.

Custom is justified when your learning experience is not standard — when the way you teach, assess, or sequence content is itself the product, and bending it to fit a generic course-and-quiz model would blunt the thing that makes you worth paying for. A simulation-based training, an assessment method no quiz engine supports, a deeply branded product-education experience woven into your own application: these can justify a build. Wanting a nicer interface than Moodle's does not.

A useful way to test yourself is to ask where the learning actually happens. If it happens inside standard course material — videos, readings, quizzes — that a platform already presents well, then the platform is your answer and your effort belongs in the content, not the software. If the learning happens inside an interaction the platform cannot host — a coding exercise graded against real output, a branching scenario that adapts to each decision, a simulation of the very product you sell — then that interaction is the thing worth building, and everything around it can still be bought.

Courses, content, and the standards you cannot ignore

At the centre of an LMS is content, and content is where the deceptive complexity starts. A course is not just a list of pages; it is modules, lessons, ordering rules, prerequisites, and media that has to play reliably on every device. The moment you want to reuse content created elsewhere — bought courseware, an authoring tool your instructional designers already use — you meet the content standards: SCORM and the newer xAPI. SCORM packages content and its completion rules so an LMS can play it and record a score. xAPI goes further, capturing detailed statements about what a learner did, even outside a formal course.

These standards are not optional if you want interoperable content, and implementing them correctly is real, unglamorous work — precisely the kind an established LMS has already done and debugged. If your content will come from external tools or must move between systems, that is a strong argument for buying rather than building, because a custom LMS that does not speak these standards quietly traps all your content inside itself.

Enrolment, progress, and roles

Around the content sits the machinery that makes it a system: enrolling learners, tracking each one's progress through each course, and remembering exactly where they stopped so they can resume. Progress tracking sounds trivial and is not — a learner who watches ninety percent of a video, answers two of three questions, and closes the tab has a state you must store precisely and correctly, because they will be annoyed, rightly, if it is lost.

Then there are roles, and they are more than a permissions checkbox. A learner sees their courses and progress. An instructor authors content, sees their cohort, and marks work. An administrator manages enrolment, runs reports, and configures the platform. Each role is effectively a different application sharing the same data, and getting the boundaries right — what each can see, do, and never touch — is a design problem, not just a security setting. Underestimating the admin and instructor experience is a classic way a custom LMS ships something learners like and staff cannot run.

Assessments, certificates, and reporting

Assessment is where an LMS earns trust. Quizzes, assignments, question banks, randomised questions, timed exams, retries with rules, and grading that is fair and consistent — each is a small system of its own, and if any of it is wrong, learners and instructors both stop believing the platform. Certificates are the visible reward, and they carry weight only if they are backed by a record you can stand behind: who passed, when, against which version of which assessment.

Reporting is what turns all that captured data into the reason an organisation bought an LMS in the first place. A manager needs to prove that their team completed mandatory training; a training company needs to show a client that their staff are certified; a school needs progress by class. This reporting is not a nice-to-have bolted on at the end — it is often the actual product, and if the underlying data model was not designed with those reports in mind, producing them becomes a painful, error-prone extraction rather than a query.

Compliance training makes the stakes concrete. When a regulator or an auditor asks whether every employee completed mandatory safety training this year, the acceptable answer is a report produced in seconds, not a week of cross-referencing. That requirement should shape the data model from the first day: every completion recorded against a named person, a specific course version, and a date you can stand behind. Teams that treat reporting as a later feature almost always find they did not capture something they now need, and no amount of clever querying recovers a fact that was never stored.

Accessibility is not optional

An LMS has a duty that many systems do not: learners genuinely depend on it, and some of them use assistive technology. A learner who relies on a screen reader, keyboard navigation, or captions is not an edge case to handle later — they are a person you are contractually or legally obliged to teach. In the EU, accessibility requirements increasingly apply to exactly this kind of service, and beyond compliance it is simply the right baseline for a system whose whole purpose is to give people access to knowledge.

This has a direct engineering consequence. Accessibility is cheap when it is designed in from the first screen and ruinously expensive when retrofitted. Mature LMS platforms have already invested heavily here, which is one more reason a custom build carries a hidden cost: you inherit the entire accessibility obligation, and meeting it properly across every quiz type, video player, and navigation flow is substantial work you must budget for honestly.

It is also work that never quite ends, because every new interaction you build is a new surface that must be reachable by keyboard, legible to a screen reader, and usable without relying on colour or sound alone. That is manageable for the one bespoke component that justified your build, and unmanageable if you have quietly recreated an entire platform. It is one of the strongest practical arguments for keeping the custom part small: the smaller the surface you own, the smaller the accessibility burden you must carry forever, and the more of it you leave to a platform that has already done it well.

Integrations, mobile, and where to start

An LMS rarely lives alone. It needs single sign-on so learners use their existing company login rather than another password, and it often needs to talk to an HR system so that joining a team, or a role changing, automatically enrols someone in the right training. These integrations — SSO, HR, sometimes a CRM or a certification registry — are frequently where the real project lives, and they are far easier against a platform with mature, documented connectors than against a custom system where you build each one by hand.

Mobile and offline access matter too: people learn on phones, on commutes, in places with no signal, and a course that only works at a desk on good wifi excludes a real part of your audience. All of this argues for the same discipline as every other build — start narrow. If you have genuinely outgrown an off-the-shelf LMS, do not rebuild the whole thing; identify the one part of the learning experience that is truly yours, build only that, and integrate it with a proven platform for courses, standards, and reporting. A short assessment is the right first step: it separates what Moodle or a commercial LMS already gives you from the narrow slice worth building, checks the accessibility and integration obligations honestly, and gives you a costed plan before you commit to owning an entire platform.

Outgrown your off-the-shelf LMS?

A fixed-fee assessment separates what Moodle or a commercial LMS already gives you from the narrow slice worth building — with accessibility and integrations checked honestly.

Book an LMS assessment