Why one vocal coach makes $300–400 a month from cancellations — and most music teachers don't
A close reading of one Capterra review, one ClaraSchumann forum quote, and one C&S Music blog post. Why the policy text doesn't recover money, and what does.
In September 2018, a vocal coach named Brittney T. left a review of the Fons billing app on Capterra. One sentence in it has been doing more work in my head, for longer, than any other line in the music-teacher operator corpus:
"I honestly make $300–$400 from cancellations a month that I would not have been paid prior."
Read that twice. She is not saying her cancellation policy changed. She is saying the enforcement changed, and the difference between her two regimes — same studio, same families, same 24-hour rule — is somewhere between $3,600 and $4,800 a year. For a vocal coach charging $80 a lesson that's the equivalent of forty-five lessons she had previously been donating to families who cancelled at the last minute and then waited for her to write the awkward email she never wrote.
I read that review eighteen months before I wrote the first line of Segnoly. I'd been working through Capterra reviews of every billing tool that markets to music teachers, plus a back-archive of Piano World, Violinist.com, and parent-side complaints on Mumsnet — about 600 threads in total. The pattern that kept turning up wasn't about policy text. The teachers who had a written 24-hour policy and the teachers who had no written policy at all were losing roughly the same amount of money on late-cancels. The teachers who had a written policy and an automation that fired the charge without their finger on the trigger were the ones recovering it.
This is the part most billing tools get wrong, and it's the part I want to write about specifically.
What the policy text doesn't do
Open ten music-studio websites. Eight of them will have a cancellation policy somewhere on the enrollment form. It will say something close to "lessons cancelled with less than 24 hours notice are charged in full." That clause is doing zero work for those eight teachers, and you can prove it with a different forum quote.
Christine Hermanson, who runs a private studio and writes the C&S Music blog, has a post titled How my Private Lesson Contract saved my Sanity. Two sentences in it tell the story:
"I agreed to teach for a family who (I later discovered) didn't feel the need to cancel a lesson until 5 minutes before it started."
"I lost a lot of money from that family at the last minute."
Hermanson had a contract. She wrote about it specifically, called it the thing that "saved her sanity," and published the template. She still lost a lot of money, at the last minute, from a family that cancelled five minutes before the start of every lesson. The contract was a piece of paper. The contract didn't generate an invoice line. The contract didn't auto-charge. So when the parent cancelled at 3:55pm for a 4:00pm lesson, the next thing that had to happen was Christine sitting down at her kitchen table after a 12-hour teaching day to write an email that explained — to a family she liked — that she was charging them for a lesson they didn't take.
Almost no one writes that email. Or rather: they write it once, the family pushes back politely, and they never write it again. Missbelle, on Piano World, called the dynamic plainly:
"if you bend, you will be asked to bend more and more"
— Piano World, "Dealing with a parent who never ever ever pays on time"
The bending is not a personality flaw. It's a workflow problem. The teacher who has to manually decide, every Tuesday, whether to enforce a policy on a specific family is the teacher who will not enforce it on every specific family. The teacher whose software has already created the invoice line by the time she opens her laptop on Wednesday morning is the teacher whose policy actually exists.
This is what I think the listicles miss when they tell you to write a clear cancellation policy and "communicate it firmly." A clear policy that you have to enforce manually is a tax on your evenings, and you will pay that tax by waiving the policy.
The thing that's actually different about Brittney's $300–400
I want to push on Brittney's review one more time, because the specific thing she is describing is small and easy to miss.
Brittney was using Fons. Fons takes a card on file at enrollment and runs the late-cancel charge on the schedule the teacher set up — within the cancel window, the lesson auto-bills. The teacher does not see a "send invoice" button. The teacher does not write an email. The parent gets a receipt that says "Lesson — late cancellation — $80" with the same matter-of-fact tone as a receipt from a dentist who didn't see them.
Compare that to the workflow in any general-purpose invoicing tool — QuickBooks, Wave, Stripe Invoicing on its own, the built-in invoicer of two of the more popular music-school CRMs. In all of those, "charge for a late-cancel" is a multi-step manual flow. You mark the lesson cancelled. You decide whether the cancel was inside or outside the window. You go to the invoicing screen. You add a line item. You click Send. Each of those steps is a place where the teacher can stop, reconsider, decide it's not worth it for this family this time, and lose the $80.
Multiply $80 by the four-to-five times a month it happens in a 25-student studio and you get Brittney's number. The difference between $0 and $400 is not the policy. It's the absence of a click.
Chris H., on Piano World in July 2007, ran the same numbers from the other direction:
"Over the year these missed lessons had cost me the price of a decent holiday."
"I spotted one student in town the same evening of their lesson. They were not ill."
— Piano World, "Advice on no show or cancellation policies", Jul 2007
A decent holiday is roughly $1,500–$2,500. The student who wasn't ill is the same student Christine Hermanson described, the same family Brittney would auto-charge, the same calendar leak Missbelle warned about. The amounts are stable across two decades of forum posts because the underlying mechanism — a parent's tolerance for friction is much higher than a teacher's tolerance for awkward billing — is stable across two decades of music studios.
In the same 2007 thread, ClaraSchumann wrote the line that put a bow on it:
"Make-ups and no shows probably drive more people to quit teaching lessons than anything else."
If that's true — and a year of reading the corpus convinces me it is — then the most important feature in a music-teacher billing tool is not the invoice template, the Stripe integration, or the calendar UI. It's whether the late-cancel charge requires a teacher click.
What this looks like in Segnoly's code
Segnoly stores the cancellation policy as JSON on the studio's settings row. The shape, in db/schema.ts, looks like this:
{
"lateCancelHours": 24,
"chargeLateCancel": true,
"chargeNoShow": true,
"allowMakeup": "outside_window",
"makeupExpiresDays": 60
}
A teacher edits that once, in components/settings/policy-form.tsx. Five fields, plain English labels, defaults that match what 80% of the studios in the corpus have written down somewhere. After save, the teacher does not interact with the policy again.
lib/policy.ts:parsePolicy parses the JSON into the runtime view. The function next to it, decide, takes a lesson — its scheduled start time, its current status, the cancel timestamp — and returns one of three outcomes: attended, late_cancel, or cancelled. The decision is made off lateCancelHours. If a parent cancels 26 hours out, the lesson is cancelled and no charge fires. If they cancel 23 hours out, the lesson becomes late_cancel and the policy says to bill it.
That decision is plumbed directly into the billing path. lib/invoicing.ts filters the lessons to bill on the next invoice with this single line:
.filter((l) =>
l.status === "attended" ||
l.status === "late_cancel" ||
l.status === "no_show"
);
When the studio's monthly invoice generator runs (or when a teacher closes out a pack on lib/scheduling.ts's cancel-window boundary), the late-cancelled lessons are already in the bill. The teacher does not see a confirmation. The teacher does not get a "are you sure you want to charge $80?" modal. The parent gets a receipt that lists the lesson, the date, and the reason — Late cancel (<24h) — in the same neutral tone as the lesson the kid actually took.
This is the click that doesn't exist. It is, in my reading of the corpus, the only feature in the entire late-cancel workflow that matters. Everything else — the policy form, the email templates, the receipt copy — is downstream of whether the teacher has to be present for the charge.
What this means if you're shopping for billing software
There's a version of this post that ends with a checklist of five things to look for. I'm not going to write that version, because the checklist has one item and writing four more would dilute it. So, one item:
When a parent cancels a lesson inside your cancel window, does the charge appear on the next invoice without your involvement?
That's it. If the answer is yes, you have Brittney's $400. If the answer is no — if the workflow involves a "review and send" step, or a "convert to invoice" step, or a "billing approval" inbox — you do not have Brittney's $400, regardless of what the marketing page says about "automated cancellation handling."
I'll say the obvious thing: I built Segnoly to answer that question with yes. The policy lives in studio_settings.cancellation_policy_json, the decision lives in lib/policy.ts:decide, the charge plumbs into lib/invoicing.ts automatically, and the cancel-window logic — what counts as inside the window, what counts as outside — is in lib/scheduling.ts. The teacher's job is to set the five-field policy once. After that, the software's job is to never make the teacher write the awkward email a second time.
Brittney didn't write that review because Fons had a great UI. She wrote it because the click that used to live in her week stopped living in her week, and the money that used to live in the gray zone between her policy and her conflict-avoidance started showing up in her account. The mechanism is simple. The mechanism is also, in 2026, still missing from most of the tools that market themselves to private music teachers.
If the late-cancel charge in your current tool requires you to click a button, the gap between you and Brittney is that button. Reading her review is a five-minute exercise. Looking at how your current tool handles a Tuesday 3:55pm cancel is a ten-minute exercise. The math you do after those fifteen minutes is the rest of the post.
Building Segnoly — billing and automation for independent music teachers. The Capterra review is real, the design choices in this post are how the software actually works, and the waitlist is open for the first cohort.