# Self-hosted LMS evaluation worksheet

Published by PlanSmith, 14 October 2026.
Companion guide: https://plansmith.io/blog/open-source-learning-management-system

Copy this worksheet for each candidate. It contains a test plan, not completed
test results. Use fictional accounts and course material you are allowed to copy.
Keep passwords, tokens and learner personal data out of this worksheet.

## Candidate and requirements

| Field | Your answer |
|---|---|
| Platform, edition and version | |
| Evaluation date and tester | |
| Environment and hosting region | |
| Required plugins/extensions and versions | |
| Number of registered learners | |
| Expected simultaneous learners and activity | |
| Required course-package format/version | |
| Required login provider/protocol | |
| Certificate and renewal requirements | |
| Required separation between organisations/groups | |
| Maximum acceptable downtime | |
| Maximum acceptable data loss | |
| Person responsible for operation and recovery | |

## Trial results

Mark each requirement Required, Optional or Out of scope. Leave the result as
Not run until you have observed it. Use Pass, Fail or Not applicable afterwards;
explain every Not applicable decision. A Required failure blocks selection.

| Check | Requirement | Expected result | Result | Evidence and actual result |
|---|---|---|---|---|
| Course import | | Your selected course opens with its structure and files intact | Not run | |
| Saved progress | | Learner A returns in a new browser session and resumes correctly | Not run | |
| Quiz attempts | | Failed and repeated attempts follow your recorded scoring policy | Not run | |
| Assignment feedback | | The teacher grades a submission and its learner sees feedback | Not run | |
| Private submissions | | Learner B cannot read Learner A's private work or files | Not run | |
| Certificate eligibility | | A passing learner qualifies; a failing learner does not | Not run | |
| Certificate renewal | | Expiry, retraining and any revocation match your requirements | Not run | |
| SCORM compatibility | | The actual package resumes and reports correct score/completion | Not run | |
| SSO and account linking | | Your provider signs the right person into the right account | Not run | |
| Access removal | | New logins and existing sessions follow your documented removal policy | Not run | |
| Organisation boundaries | | An allowed user can read a record; an unrelated user cannot | Not run | |
| Course restore | | All records deliberately included in the backup match saved expectations | Not run | |
| Full-site recovery | | A separate environment recovers the service and required records | Not run | |
| Upgrade rehearsal | | Your course, plugins and integrations work after a staging upgrade | Not run | |
| Expected concurrency | | Your actual learner workload meets the response-time target you set | Not run | |

## Recovery record

Test in a separate practice environment. Do not overwrite the original course
or a live service. A course export alone is not a full-site backup.

| Item | Record |
|---|---|
| Backup date, version and included/excluded data | |
| Safe location of backup and configuration inventory | |
| Target environment, version and dependencies | |
| Expected grades, completion records and file counts | |
| Observed result and evidence location | |
| Recovery time measured from start to verified service | |
| Actual data loss compared with the expected recovery point | |
| Errors, missing records and unresolved dependencies | |
| Tester and next rehearsal date | |

## Twelve-month budget

Use one currency throughout. These blank fields are estimates to obtain, not
vendor quotes. Count each cost once, including any software licence fee.

| Cost | Amount or calculation |
|---|---|
| Setup hours | |
| Setup hourly rate | |
| Setup labour total | |
| Monthly hosting, storage, email, bandwidth and backup services | |
| Monthly operating hours | |
| Operating hourly rate | |
| Monthly operating labour total | |
| Upgrade and recovery hours for the year | |
| Upgrade/recovery hourly rate | |
| Upgrade and recovery labour total | |
| Licence, paid extensions and other annual extras | |
| Year-one total | |

Year-one total = setup labour + 12 x monthly services + 12 x monthly operating
labour + annual upgrade/recovery labour + annual extras.

## Decision

- Candidate chosen, rejected or needing another test:
- Required checks still failing or not run:
- Why this candidate fits better than the alternatives:
- Operational owner and approved annual budget:
- Evidence reviewed by and date:

Do not turn Not run into Pass because another organisation uses the platform.
Documentation establishes a capability; your trial establishes whether the
chosen version and configuration meet your requirements.
