Problems & solutions · LMS

Language School Software Problems: The 7 That Cost Real Money, and How to Avoid Them

Language School Software software overview illustration showing common problems and fixes.
The short answer

The most expensive failure in this category is modelling enrollment as a subscription against a student rather than as a seat in a cohort. Everything downstream breaks from there. A student who drops in week 3 and moves to a later cohort leaves a seat your system does not know freed up, a payment that does not follow them, and a corporate client whose funded places no longer reconcile. Someone then rebuilds the truth in a spreadsheet every month, which is the job you were trying to eliminate. Meanwhile the cohort stays overfull, students get phoned and asked to move, and each of those calls is a reason to reconsider re-enrolling. At 1,200 students averaging $1,400 a cycle, a few points of lost re-enrollment is roughly the cost of the build itself, every year.

Why does enrollment get modelled as a subscription so often?

Because payment tooling pushes you there. Stripe Billing and similar products model a recurring charge against a customer, and that fits a gym or a software product perfectly. A language school looks close enough at a glance that a generic development team will build it that way without asking.

Your revenue is not monthly, it is cycle based, and the unit that carries the money is a place in a specific group. A student pays $1,400 for a ten week cycle, or four installments, or their employer pays for six of twelve people on a corporate contract while the others pay themselves, or they froze for a cycle because of a work trip and are owed a credit. None of that is a subscription against a person.

The fix is to make the seat the unit before any code exists. A seat in a cohort has a price, a payer who may not be the student, a payment plan, and a state: held, confirmed, active, frozen, transferred, refunded. Payments attach to seats, and a transfer moves the paid balance with the seat. Corporate contracts become their own object with a funded seat pool, a purchase order number, an invoicing cadence and a named contact who receives the attendance report that justifies renewal.

What goes wrong when you migrate five years of student and level data?

The volume is never the problem. The quality is. Level was a free text field, so somebody typed variations on B1 and B2 several hundred times, including things like high A2. Placement scores were recorded inconsistently across three instruments. Attendance exists as percentages with no underlying session records. Payments were reconciled by hand and no longer tie to a cohort, so revenue by cycle cannot be reconstructed with confidence.

The second problem is students who exist several times. Someone enrolled under a passport spelling, returned two years later with an email address, and the two records carry different levels and separate payment histories. Merging them is a judgement call per student, not a rule, and getting it wrong produces a progression history that never happened.

In our builds, data migration in this category routinely runs 15 to 25 percent of a first release, and it is always underestimated. The way to avoid the surprise is a data audit in week one, before anyone commits to a timeline. Then migrate deliberately: normalise levels against a documented mapping your Director of Studies signs off, bring across active students, current cohorts, open balances and corporate contracts in full, and archive older history as read only records rather than reinterpreting it. Duplicate resolution needs a review queue with a human deciding, before go live rather than as cleanup afterwards.

Why do the payment and messaging integrations break after launch?

Installment failures are the first and most damaging. A payment fails in week 6 of a ten week cycle. What happens next is a business decision nobody makes during the build, so the software makes it by default: the seat stays active silently, or it deactivates and the student turns up to a class they are no longer enrolled in. Both generate a support ticket every week forever. Ask a developer what happens on a failed installment mid cycle, and who gets told, before you sign anything.

Accounting is the second. Revenue recognition across cycle boundaries is awkward, because money received in March pays for teaching delivered in April and May. If the integration pushes cash rather than earned revenue, your accountant rebuilds it in the spreadsheet you were trying to retire.

Messaging is the third and it fails quietly. Re-enrollment nudges and at risk outreach depend on lists, and a list that stops syncing looks exactly like a quiet week, so a cycle goes by without the outreach that recovers students.

The fixes are unremarkable. Make the failed payment path an explicit product decision with a written rule per account type. Reconcile a daily total between the payment provider and your own seat ledger and alert on any difference. Alert on absence for outbound messaging, not just on errors. Keep the payment provider's reference on the seat record, so a refund three months later can be traced without a support conversation.

What happens when visa and accreditation reporting are not covered?

