Burning It Down to Serve You Better

/images/file_000000007800722f8d23ea4429a4a6ef.png

Sometimes, the best thing you can do for a project is douse it in gasoline and set the whole thing on fire.

Not because you’ve lost faith in the destination, but because the current attempt is standing in the way of getting there.

Come on inside and I’ll explain what I’ve done.

◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇◆◇

A few months ago, things were starting to feel fuzzy. Not fuzzy in the sense of “I don’t know where I’m going” - I mean fuzzy in the sense of “I know exactly where I’m going, but this road I’m on doesn’t seem to be heading there anymore.”

I’d fallen into the trap of building code toward getting results that I could tinker with. But when you do it that way, every line of code you pile on top just adds weight to the decisions you made down below. You start with one half-complete idea and then climb up that to erect a viewing stand, then scramble up onto that to hang a useful yardarm, upon which…

Before you know it, you’re half way up a rickety scaffold, swaying in the breeze and still desperately reaching for the sky. You can’t ever go back down to shore up the base, because everything above it will collapse if you even breathe on it funny.

The only way to fix a mess like that is to clear the decks and build a proper foundation before trying again.

But that can seem like drowning puppies in a bathtub and I just didn’t have the heart to do it last fall, so I let the squirrels of my nature distract me for a while. But now I’ve came back.

With some gasoline.

And the first thing I did was burn it all down. Deleted the entire code base so I could start fresh.

That previous attempt wasn’t a total write-off, though. It sharpened my understanding of what the foundation needs to be. And though I didn’t keep any of the code, I did keep the important lesson that earlier code taught me:

Plim isn’t actually a budgeting app.

So What Is It Then?

It’s actually a personal cashflow rendering engine with a built-in time machine, masquerading as a budgeting app.

I know that sounds kinda goofy, and I don’t seriously expect anyone to think of it that way, but it was an important epiphany for me, because it reframes what I’m trying to do here.

Plim is trying to accomplish something more than just budgeting - something other household money management tools don’t try to do.

The more I played with that original code, the more I realized that your money picture changes. Not just when you add new transactions in the future, but things change in the past, too. You go back to add comments, or move a charge to a different category. And it’s not just you changing the facts. Banks do it too. They revise dates. Correct amounts. They change descriptions. Vendors report late. Credits move.

And to complicate your life, nothing ever calls your attention to these changes. They just happen silently in the background as though they don’t matter. In the worst cases, you don’t notice anything at all until 6 weeks after you’ve closed out the month and moved on with your life. Now you need to know why the hell you budgeted so much for dog food last June, but how are you supposed to figure that out when you’ve got no record of what you changed and the added weight of July and August records piled on top of everything too?

That’s where the time-machine part comes in. Under this new model, plim doesn’t just keep track of when your money moved - it also keeps track of when you found out about the move. So sure, you can still look back at June armed with everything you know today - or you can go back and see what June looked like to you at the time - before all this late-breaking information arrived.

And sometimes, being able to see both pictures is the key to figuring out where things went wrong. Maybe you changed something you shouldn’t have, or maybe the bank did. Who knows?

Most home budgeting software pretends that everything it’s showing you has always been that way, even though everyone knows it hasn’t.

Well, plim’s job is to call bullshit on that whole idea of unchanging history. Instead it treats every entry, every alteration, every new data file as just another piece of evidence, slowly piling up to create an ever-clearer picture of the truth. And then it gives you tools to peel back those layers one by one.

Once I understood this clearly, I realized my earlier design could never become what it needed to be. It needed to change in its bones.

So that’s why I went back to the beginning.

The New Rule

I call this the Evidentiary Snowfall model.

In plim, your financial history just keeps piling up, one tiny flake of evidence at a time, accumulating like gently falling snow, and the key principle that makes it all work is simple, but merciless: No data can ever be edited.

Editing a record effectively erases the previous version and replaces it with new data, as though the previous version never existed at all. So under the evidentiary snowfall model, we don’t allow that.

What we do instead is add new records that override the old ones. We record the fact that we’ve changed our minds about something, and when. So every piece of data we add includes a timestamp. Every single file, every single transaction, every single change to a note explaining what a transaction was for - everything - is locked down to a specific moment in time.

That way, if we want to know how things looked on January 7th, 2014, at 2:27:05 a.m., we can build an accurate view of the data by just ignoring every record with a later timestamp.

But before Plim can do anything with that data, it must first be able to store and read it all under this rigid timestamping protocol, which is what this restart has been all about: rebuilding every file format around this rigorous timestamp model and then being able to read them all through a date-filter lens.

I’m almost finished the foundations now. All the files read cleanly, and I can reconstruct history from any point in time. I just need to add some unit tests to explore more edge cases and make sure the foundation is solid. Once that’s done, I’ll be able to start implementing reports and workflows on top of that.

Without worrying that it will collapse underneath me.