Pinned Tweet
Unpopular opinion:
AI’s worst code doesn’t even come close to the absolute garbage I’ve had to clean up from humans.
Post your worst inherited code story below👇
Rebuilt ClubDJ Pro’s layout for iPhone Duo. Two full decks, waveforms up top, crossfader where your thumbs already are.
Approved for iPhone Duo before I’ve even held one. ClubDJ Pro, ready for Oct 23. 🤞
Working on Numark DJ2GO2 Touch support and full keyboard mappings for ClubDJ Pro today.
Which controller should I map next?
Drop yours below. 👇
Got my first decent TikTok video for ClubDJPro 👀
“Learning to DJ with just my iPad”
Now I need to figure out how to make 100 more of these 😂
Man, Fable 5.1 is losing its mind for me today.
Making all kinds of trivial mistakes across all tasks.
😭
Took a few months off from ClubDJ Pro. This is where the desktop Mac/PC version sits today: stem separation, video mixing, sync, winamp/milkdrop visualizations, smart transitions. If you want to try it, grab it at clubdjpro.com Free to download.
I've been shipping software for 30 years, since back when the internet was a thing you dialed into. Here are the lessons that actually held up, the ones I'd hand my younger self.
Almost every "we should rewrite this from scratch" is a trap. The ugly old code is ugly because it survived real users and real edge cases. Your clean rewrite hasn't met them yet, and it'll get ugly too.
The language barely matters. I've shipped in a dozen of them. The skill that compounds is reading someone else's code and figuring out why they did it that way before you change it. The most expensive bugs I've seen came from confident people who skipped that step.
Deleting code is underrated. Last week I removed a whole background thread I'd written and CPU usage dropped by two thirds with zero lost features. The best change is often subtraction.
"We'll optimize later" is where features go to die. I've watched people ship something so slow it was unusable because later felt safe. Later never came. Know whether you're deferring or just avoiding.
Nobody knows what they're doing as much as they look like they do. After 30 years I still google basic syntax daily. The senior people just got comfortable not knowing things, and that comfort is the actual skill.
The hardest part was never the code. It's deciding what not to build. Every feature is something you maintain forever, so the roadmap you say no to matters more than the one you say yes to.
Your tools will change completely and it won't matter. I've outlived languages, frameworks, whole platforms. Clear thinking, reading carefully, shipping small. Those carried across all of it.
Still at it after 30 years, building DJ software in the open. If this kind of thing is useful, stick around.
In 2010 a single product announcement ended my software business. Not a competitor, not a bad call on my part, just a platform shift I had zero control over. Here's what happened and what it taught me.
Through the 2000s I built and sold DJ software for Windows. Real product, real customers, paid the bills. ClubDJ Pro, a video mixing version, a mobile one. I was the founder and wrote most of the code myself.
Then the iPhone and the App Store happened. Almost overnight the market went from "pay $200 for pro desktop software" to "there's an app for that and it should be 99 cents or free."
I wasn't ready. My software was years of native C++ built for the desktop, and you don't port that to a phone in a weekend. Even if I had, the economics were upside down. The thing I sold for real money was now expected to be nearly free.
The business wound down around 2010. I was bitter about it for a long time, honestly. You build something for years and a decision you had no say in makes it irrelevant. That stings in a way that's hard to explain to people who haven't lived it.
Here's the lesson that took me years to actually absorb. You never own your distribution. The platform does. The store giveth and it taketh away, and anyone whose business depends on a gatekeeper is one policy change away from zero.
So when I started building again, I made a deliberate choice. Desktop software you download and run. No store approval, no 30 percent cut, no gatekeeper deciding if I'm allowed to ship an update. Slower to grow, but nobody can switch it off.
Fifteen years later I'm rebuilding the whole thing. Same product, modern tech, free this time, on my own terms. The market that killed it is the reason it gets to come back different.
Every DJ app that lets you scratch a record is faking it. There's no vinyl, no needle, just math running a few hundred times a second. I've built this twice, 20 years apart, so here's how scratching actually works in software.
When you drag a record backward, the audio plays in reverse. Sounds obvious, but audio files are built to be read forward only, MP3 especially, and reading one backward smoothly is genuinely hard.
The naive approach is to keep a buffer of recent samples and replay them in reverse when the user pulls back. I did exactly this in the 2000s. It works, but it fights you the whole way: buffer size, interpolation, a click at every direction change.
Here's the thing nobody tells you. Changing playback speed is really changing the sample rate on the fly. A scratch is just rapidly modulating frequency. Drag slow, low pitch. Drag fast, high pitch. Reverse direction, negative speed.
The clicks are the enemy. Every time direction flips, if the waveform isn't near a zero crossing you get a pop, and a real DJ does thousands of direction changes a minute. You smooth every single one or it turns to static.
My current build uses the BASS audio library's reverse stream instead of hand-rolling the buffer. Thirty years in, that's the lesson: when a mature library already solved your hard problem, use it. I wasted weeks in 2005 rebuilding something that already existed.
Then there's feel. A real turntable has weight and inertia. Map mouse position straight to playback position and it feels dead. You measure how fast the hand is moving, smooth it over time, and let it drift back when released. That's what sells the illusion.
The whole thing is maybe 200 lines doing the right math at the right moment. No vinyl, no physics engine. Just sample rate, smoothing, and a lot of attention to the instant where things click.
I'm rebuilding all of it in the open right now. If audio programming is your thing, stick around, I post about it a lot.
Stuff on my list: Auto-Mix, MIDI controller support, and a few other things. What do you want first? Reply and let me know, it actually shapes what I work on.
Not a VC funded startup trying to upsell you. I made DJ software 20 years ago, the App Store wiped it out, and now I'm building it again and giving it away free because I want it to exist.
Spinning a 4th of July party tonight? If you need last-minute risers and drops, the free FX pack's got you.