You find out during an audit, which is the worst moment, because the finding attaches to the school rather than to a student. If you take international students, attendance thresholds tied to visa status, enrollment confirmations and hour verification for accreditation bodies are obligations with consequences. Generic tools give you an attendance percentage, which is not the rule your accreditor or immigration authority actually applies over the period they use.

The mechanical failure underneath it is that attendance is captured on paper and typed in on Fridays, so by the time a trend is visible the reporting period is closed. Nobody can tell you on day 12 that a student is heading toward a breach, because days 1 to 11 have not been entered yet.

The fix has two halves. Capture attendance at source, in a teacher app, in the room, in under ten seconds, with an offline queue because basement classrooms have no signal. Then codify the compliance rule with its exact definition and reporting period, run it nightly, and raise a flag while there is still an intervention window, with an audit trail showing who was notified and when. Test a developer's instinct on this: the right answer starts with questions about which authority, what definition of attendance, what reporting period and who is legally accountable. An answer that starts with adding an attendance percentage means they have not built one.

Should you build custom or configure what you already own?

Stay on what you have if you are a single location under roughly 400 active students with fixed term starts. Classe365 or Teachworks will hold your records perfectly well, your Director of Studies can build a dozen sections by hand in a morning, and a custom build would buy a slightly nicer version of a problem you do not have. Spend the money on teachers.

The trigger is not student count, it is whether your operating logic has left the software. The moment your real placement and cohort rules live in a spreadsheet and in one person's head, the school tool has become a filing cabinet, and every additional student makes it worse. At that point you are already paying for custom software, in your Director of Studies' salary, in reconciliation hours, and in the re-enrollments that leak whenever someone gets phoned and asked to move class.

Build when three of these are true. Your Director of Studies spends more than two full days per cycle building the grid by hand. You run continuous intake so there is no quiet week where everything resets. You operate two or more locations with teachers shared across them. Your re-enrollment rate between cycles is a number you cannot explain because the data sits in three systems. You have corporate contracts where the payer is not the student. Or you employ someone whose real function is reconciling the school tool against the payment provider.

How do hidden costs get into the quote?

Four places, and the first is the solver. If your scheduling constraints are simple, cohort building is about a week of work. If you have teacher seniority rules, room equipment requirements, split level classes, travel buffers between sites and per room priority rules, it is a month and it needs tuning against real historic cycles rather than synthetic data. Ask for the solver to be quoted separately against your actual constraint list.

Data migration is the second and routinely runs 15 to 25 percent of a first release. Get the audit before the estimate.

Compliance surface is the third. Reporting to an immigration authority or an accreditor is a rule you must be able to defend, with its own build and test cycle, not a report added at the end. Multi currency and multi country is the fourth, and it turns billing from a component into a workstream. If your locations cross borders, say so in the first conversation, because tax handling, payment methods and refund rules all diverge and none of that is a configuration flag.

What separates a build that works from one that fails here?

The builds that work keep the human in control of the schedule. A solver proposes a grid scored explicitly on first choice placements, second choice placements, unplaced students, sections below minimum, teacher hours utilisation and room utilisation. The Director of Studies drags two sections, the system re-solves only the affected students in under a second, and tells her who she just displaced. Three days becomes an afternoon and the grid is better, because a solver will discover that one extra Saturday morning section rescues nine students who would otherwise have churned.

The builds that fail hand over an algorithm and call it automation. The Director of Studies refuses to use it by cycle two, goes back to the spreadsheet, and the project becomes a filing cabinet with better styling. A team that has shipped this talks immediately about proposal and approve flows, re-solving only affected students, showing who got displaced, and keeping an override log. That log matters more than it sounds, because after four cycles the good overrides become rules and the placement instrument itself gets fixed.

The same principle governs where AI belongs. An after hours placement conversation that probes vocabulary range, tense control and error patterns and produces a draft CEFR sub score breakdown plus a transcript is genuinely useful, and your Director of Studies approves it in about ninety seconds. The approval is what writes to the placement record, and keeping the human in that step is what makes it defensible.

Settle ownership in writing before work starts: full source, repositories, infrastructure accounts and data, handed over in a deployable state with documentation. Any developer who wants to retain ownership or gate you behind their hosting is selling a product with extra steps, which is what you were leaving.

