The Excel-and-WhatsApp stack is free until you count it: reconciliation hours, receipts nobody can find, groups where fee reminders sit next to homework memes. Moving off it is a two-week project when it is run as one.
Every fee entry typed twice, once in the sheet and once as a message. Marks compiled per test per batch, by hand, at midnight. A parent asking for a receipt from March and the office scrolling a chat to find it. None of these is dramatic; together they are a part-time job the institute pays for in evenings. And the stack has no memory: when the person who maintains the sheet leaves, the institute's operational knowledge gives notice with them.
Three months in, the signs of a move that stuck are unglamorous: the office closes fee day without a late evening, a parent's receipt question is answered in one search, the owner reads collections and dues from a phone instead of asking anyone, and the month-end reconciliation is a check rather than an investigation. Teachers enter marks once and parents hear the same day. None of this is a feature demo; it is the absence of the Tuesday-night compilation ritual, and that absence is the entire return on the migration.
Migrations fail from scope, not software: an institute tries to move fees, attendance, tests, enquiries and content in one weekend, drowns, and retreats to the sheet. The moves that stick pick the bleeding artery first, almost always fees, run it clean for a month, then add the next module. Each step pays for the next one's patience.
Students, batches and opening balances from your existing sheet. The import is the sheet's retirement party.
Every new collection lands in the system with an instant receipt. The old sheet stays open, read-only, as the safety net.
Daily attendance per batch and one test's marks entered where they will live. Parents start receiving updates from the same records.
System collections against the bank. The first clean match is the moment the sheet is archived, not deleted, archived.
Enquiries, timetables, materials. Each added onto a base that already works, not into a launch weekend.
Yes, at a month boundary: import students, batches and opening balances, run one parallel month where the old sheet stays readable, and stop updating the sheet only after the first clean reconciliation. Term boundaries are calmer, but a controlled mid-session move beats another term of leakage.
Class groups usually survive as social spaces; what moves is the official traffic. Fees, attendance, marks and announcements go through the system where delivery is recorded, and the group stops being the institute's system of record, which is the part that was hurting.
The office adjusts in days because receipts and lists get easier immediately. Teachers take a test cycle to trust marks entry. The consistent report is that nobody volunteers to go back, because going back means retyping.
One named person with the authority to say the sheet is closed, usually the office manager or the owner, plus a vendor contact who has done this before. Migrations with a single owner finish in weeks; migrations owned by everyone are still running at year-end.
A system of record. The free stack stores fragments, sheets, chats, memories, and reassembling them into an answer is the hidden salary you already pay. Software earns its fee when the receipt, the reminder, the attendance mark and the parent update come from one record that nobody retypes; whether that trade is worth it at your size is exactly what the parallel month reveals.
Student names against admission forms, one phone number chosen per family, batch assignments as they actually are, and the true pending balance per student. An hour of cleaning before import saves a term of corrections after.
Bring one real batch and your actual fee sheet to the demo; leave with the import mapped.