Work

Code Ninjas

Live
Country
Canada
City
Richmond Hill
Sector
Education
Year
2025

A custom student management and revenue intelligence system for a coding school. Built so the books could finally tell her what the bank balance was hiding.

The Problem

The bank balance kept growing. So did the liability

Code Ninjas Richmond Hill teaches kids to code through a belt progression. Contracts are collected up front. On the books, day one of every contract puts cash into the asset column and an equal amount into a liability called deferred revenue. Recognized revenue stays at zero until sessions are delivered.

Close contracts faster than you deliver and the deferred revenue liability builds faster than recognized revenue. The bank balance flatters. The income statement, properly drawn, says something different.

We were brought in to track lessons. We surfaced a balance sheet exposure the owner didn't know was there.

The Impact

Brought in for lesson tracking. Came back with the real P&L

350 students
Reconciled
Hours, sessions, and payments tied together in one system, in real time.
Profitability gap
Identified
Cash receipts looked healthy. Recognized revenue, after the cost of borrowing, did not.
~30%
Of revenue, pivoted into camps
Once deferred revenue was visible, the answer was clear: short delivery cycles, recognized in full at delivery, no liability tail.
Revenue per instructor-hour
Belt-grouping engine. Same teaching, half the labor cost. The build paid itself back.
Demo 1 · The Cash Illusion

Cash on day one. Liability for six months

A typical 6-month contract is $899 paid up front, in exchange for 30 hours of teaching. On day one, the school records cash on the asset side and an equal liability: deferred revenue. Recognized revenue is zero. Each session delivered transfers roughly $30 from the liability to the income statement.

One contract · $899 · 6 months · snapshot at month 4
Cashasset
Recognized revenueP&L
Deferred revenueliability
The $899 was collected on day one. By month 4, only two-thirds has been earned. The rest sits as a liability on the books. Cash overstates earnings by the deferred revenue that hasn't been recognized yet. Now apply this to every active contract.

Across hundreds of active contracts at different points of delivery, the aggregate deferred revenue is the school's real obligation. Standard SaaS books the cash receipt and stops there. The owner is paying interest on a number she can't see.

Demo 2 · Belt Grouping

Same revenue. Half the labor cost

Eleven kids, six instructors, mostly running one or two students each. Labor cost per delivered hour was running double what it needed to be. Once the system could see every kid's current belt in real time, the consolidation became obvious.

Instructors needed
66
Labor cost / delivered hour
$270$270
Kids per instructor
1.81.8
Before · 6 instructors, mixed assignments
Instr 1LiamTheoMixed
Instr 2MiaAlone
Instr 3AvaEmmaMixed
Instr 4SamEli
Instr 5NoahAlone
Instr 6LeoZoeKaiMixed
After · 3 instructors, grouped by belt
White Belt1 instructor
Yellow Belt1 instructor
Blue Belt1 instructor

The owner didn't ask for this. The data was already there: the system knew every kid's current belt in real time, and the grouping move followed directly. SMEs don't need software that stores their data. They need software that understands their business well enough to surface the move they hadn't considered.

Demo 3 · The Hours Bank

Every session logged. Every hour drawn down

Each contract creates an obligation: 30 hours of teaching owed. The hours bank tracks the obligation as it draws down, session by session. Revenue is recognized only as hours are delivered. The deferred revenue liability shrinks at the same time and by the same amount.

Alex Chen
6-Month Package · $899 · 30 hours
Hours remaining
30.0
Revenue earned
$0.00
Hours bank · 30 sessions
Session logHours
350 kids. 10 instructors. Without per-student tracking, the obligation never drew down on the books. Which is exactly why the bank balance and the P&L told completely different stories.
What Was Built

One system that finally tells the truth

Lesson tracking with belt logic
The curriculum groups lessons by belt. Within a belt, order doesn't matter. We rebuilt the tracking logic to reflect that. Any lesson within a child's belt counts as progress.
Instructor grouping engine
The system surfaces which kids share a belt on any given day, and how many sit within the 5-kid interactive threshold. Instructors see their groups. Owners see utilization.
Realized revenue model
Every transaction is mapped to a child. Every session draws down the deferred revenue liability and recognizes the corresponding revenue. For the first time, the owner could see what the business had actually earned, month by month.
Hours bank, per student
Hours purchased, hours used, hours remaining. Visible in real time. The system tracks against it automatically as sessions are logged.
Camp revenue tracking
Camps for summer, March break, Christmas, Thanksgiving, and long weekends are tracked separately and recognized in full at delivery. They run at higher margin and became a strategic focus once the financial picture cleared.
Transaction reconciliation
Payments, refunds, sibling discounts, first-month promotions, and multi-child accounts are reconciled automatically. Edge cases like duplicate names and founding family deals are handled with override logic.
What You're Actually Paying For

Off-the-shelf would have tracked attendance. It wouldn't have found the problem

A standard student management tool gives you a session log and a payment record. Useful. It doesn't answer the question that matters: how much revenue has the business actually earned this month?

That question lives at the intersection of software and accounting. We work there.

Generic SaaS (Jackrabbit, iClassPro, etc.)moofa custom build
Session loggingStandard attendanceLesson-level with belt logic
Revenue modelCash booked, no recognitionDeferred revenue drawn down per session, real time
Grouping logicNoneAutomatic, belt-based
InsightWhat happenedWhat it means
You ownA subscriptionThe system, the data, the logic

The honest take

A generic platform would have fit 80% of this operation. The 20% it didn't fit was the realized revenue model, the belt-based grouping, and the multi-account reconciliation. That 20% revealed a balance sheet exposure and unlocked a strategy the owner hadn't considered.

That 20% is where the business lives.

Frequently Asked Questions

Three months from kickoff to live, covering lesson tracking, belt-grouping logic, the hours bank, and the realized revenue model.

The owner was running strong on paper: lots of contracts, healthy bank balance. The realized revenue model showed a deferred revenue liability accumulating faster than recognized revenue. After the cost of borrowing, the business was running at a loss. Knowing that changed how she priced, scheduled, and prioritized camps.

Standard platforms book the cash receipt and stop there. None of them carry the offsetting deferred revenue liability through to recognition the way this business needed: per child, per session, per transaction, with refund and discount logic. That had to be built.

The curriculum groups lessons by belt level. Within a belt, order doesn't matter. The system detects which belt each child is on, then surfaces scheduling opportunities when multiple kids share a belt. One instructor can run up to 5 kids interactively. Beyond that it becomes a classroom, which isn't the business model.

The school uses a third-party platform called Dojo for student access and some admin functions. We integrated with it, pulling lesson data and cross-referencing with our own records, rather than replacing it entirely.

Any education business running subscriptions or package-based billing where revenue recognition matters. Tutoring centres, music schools, sports academies, language programs, dance studios. If you're closing contracts and feeling good about your bank balance without knowing what your books actually say, this conversation is for you.

You do. You get the source code, the database, and the logic. If we stopped existing tomorrow, your system keeps running. No vendor lock-in.

Running an education business on contracts you can't see through?

If you're closing packages, taking deposits, or running subscriptions and you're not sure how much revenue you've actually earned, that's the conversation we have well.

Tell us what you're dealing with

Made in HK · © 2026