Research & sources

The evidence behind this guide

Independent findings on why this investment pays off. Every link goes to the primary source.

  1. Total US training expenditure rose 4.9% to $102.8 billion; learning management systems were used at 89% of organizations (90% of large, 97% of midsize, 84% of small companies), with average training at 40 hours per employee and $874 spent per learner. Source: Training Magazine (2025) →
  2. Workers can expect 39% of their existing skill sets to be transformed or become outdated over 2025-2030; 77% of employers plan to upskill their workforce, and 63% identify skill gaps as the biggest barrier to business transformation. Source: World Economic Forum (2025) →
  3. In an RCT, the no-show rate was 23.5% for patients receiving a text-message reminder versus 38.1% for the control group - a 14.6 percentage-point reduction (p = 0.04). Source: Clinical Pediatrics / PubMed Central (Lin et al.) (2016) →
  4. Standish's 2015 CHAOS research found roughly a third of software projects (about 36% by the Modern definition) fully succeed on time, on budget, and on scope, with top success drivers including executive support, user involvement, and clear requirements/business objectives. Source: Standish Group (CHAOS Report) (2015) →
Hudson R. · Project Manager · APAC · Sydney

Hudson coordinates APAC projects at Digital Heroes: running stand ups, tracking tickets, chasing decisions and keeping clients informed without burying them in detail. Much of delivery is simply making sure the right question reaches the right person quickly. His posts show what a well run project feels like from inside.

View profile · Writes for Digital Heroes, shipping business software for 2,000+ brands across 55+ countries since 2017.

FAQ

Frequently asked questions

