Let’s Get This Party Started.
I want to start by saying we didn’t plan any of this, LOL, which is honestly probably the real subtitle. I’ve been doing audio and building software for something north of thirty-two years now – mastering, mixing, front-of-house for local, touring and national acts back when that paid actual money, 170-plus studio and live projects, the whole thing – and somewhere in there I also became the guy who could make the computer do the thing nobody else on staff could figure out, which is a dangerous skill to have, because eventually somebody hands you both jobs at once and calls it efficiency, with zero raise, just longer hours.
M Media existed for years as basically “me, building software and doing session work, with a company name attached to it.” At some point it turned into a plugin company, and I genuinely could not tell you the exact day that happened. What I can tell you is why it stuck: building a compressor that actually sounds right is the same problem as mixing a song that actually sounds right, it’s just that instead of fixing one song you’re fixing it for everyone who ever loads the plugin, forever, which is either the most satisfying thing I’ve ever done or the most stressful, depending entirely on which week you ask me. Usually it’s both, in the same week, sometimes in the same afternoon.
This is not a tutorial. If you came here to learn how to build a plugin or plugin company, I don’t think that document exists, and if it does I definitely haven’t written it, because I definitely haven’t figured it out yet either. What I’ve got instead is a pretty complete record of the ways this can go sideways, because it keeps going sideways, and somehow the company is still barely standing, and I think that second part is the only part worth reading for.
The Pricing Whiplash
For a while we ran a real tier structure – free stuff at the bottom, $19-29 in the middle, $39-69 up top for the flagship stuff. It made sense on paper. It matched what the plugins actually did.
Then August happened. Summer doldrums, sales flat, and I made the call to collapse the whole thing to a flat $19/$29 across the entire catalog, no exceptions, because we needed volume at a price point people would actually hit “buy” on without thinking about it. That’s not a strategy I’m proud of in some abstract “great business school case study” sense – it’s a strategy I made because the other one wasn’t working fast enough and I needed something that would.
I broke my own rule almost immediately, for what it’s worth. Lake Ontario has a full Vari-Mu compressor AND a complete 4-band EQ per channel in it, is magnificent sounding and pricing that at $19 or $29 felt like giving away actual engineering for free. So it launched at $39, and when I got pushback on that – “isn’t this supposed to be flat-tier now?” – my answer was honestly just, “maybe it should be $49 eventually, but I’d rather make cheaper sales than no sales.” That’s still true. I’ll probably raise it. Not yet.
The Discoverability Gap
Here’s the number that actually keeps me up: we need to sell somewhere around 15 plugins a day to be where we need to be. We average about 2. Some days we get 10, we think we’re on our way, then crickets. Enjoy those “10” days.
Reframe that in dollars and it’s worse, not better – we need something like $300 a day in sales, and some weeks we’re closer to pulling $300 total. Yeah. That’s not a rounding error, that’s a business that needs a real fix, not a pep talk.
The thing I want to be honest about is that the fix isn’t “make better plugins.” I’ve had this confirmed to me more than once now, by people whose opinion I trust: the plugins are fine; good really. Some of them are genuinely superb, all of them extremely useful. The problem is few know they exist and we aren’t building AAX yet, because they are far from a cheap date, so professionals/pro-tools users either use Blue Cat and run our stuff or not at all. Discoverability is the actual crisis though, not quality, and those require completely different solutions, and for a long time I was solving the wrong one.
The Piracy Wake-Up Call
Found out in June that we’d been cracked. Not “somebody might have,” found it, confirmed it, two licensed plugins circulating with the protection stripped off. What fun!
The instinct is to go full lockdown – separate demo and licensed builds, harder walls, more friction for everyone including your actual paying customers. We looked hard at that and rejected it fast, because the operational cost of maintaining two separate build paths per plugin, forever, across three platforms, is a tax that gets paid by us on every single release whether or not it stops anyone, and the people cracking software target the licensed binary specifically. That fight doesn’t end because you added a wall, it just moves the wall and makes it thicker.
What we did instead: real Ed25519 signing, and demo builds that go silent for a couple seconds every thirty seconds instead of pretending to be full versions, and a token baked into every activation that carries the customer’s email and domain – so if a cracked copy does leak, it leaks with a return address on it. Not bulletproof. Nothing is. But it’s a defense that doesn’t cost me anything on the days nobody’s trying to steal from me, which turns out to matter a lot when you’re a small shop and every hour spent on defense is an hour not spent building the next thing.
The Microsoft Email Black Hole
This one is almost funny, if you squint.
Our hosting IP got blacklisted by Microsoft at some point – Outlook, Hotmail, Live, all of it, gone, every email from our domain landing nowhere. Bouuuuuuunce. Not a configuration mistake on our end, an actual IP-level block. So I did the normal thing: filled out Microsoft’s delist form.
It relisted us within 48 hours. Every time. The automated review kept coming back denied. DENIED MUTSCHLER, YOU SUCK.
So I tried to escalate to an actual human, and this is the part that’s funny: I had to send that escalation from a personal Gmail account, because I couldn’t email Microsoft’s own support system FROM my own domain, because Microsoft had blocked my own domain. Abuse, indeed. I was locked out of asking the people who locked me out why they’d locked me out, using the exact channel they’d blocked.
We built around it in the meantime – the download gate detected a Microsoft email domain and just skipped the confirmation step entirely, handed over the download, keeps the address on file. I don’t care, here’s your plugin, thank you, drive through. We couldn’t market to those people yet, but at least they got the plugin they came for. It’s a patch, not a fix. The real fix is still sitting in a support queue somewhere. In the meantime we got Amazon SES going, wired everything up to them, all is as it should be. My standard line for decades was “Email is where marketing campaigns go to die.” Guess who’s lifeline is now 98% dependent on email? Fuck. We’re getting into social media, of which I am no stranger to, I can doomscroll insta with the best of them, but now I have to get busy on that as well. Can I have plugins on OnlyFans?
The LTO Flag Incident
Small thing. Huge blast radius.
Windows builds link-time-optimize just fine with the flags JUCE recommends out of the box. Nobody thinks twice about it, because on Windows it’s genuinely fine, it’s been fine for every plugin we’ve shipped. The problem is when you’re standing up a new plugin’s macOS build and the fastest path is to copy the Windows CMakeLists.txt as a starting point and edit it down – and if you don’t specifically remember to strip the LTO flags, they ride along, and they break the macOS build in a way that doesn’t announce itself clearly, it just fails.
That happened on several at the beginning. It cost real time chasing something that had nothing to do with the actual plugin and everything to do with a flag that should never have crossed platforms in the first place. It’s the reason every macOS template we build from now on has a comment sitting right where the flags would go, explaining exactly why they’re not there. Not because I think future-me will forget the lesson. Because I know future-me will forget the lesson, and the comment doesn’t have that problem.
The Accidentally-Deleted Constant
This one’s small and I still think about it because of how quiet it was.
Mid-session, tuning VU meter constants by hand in the IDE on Howdy Compressor, one line – one single constant controlling the right channel’s needle swing – just didn’t make it back in after an edit. Not deleted on purpose. Just gone, the way a stray keystroke in the wrong spot takes something with it and you don’t notice because everything around it still looks normal.
Windows wouldn’t compile. Undeclared identifier, right where the constant used to be referenced twice. Caught it before touching macOS at all, because the rule is zero breakage before you move to the next platform, and that rule existed specifically so a mistake like this gets caught in the cheapest possible place – one platform, one build, five minutes – instead of the expensive place, which is three platforms deep with a release deadline breathing on you.
The BinaryData Ghost
I want to talk about this one because it’s not a one-time mistake, it’s a recurring one, and recurring mistakes are the ones that actually teach you something about how you work.
JUCE bakes assets into the binary at build time. If you change an image or a sprite sheet and then just run an incremental build, it will, sometimes, silently keep using the old asset. The fix is simple – reconfigure before you rebuild, verify the binary data actually recompiled, not just that the build finished without errors. I wrote that lesson down after the first time it bit us.
It bit us again anyway. Different plugin, same failure, despite my note sitting right there saying “this will happen, here’s the fix.” Turns out knowing a lesson and having it become reflex are two different states, and the gap between them is exactly where this bug lives. So now it’s not just written down once, it’s written into the actual workflow document as a mandatory step, at the exact point in the process where the temptation to skip it shows up. Documentation you have to actively ignore to make the same mistake again is a lot more useful than documentation you can just forget exists.
The Billing Block Disguised As A Hang
Right in the middle of a build push, a macOS CI job just… sat there. No progress, no error, a step frozen for minutes on a runner that should take fifteen. Every instinct says code problem – bad flag, bad dependency, something we broke.
It wasn’t code. Buried in the run annotation: the job never started because a payment had failed. Not a build failure. A billing failure wearing a build failure’s clothes.
“Jfc. Man. It’s going to be a long month with no budget,” is the exact thing I said out loud when I found it, and that’s not really a line about CI, is it. That’s the whole discoverability-gap chapter showing up uninvited in a place I wasn’t expecting it – a pipeline that doesn’t care how good the plugin is, it just needs the invoice paid. Fixed the billing, reran the job, full green in minutes. The code had been fine the entire time. The business hadn’t.
Read. Every. Line.
I keep a real workflow document for how plugins get built here, every phase, every platform, every reason behind every rule, because I got tired of relearning the same lessons twice. I am clearly insane, because I keep trying the same things over and over and expecting a new outcome. It’s long. It’s supposed to be long. The length is the point – it’s every mistake we’ve already made, written down so we don’t get to make it again for free. So, yeah, it’s long.
Somewhere in that document is a rule about how bundle identifiers get formatted on macOS versus Windows, and at one point that rule got second-guessed – two other shipped plugins didn’t follow it, so the conclusion was “maybe the documented rule is just stale.” I pushed back on that hard, because “two examples disagree with the rule” and “the rule is wrong” are not the same finding, and the difference between them is exactly the kind of thing that document exists to settle. Read through it. Every line. The reasoning’s in there. We follow every step, not the steps that feel right that day.
That full re-read surfaced something else, too – a step that had actually been skipped entirely a few plugins back, unrelated to the original question. That’s usually how it goes. You go back to check one thing carefully and you find the thing you weren’t looking for. It’s the best argument I’ve got for why “read the whole document” beats “I’m pretty sure I remember what it says,” every time.
Where We Are Now
Twenty-four plugins live as of this week. West Coaster and Howdy Compressor just launched, bundled together for nine dollars for one weekend, because sometimes the fastest way to get in front of new ears is to make the math impossible to ignore. The tape machine line is next – more machines coming behind the free one that’s already out – and the $300-a-day gap is still real, still the thing I think about first every morning, not solved, just being worked on one release at a time.
None of the calamities in this thing stopped anything. That’s the actual lesson, if there is one – not that we found some trick to avoid the nightmarish stuff, because we didn’t, it just kept happening in new shapes. The only trick, if you can call it that, is writing every single one of them down the moment they happen, so the next one is a little cheaper than the last one. Some weeks that’s the whole win. Most weeks, honestly, that has to be enough.
I think the real trick to all of this is simply not giving up, although I think about it more often than I’d like to admit. What if I got a real job somewhere? Good money, health insurance, paid time off, and some faint approximation of security. Plugins could go back to being a hobby. Audio could become fun again. I could stop waking up every morning already doing the math.
That would be the sensible move.
The problem is that this is the work I actually want to do. It uses every strange piece of the life I’ve built: thirty-two years of audio, musicianship, decades of software, design, writing, engineering, and the stubborn conviction that I can make the thing in my head exist if I stay with it long enough. There are not many jobs that need all of that from one person. This one does.
So yes, I still dream of taking the sensible job. Bills do not accept artistic conviction, and CI runners apparently don’t either. But getting a job and giving up are not the same decision. One pays for the other. One keeps the lights on while I keep building. But even that window has closed; it’s a different world.
I don’t know whether M Media eventually becomes the company I believe it can be. I know the plugins are good. I know more people need to hear them, then they would understand. I know we need fifteen sales a day and we’re currently getting two. 15? I could take my family on vacation? There is no inspirational quote that makes those numbers less brutal. Hang in there, buddy! 😀
Tomorrow, though, I’ll get up and try to make it three.
Then four.
That may be how not to build a plugin company.
It may also be how one gets built.