RawData

The session where nothing changed

On 9 November we held a session of Mac Deficit in which we didn't change a single line of code.

We think it's the most important one we've had.

We were about to ship

By Session 35 the app looked finished. It scanned a drive in about eight seconds. It drew the drive as an apple. It moved things to the Trash and put them back. It had search, settings, and drives that appear when you plug them in. In Session 34 we'd even built a second edition of it, made to live inside the protections the Mac App Store requires.

The next item on the list was signing it and putting it out.

Jer stopped us there. The words, from the end of Session 35:

"Next session I want to focus on all our technical debt and ensuring our code base is clean, efficient, professional, and leaves no tech debt as much as we can."

So Session 36 was set aside for that. And instead of starting on the debts we already knew about, we agreed to do something slower first: read everything.

Session 36

We read the whole app, line by line. The scanner. The bridge between its two languages. The build files and scripts. And the Mac interface, which had been written across fifteen fast sessions and had never been audited at all.

We wrote down what we found. About 57 things. Five of them were serious, and we'll say what they were, because an app that asks for this much trust should be able to.

None of these had bitten anyone. Jer had used the app for days and it had behaved. That's exactly the problem with this kind of flaw: testing doesn't find it, because it lives in the case you didn't think to try. Reading finds it.

At the end of the session we had a ranked list, an order to fix it in, and six choices for Jer to make. Jer approved all of it, and then said not to start. Checkpoint, commit, push, and pick it up next session.

So the session closed with the code exactly as it had opened. What had changed was what we knew.

Why that one

Before Session 36, Mac Deficit was a project that worked on Jer's MacBook. After it, we had a written account of every place it could let a stranger down, and no excuse not to fix them.

That's a different relationship with your own work. A project has to please you. A product has to be safe in the hands of someone who will never read the code, on a drive we'll never see, holding files that can't be replaced.

Everything since has come out of that list.

What came out of it

Ten sessions of fixes, in the order we'd agreed, each one checkpointed before the next.

The app now checks the disk once more before anything is moved or deleted, and if the item changed after you were asked, it asks again with the new size. A folder is protected whichever path leads to it. Closing a scan frees its memory at once. A scan that hits an internal error ends and says so.

Several items selected in the apple, with one confirmation showing their total size before they go to the Trash

Then the quieter ones. A file with several names on disk is counted once, even after a Refresh or a Put Back. The Trash confirmation tells you what emptying the Trash will really free. The places macOS privacy guards (your contacts, calendars, notes, the Photos library) are never offered for deletion, and the app says why. Four libraries the scanner no longer needed came out. The app got its own automated tests beside the scanner's.

A folder macOS privacy protects, refused for the Trash, with the reason

We changed how we test, too. There's now one script that builds a test folder, and Claude drives the app through a checklist, click by click, while Jer watches. The first time we ran it that way, it found a bug neither of us had found by hand.

And the audit made us ask a second question. Session 36 asked is the code right? Session 48 asked can it be trusted? Jer came in with a list: access, logs, how the app keeps your data to itself. Out of that review came Window › History: everything Mac Deficit has ever moved to the Trash, deleted or put back, kept on your Mac, exportable, with Put Back right there. Then Acknowledgements, listing the open-source code inside the app and the license each piece is used under. Then crash reports that name none of your files.

One part of the audit isn't finished, and it's the part that matters most: the sweep. We're in the middle of it as we write this, in Sub-Session 50.

The fixes were the visible work. The sweep is what makes them count. It goes back over the whole code base once more, checks that everything Session 36 found is really closed, clears what the fixes themselves left behind, and writes down honestly whatever we've chosen to still owe. An audit that ends at "we fixed the list" has only proved the list. The sweep is where Session 36 either holds or doesn't, so we won't call the audit done until it is.

The question on the form

Here is where it turns.

To put an app in front of people properly, you sign it. To sign it, you enroll with Apple. And the first question on that road is a small one: individual, or organization?

A week ago we'd have ticked the first box without thinking. After Session 36 it reads differently. We'd just spent a session listing every way a tool that deletes files could fail someone. A thing like that shouldn't hang off one person's name. It should belong to something built to stand behind it.

So that's what we're building next, alongside the app: a company. An LLC, formed in Georgia, to own what RawData makes. Mac Deficit, Pbuild, BoomerClip, and whatever comes after. Later, when the numbers make it the smart move, it will likely choose to be taxed as an S corporation. That's a conversation for an accountant, not a blog, but it's on the map.

We didn't expect a disk space app to be the thing that made us do this. It was. An audit is what a company does. Somewhere in that session we started being one, and the paperwork is catching up.

First, from us to you

The business side takes time, and we're not going to hold the app behind it.

So the plan is this: Mac Deficit comes out first as a direct download, from us. No store in between. It will still be signed and checked by Apple, so your Mac opens it without a warning, but there's no storefront, no middleman, and nothing collecting data about you. There never will be: the app has no telemetry, and that isn't up for discussion.

The App Store edition is built and waiting. It comes after.

Between here and there: the sweep, and then an honest look at how small Mac apps actually find their people without a store doing it for them. We have ideas. We'll keep some of them to ourselves for now.

Hungry

We'll end on the part that isn't engineering.

We want this. Not in the way you want something you've daydreamed about, but in the way you want something you can already see the shape of. Twenty-one sessions in one week, most of them past midnight, isn't discipline. Nobody is making us. It's appetite.

It would have been easy to ship at Session 35. The app worked. Nobody would have known about the five things. We'd have known, and that turned out to be enough. That's the part of this we trust most: when the easy thing and the right thing came apart, it wasn't a hard choice.

We think that's what success is made of. Not luck, and not one good night. It's being hungry enough to start and stubborn enough to read your own work line by line when it already looks done, and then to do the boring ten sessions after.

We don't know how big this gets. We do know what it takes from here: finish the sweep, sign the app, form the company, put it in people's hands, and not stop halfway. If we see it through, the rest follows. We've stopped wondering whether we will.

The apple waited eleven months for us once. It won't have to wait again.

~ Jer & Claude