What is the fastest way to tell whether a developer understands language schools?
Ask them to sketch student, placement record, cohort, seat, session, enrollment and payment on a whiteboard before anything is signed. The tell is whether the seat is an object with a lifecycle, because seats transfer, freeze and refund independently of students. A developer who models it as a join table between student and course will hit a wall around month four, when the first mid cycle transfer needs to carry a paid balance to a different group and nothing in the schema allows it.
Our level data is free text going back five years. How bad is that?
Bad enough to change the timeline rather than the design. Normalise levels against a documented mapping your Director of Studies signs off, and expect duplicate students under different spellings and email addresses, which need a review queue with a human deciding rather than a merge rule. In our builds, migration in this category runs 15 to 25 percent of a first release, so commission a data audit in week one before anyone commits to a date. That audit is where the real number lives.
What should happen when a payment fails in week 6 of a ten week cycle?
That is a business decision and it has to be made during the build, not defaulted by the software. Decide per account type whether the seat stays active, whether the student is told and how, whether the teacher is told, and who authorises a hold. Ask any developer this question directly before signing, because a vague answer means you inherit it as a weekly support ticket forever. Keep the payment provider's reference on the seat so a refund months later can be traced without a conversation.
Can a solver really build our cohort grid, or is it a sales promise?
It works as a proposal and approve flow, not as automation. The solver takes your unplaced student pool with preference windows, teacher qualifications and availability, and room inventory, then proposes a grid scored on first choice placements, unplaced students, sections below minimum and utilisation. Your Director of Studies edits it and the system re-solves only the affected students and shows who got displaced. That turns a three day manual build into an afternoon and finds sections that rescue students who would otherwise churn.
How much does the solver add to the cost?
It depends entirely on your constraints, which is why it should be quoted separately against your actual list. Simple constraints are about a week of work. Teacher seniority rules, room equipment requirements, split level classes, travel buffers between sites and per room priority rules make it roughly a month, and it needs tuning against real historic cycles rather than synthetic data. Hand a developer one real past cycle and ask them to reproduce the grid you actually ran before you agree a number.
How do we handle visa linked attendance without getting a finding?
Capture attendance at source in a teacher app, in the room, in under ten seconds, with an offline queue for classrooms without signal, then codify the compliance rule with the authority's exact definition and reporting period and run it nightly. The flag has to arrive on day 12 while there is still an intervention window, with an audit trail showing who was notified and when. Treat it as its own workstream with its own test cycle, because it is a rule you must be able to defend, not a percentage.
We are a single location with 350 students. Should we build?
No, and we would tell you that before quoting. Classe365 or Teachworks will hold your records fine and a Director of Studies can build a dozen sections by hand in a morning. The trigger is not student count, it is whether your operating logic has left the software. When your real placement and cohort rules live in a spreadsheet and one person's head, the tool has become a filing cabinet, and at that point you are already paying for custom software through salary and reconciliation hours.
Where does AI actually help in a language school, and where is it risky?
It drafts well and should not decide. An after hours placement exchange that probes vocabulary range, tense control and error patterns can produce a draft sub score breakdown plus a transcript your Director of Studies approves in about ninety seconds, and the approval is what writes to the placement record. Document extraction for passports and prior certificates works the same way, with a human confirming. An at risk list built on early attendance, homework submission and login recency is useful only if it is short and specific enough that somebody actually calls.
What should I prepare before contacting a software development agency?
A one-page brief beats a 40-page requirements document: the business problem in plain words, who will use the system, the 5 to 10 workflows it must handle, the tools it must connect to, and your budget range and deadline driver. You do not need wireframes, a specification, or technical vocabulary; producing those is the agency's job during discovery. Stating a budget range up front is the single best move, because it gets you honest scoping instead of a quote engineered to win the meeting.
What tech stack should a custom LMS be built on?
A boring, hireable one: React or Next.js on the front end, Node.js or Python on the back end, PostgreSQL for data, and a managed video service like Mux or Cloudflare Stream instead of self-hosted video. The stack matters far less than the enrollment data model and the SCORM/xAPI runtime, which is where LMS builds actually succeed or fail. The red flag is an exotic stack chosen for the agency's own interest that nobody in your market can maintain.
Can a custom LMS handle 10,000 or more learners?
Yes, if scale is a design input rather than a hosting upgrade: enrollment and progress modeled as event-style records, video offloaded to a streaming CDN, and reports served from aggregates instead of live table scans. Most LMS scaling failures trace back to a schema tested at demo size, not to undersized servers. The question to put to an agency: what happens Monday at 9 a.m. when 3,000 people open the same compliance course before a deadline.
Who owns the code when an agency builds my software?
You should, completely, through a written intellectual property assignment that transfers everything on final payment; without that clause, copyright stays with whoever wrote the code by default. Insist that the repository lives in your own GitHub organization from day one and that hosting, domains, and third-party accounts are registered to you. Also check for licenses to the agency's proprietary frameworks buried in the contract, because those can make switching vendors practically impossible even when you own your own code.
What do I need to prepare before contacting an agency about LMS development?
One page with five answers: your learner roles, headcount now and in three years, whether you use SCORM/xAPI content from tools like Articulate or iSpring, the systems it must connect to (HRIS, SSO, payroll), and the one report someone will pull every month. That page gets you comparable quotes instead of guesses, and on Digital Heroes projects it routinely cuts discovery time in half. You do not need wireframes or a technical spec; producing those is the agency's job.
Should we launch an LMS MVP first instead of building everything at once?
Yes. The core loop of enroll a learner, deliver a course, track completion, and pull one report is shippable in 10 to 12 weeks and typically costs 40 to 50 percent of the full roadmap across Digital Heroes builds. Cut gamification, social features, and custom authoring (import SCORM packages from Articulate instead), but never cut the data model, SSO, or content-standard support, because those cannot be bolted on cleanly later.
How many SaaS seats do we need before building custom becomes cheaper?
The crossover usually shows up between 20 and 50 seats on premium tiers. Salesforce Enterprise lists at $165 per user per month, so 40 users cost about $79,000 a year in subscriptions, which is real money against a custom system you would own outright. Run the comparison over three years: if subscription spend beats the build cost plus 15-20% annual maintenance, custom wins on price before you even count workflow fit.
How do I calculate whether custom software will pay for itself?
Divide the build cost by the monthly benefit, where benefit is hours saved times loaded hourly cost, plus subscription fees replaced, plus any revenue the software unlocks. Three staff saving 10 hours a week each at a $40 loaded rate is about $62,000 a year, which pays back a $60,000 build in roughly 12 months. Across Digital Heroes internal-tool projects, 12 to 24 months is the normal payback range, and anything projecting under 6 months usually means the spreadsheet is hiding costs.
What does it cost to keep custom software running after launch?
Budget 15-20% of the original build cost per year, which on a $100,000 system means $15,000 to $20,000 for security patches, dependency updates, bug fixes, and small improvements as real usage reveals what the spec missed. Cloud hosting for a typical business application adds $50 to $300 a month on top. Skipping maintenance does not save the money; in Digital Heroes rescue work, unmaintained systems typically need a far more expensive rebuild within about three years.
What are the biggest mistakes first-time software buyers make?
Choosing the lowest bid, paying more than 30-40% upfront instead of on milestones, skipping a written specification, and having no maintenance plan for after launch. The most expensive of the four in Digital Heroes rescue projects is the missing spec: without written acceptance criteria, done becomes an argument instead of a checklist, and every disagreement resolves in the vendor's favor. Fix those four and you have avoided most of the ways these projects fail.
Who can build a custom LMS software system?

Digital Heroes builds custom LMS software systems for operators who have outgrown the off-the-shelf tools in their category. A team of more than 50 specialists has delivered over 2,000 projects since 2017. Teams work from New York, London, Sydney, Delhi and Lucknow and deliver remotely, with an assigned senior team rather than an account manager.

Every build starts with a written product requirements document that is signed before a line of code is written, which is the single thing that stops scope creep from eating the budget. Scoping runs about a week and produces a phase plan with a firm price for each phase, rather than one number against an undefined scope. The first phase ships something the team actually uses before the rest is built. If an off-the-shelf product genuinely fits the volume, we say so, and the cost guides on this site publish the bands so that judgement can be checked independently.

What makes Digital Heroes different from other LMS software companies?

Four things that competitors in this bracket cannot simply copy. Digital Heroes runs a YouTube channel with more than 2.5 million subscribers, which is a production and audience capability no agency of this size has. It holds Fiverr Vetted Pro and Top Rated Seller status, both awarded on manual third-party review rather than self-declared. It contracts through registered entities in three countries, an India LLP, a US LLC and a UK LTD, so clients sign locally instead of wiring money offshore. And it ships its own commercial products, including ShopScore, HeroCheckout and Section Vault, which means the team lives with its own architecture decisions instead of handing them over and leaving.

Two more that show up in the work. Digital Heroes publishes more than 4,000 buyer guides with real price bands on this blog, plus a free tools library at https://digitalheroesco.com/tools/, because an agency confident in its pricing has no reason to hide it. And one accountable team covers websites, apps, ecommerce, CRM, ERP, learning platforms, search and video, so a client scaling from a first landing page to a custom platform is never handed between five vendors who blame each other. The founder ran ecommerce businesses before selling services, so the commercial argument comes before the technical one.

How can I check Digital Heroes is legitimate before getting in touch?

Verify it independently rather than taking the site's word for it. The YouTube channel is at https://youtube.com/@DigitalMarketingHeroes, the Fiverr profile at https://www.fiverr.com/shreyanshsin261, and the Upwork profile at https://www.upwork.com/freelancers/shreyanshsingh. Client reviews sit on Clutch at https://clutch.co/profile/digital-heroes-0 and Trustpilot at https://www.trustpilot.com/review/digitalheroes.co.in, and the company page is at https://www.linkedin.com/company/digital-heroes-1/.

Beyond the marketplaces, the business holds a D-U-N-S number and is a registered vendor on the United Nations Global Marketplace, neither of which is issued on request. Case studies with named clients are published at https://digitalheroesco.com/case-studies/. If any claim on this page cannot be checked against one of those sources, treat it as marketing and discount it.

Keep reading
let's build

Build something worth launching.

A plan, a team, a timeline, within 24 hours. No decks, no discovery calls. Tell us what you're building and we'll come back with a real scope and a real number.

message us directly · we reply within one business day

mission briefing

Monthly dispatch

Playbooks, real build costs, and what we're shipping. One email a month. No fluff.

visit us

New York HQ

1140 Broadway, Suite 704 · New York, NY 10001

Get directions
Online now

Hey there 👋 How can we help you today?