The Changelog: Software Development, Open Source - Actual(ly) opening up (Interview)
Episode Date: July 1, 2022Adam and Jerod are joined once again by James Long. He was on the podcast five years ago discussing the surprise success of Prettier, an opinionated code formatter that's still in use to this day. Thi...s time around we're going deep on Actual, his personal finance system James built as a business for over 4 years before recently opening it up and making it 100% free. Has James given up on the business? Or will this move Actual(ly) breathe new life into a piece of software that's used and beloved by many? Tune in to find out.
Transcript
Discussion (0)
Welcome, friends. I'm Jared Santo, and you are listening to The Change Log, where we
feature the hackers, leaders, and innovators of the software world, almost 500 of them
at this point. This is episode number 495. On this one, Adam and I are joined once again
by James Long, who was on the pod five years ago discussing the surprise success of Prettier, his opinionated code formatter that's still in use to this day.
This time around, we are going deep on actual.
That's James's personal finance system he built as a business for over four years before recently opening it up and making it 100% free.
Has James given up on the business?
Or will this move actually breathe new life into a piece of software
that's used and beloved by many?
Stick with us to find out.
Oh, and Changelog++ members, stick around even longer.
This episode has a bonus pre-show with Ab and I.
It's about 25 minutes of us hanging out and chatting before we hopped on with James.
Quick shout out to Fastly.
Everything we do here at ChangeLog is fast because our partners at Fastly serve it up super fast everywhere on earth.
Check them out at Fastly.com.
Okay, James Long on the ChangeLog.
Let's get into it. This episode is brought to you by our friends at Influx Data, the makers of InfluxDB.
In addition to their belief in building their business around permissive license open source
and meeting developers where they are, they believe easy things should be easy.
And that extends to how you add monitoring to your application.
I'm here with Voychek Kajan, the lead maintainer of Telegraph Operator for Influx Data.
Wojciech, help me understand what you mean
by making monitoring applications easy.
Our goal at Influx Data is to make it easy
to gather data and metrics around your application.
Specifically for Kubernetes workloads
where the standard is Prometheus,
we've created Telegraph Operator,
which is an open source project around Telegraph,
which is another open source project that makes it easy to gather both Prometheus, we've created Telegraph Operator, which is an open source project around Telegraph, which is another open source project that makes it easy to gather both Prometheus metrics as well
as other metrics such as Redis, PostgreSQL, MySQL, any other commonly used applications
and send it wherever you want. So it could be obviously in FluxDB Cloud, which we would be
happy to handle for you, but it could be sent to any other location like Prometheus server, Kafka,
any other of the supported plugins that we have. And Telegraph itself provides around 300 different
plugins. So there's a lot of different inputs that we can handle. So data that we could scrape out
of the box, different outputs, meaning that you can send it to multiple different tools.
There's also processing plugins such as aggregating data on the edge so you don't send as much data.
There's a lot of possibilities that Telegraph could be used to get your data where you are
today. So we've permitted metrics, but you can also use it for different types of data. You can
also do more processing at the edge and you can send your data wherever you want.
Wojciech, I love it. Thank you so much. Easy things should be easy. Listeners,
Influx Data is the time series data platform where you can build IOT, analytics and cloud applications.
Anything you want on top of open source. They're built on open source.
They love us. You should check them out. Check them out at InfluxData.com slash changelog.
Again, InfluxData.com slash changelog. So, James, the last time we had you on the show is 2017.
That episode was called The Burden of Open Source.
In your blog post announcing open sourcing of Actual, which we'll talk all about today,
you talk about the magic of open source.
I thought, well, there's a little bit of a yin and yang
right there maybe we just start right there and see what happens yeah it's been i mean it feels
like a long time ago but uh and so you know opinions can change um you try closed source
for a while and you know you sort of you you sort of see the more the more nuanced take about it so
what do you want to know about it?
Well, it sounds like you're ready to give it another shot with this project.
Last time you were talking about Prettier and the success of Prettier,
perhaps the surprise success.
And of course, I think that leads to the burden to a certain degree.
But I think open source can be both magical and burdensome at different times, even the same project.
So I don't think they're necessarily antitheses, but it's interesting that your perspective
has perhaps changed.
Maybe let's just start with actual, what it is, when you started building it.
We know that we're here to talk about the open sourcing of it, and so there's a long
story from there to here.
So let me just give us a little bit of that understanding, and we'll go from there. Okay, sure. Yeah. Actual is a product that I built.
It is a personal finance manager. And so you kind of just the typical things where you import or
add your transactions and then it provides a way to budget and check your finances. The original goal was to be just a super powerful tool built
for personal finance geeks in a way, or people who just like to manage their finances in a more
detailed way. The primary method of budgeting right now is something called zero-based budgeting,
which is a pretty detailed way to budget, which is where you actually track things down to every
single dollar. And then if you overspend in one category,
you have to sort of make up for it in the next month.
And so the overarching goal was not only to be,
because they are people who, users are very detailed people,
typically they also want powerful reporting
and ways to get insights from their data.
And so the original goal was to have this
whole thing and um the other big difference here is that it's actually a local first app so it's
an app that you can run on your computer all of the data is local the big benefit for that was
in theory i should be able to build a whole reporting mechanism that you can actually do
custom queries and uh just dig into your data a whole lot more than you typically could on other apps
because other apps, they're just more constrained
by their server.
They're running all of their clients' queries
on their server so that you can't do certain things.
So in theory, you could even custom,
if you wanted to, you could write a custom SQL query,
which sounds super geeky and it is super geeky.
But if you can do that,
then you can build up higher level things
that aren't as complex.
But like, it was a cool idea from the start to be like,
hey, what if I could actually just like write SQL queries
against my personal finances?
And you can still technically do that today.
It was a lot more work than I imagined.
And so I never really got to the point
where I was able to figure out the user experience
of how to do that.
It is still a potential avenue.
So it never fulfilled that vision quite as much as I wanted to. But that user experience of how to do that. It is still a potential avenue. So it
never fulfilled that vision quite as much as I wanted to. But that was kind of the original
vision started it around, I started hacking on it just for me probably around 2016 was using it in
a very limited way for a couple years. And then as I built it up, I sort of got to a point where
it was like, hey, I've always wanted to launch a product. I have this thing. I might as well use this as the thing that I experience a launch. And so I launched
it, I think in January, I believe it was 2019 on Product Hunt. It got number four of the day. It
got a decent amount of users there or like interest. I think I got 30 users and it was very
bare bones at that point. And then over the years, gradually gained a couple
hundred more users. And over time, up until the open source, I was at a point where I had
a small but decent income stream.
And you worked on it solely for a while, right? And then eventually you took a job at Stripe.
That's right. Yeah, I was doing in 2017, end end of 2017 i left mozilla and i was working for
myself for doing consulting um and i worked part-time on actual for about a year or two
and then most of 2020 i worked full-time essentially on actual and that was just the
point where it just wasn't making enough money like i i you know we'll go into this more i'm sure
but i just didn't realize how hard like you always know it's hard to bootstrap something but you
you know there's there's always it's always surprisingly harder than you think it's going
to be and it was just like my family was thinking about moving and it's like you know moving there's
a lot of costs and there's just like i have i've got three girls three kids to take care of it it's
just like it comes a certain point when it's it's just like where I have, I've got three girls, three kids to take care of. And it's just like, it comes to a certain point when it's just like, where do my priorities lay?
And also, even for me personally, working alone is just not, it's not the healthiest way for me to grow.
And so when it came down to it, I just realized that I had this opportunity at Stripe and it was kind of hard to turn that down.
And so I worked for Stripe and then it actually became a side project for a couple of years.
Yeah, going alone is challenging, man.
It's a challenge for sure.
What is it that made you look at budgeting?
Were you like just manage your own budget?
And you're like, let me, I've got some ideas
and you started hacking on it.
And next thing you know,
you've got something that seems like a product
that could be a product.
And then you sort of got bit by the passion bug.
You're like, man, I can actually solve this problem
for other people. Is that a version of story or is that is that way off it's not
too far off i was frustrated around the time that i started this in like 2015 2016 with not feeling
like i had a good understanding of of of my finances about just like you know i thought
i had you know saved up enough money for this thing. But like,
when I look at my big account, why don't I have as much as I thought? And it's a surprisingly
hard, like you think you could just manage your transactions and then categorize them
and then like, look, and then like, there's your answers, but there's enough complexities,
especially, I guess, especially as you have anything complex, like if you have a mortgage
or you have some kids or you're married or you just
have you have one thing that like is um like a reoccurring bill that you just don't think is like
as high i i don't know like there's things with like reimbursements like you bought a hundred
dollar thing off amazon but then you returned it like where does that money go back into there's
enough things that add up to this like vague buffer of like
things that is a mismatch of expectations in your money and so i i think i was frustrated at like
i kept just like watching my bank account and thinking i had certain amounts of money but then
when i actually really sat down to break it down it's like oh i actually have to pay this bill next
month with this much which means i don't have enough now to do this other thing.
It's a surprisingly hard problem, which is, I think, why a lot of people just don't really budget.
And they just kind of do spend and then they watch their bank account.
And so I think I am a very detail-oriented person.
And so it's like, for my personality, I did want to just know more.
And I think that was the crux of it.
It's like, I was frustrated at just like not knowing.
That combined with, I typically have a high bar for software.
And so kind of that typical developer thing
where I go and I use a bunch of apps
and I just don't like most of them
because just you log into Mint
and it's terrible for all sorts of reasons
um i think it's even gotten worse since then now it's just like super simple ads everywhere lots
of bad things um and it works for some people totally great i'm not putting down any other
people's usages of mint or ynapp or anything that totally great um i did try ynapp for a while
i did like so this was actually before it's
funny i think this was a year or two before ynav actually came out with their current version
which is on the web uh back then it was actually their primary app was their desktop app which
was ynav 4 which is now there's like how do you say this is it ynav you need a budget y n a b
dot com yeah so this this is a different tool
that has a similar zero-based budgeting philosophy
that has roots in some of Dave Ramsey's
envelope-style budgeting type stuff.
So this is the primary product in this space
for zero-based budgeting.
But their current solution is a web-based solution.
There was a whole phase of
YNAB before this where it was just a pure local app and there's a whole bunch of people who just
like love that app and actually still to this day have like hacked up the app because it's like it
doesn't work anymore on like it's not supported it doesn't work but you know as things happen with
software there's like passionate, dedicated user base
that's very niche.
And they've hacked it to get it working
on the latest Macs.
But I used it and I did learn
about the zero-based budgeting philosophy
kind of through this.
And I did like that.
But the app itself just left a lot to be desired.
And it got even worse
when they released their web version
because they ditched certain features
that I thought were ridiculous.
It was this oversimplified, felt like a, honestly, to me, it kind of just felt
like a toy, like very colorful in the wrong ways, cartoony, almost just kind
of cartoony.
Yeah.
And it's, you know, it's totally fine if you like it.
But for me, I was, it was a response for like, I want something that like I can
use really elegantly and it feels beautiful and it does have a very
high bar for user experience but it's also powerful and lets me open up the features and
like really just like write SQL queries against my data and like that kind of a thing just doesn't
really exist and not even just for budgeting in most software world or most apps that balance is like typically not a very common one i use
a to-do list app called things if you've used that before i'm a user it's a fantastic app right
it's a delightful user experience that is like a very good example of just like on the mobile app
and on the desktop app it just has all these really really great interactions it took me a
while to start using it when i first used it I had that same reaction where I was like, this is beautiful, but it's
just too simple for me.
Like it just doesn't, I can't really like do like, you can't even do filters where it's
one tag or this other tag.
If you click two tags to highlight those two tags and filter by those, it's always and.
So you can't say personal or house you have to say
personal and house it sounds like a simple example but that's kind of the no that drives me nuts and
lots of different applications i'm always like give me my or come on i need an or exactly yeah
and when you're running through an app like that to like test it out you're kind of like ah this
is too simple now i've eventually fallen in love with it and like it was and that simplicity does
have its benefits and i actually like to use it all the time now but for budgeting my i had that
initial reaction of like i really want to build this myself because also i really want to just
force myself to learn like everything about this and just like think deeply about it so i just
wanted to think deeply about it so you had incumbents like mint aaron patzer if i can recall
correctly like forever ago was on the web 2o show jared before my day on that podcast as a matter
of fact we got an email recently from aaron wanting to come on founders talk so it'd be
interesting to go back and talk about mint and his journey to where he's at today i was a mint
user back i mean right when it very first launched before they they got bought by it, was it Intuit that owns them? Yeah, yeah.
And for me...
Noah Kagan, he was famous for the original growth marketing of Mint
and things they'd done to get it to its user base and whatnot.
But it was an incumbent.
I mean, it's been out there for, I'm guessing, 15 years.
Just guessing.
A long time.
That's probably about right.
At least, right?
Yeah, I mean, a long time.
And it's still alive.
It might be dead alive, but it's dead to some, dead to James.
Just litter with ads now.
Well, I think their innovation was you don't have to enter your things yourself, right?
I mean, most of us, that's where we fail at budgeting.
It's like, I'm not going to go enter all my transactions.
I may be able to do it for a little while, but eventually I gonna fall off the wagon and then it becomes useless and so mints like hey
we'll do it for you it's like push-ups you know do those things every day no maybe no days hopefully
maybe i mean you have to because you're not going to go back two weeks and enter all those transactions
yeah yeah exactly so you give up and declare bankruptcy that was mint's deal that's what
really put them on the scene.
And then they started just layering on upsells and other things.
I eventually was like, I'm done with Mint because it got yucky for me as a user.
But it seems like, James, your audience for actual
is pretty niche-y.
I mean, people who really sweat the details of user experience
plus people who would see the value in local first,
and then that desire to be able to,
maybe it never was actualized, pun not intended,
the ability to run your own SQL transactions,
or queries, but that desire of that
would attract me to a tool.
It seems like that's a small subset of the people
who need budgeting, which is darn near everybody.
Yeah, so my pitch is, not pitch as much, It seems like that's a small subset of the people who need budgeting, which is darn near everybody. Yeah.
So my pitch is not pitch as much as just like my, I'm just going to throw this out there. I don't think it's very niche because those properties are, they have second order effects,
I guess, which is the, which are much more apparent to the user.
For example, local first, the app is just fast by default.
I mean, it's no question.
That is like, that's the first thing
that everybody always says when they try the app.
It's just like, they feel it.
They feel their local,
they feel their data sitting right there on the hard disk.
And I don't have to think about it.
I don't have to optimize.
I can run a hundred queries
from straight from the front end,
not even in the backend. So there is kind of a front end and like a server process running but that process is all just like a local process i can run queries send them to the server and i
can fire off 100 from the front end and you don't feel that at all and that whole that just it it's
one of those things that um just changes the whole experience of the app like there's no like you do
a bulk edit of you know your 3 000 transactions in an account because you're doing something crazy and you're really restructuring things.
And you bulk edit things to add a note to these 3,000 transactions.
So you select them all and press N and type archived.
It happens in 200 milliseconds.
Whereas you go to any other app and there's this huge cliff of anything that's
outside of the ordinary workflow that they've like specifically manually optimized suddenly you hit
that like oh it has to span their like five database clusters and it takes you'll see the
loading spinner for like i mean in gmail you archive a thousand messages and you archive them
and you see it spinning for like 10 seconds and then like the ui doesn't
really like respond right you have to refresh the whole page for to actually see the properly
updated state it's totally broken yeah so i would say there's like all these second order effects
which are the things that sell the app to the primary user because um it's that and also the
beautiful user experience which you know i designed a lot of this app. I got a lot of feedback from designers.
So I wouldn't say it's like it's not close to things quality, but I think it's there.
It's there enough to where users tend to still mention this, that it's just a nice app.
I don't want to be the there's other budgeting apps that just like throw hundreds of numbers
at you on a screen and you know there's
all it's very complex this is a complex app but it tries to do that philosophy where it's a
discoverable and it's it's simple at first it looks simple i mean that's that's that's another
thing that people say about the app is like it just looks so simple at first i thought that this
was just going to be like not interesting of an app but turns out
you can actually edit rules and do complex rules and like you kind of can like unpeel the layers
um that shows off too like that plus the fast is a really deadly combo i mean it's a really really
powerful powerful thing so um the thing that i think i would love to take actual if if somebody
was going to do this is to um focus less on the zero-based budgeting.
And if any actual users are listening to this, don't freak out.
Like that's always going to be there.
But there's totally capability for this to be a more generic transaction management tool,
which you don't have to be writing those SQL transactions or queries
because there's a whole kind of other spiel about that where like the one percent power users can be doing building a lot of cool stuff that benefit the rest of the
audience right so I think a lot of this does not have to be niche in my opinion I think if like
if I was really passionate and not a little bit burned out I would go get VC funding and like
build this out into a proper product and I think it it totally has to mark... People say there's no money in budgeting apps,
but like you said, everybody needs a budget.
In the last two years, I've seen four tools launch,
and now they have a lot of users,
and they're making decent money.
It's totally a viable product space.
Well, everybody needs a budget,
but not everybody knows they need to budget.
I think as we get into an economic downturn,
I think budgeting suddenly becomes more and more popular.
Could be a good time for you, James.
And I definitely understand where you're coming from
with saying the things that you push
are not the local first in terms of it being
a nerdy thing that nerds like,
but you push the performance.
You promote the fact that this makes it super fast,
super simple, and privacy focused.
Those are things that I think the general public are all interested in.
So in your post you say it's hard to build a product,
but it's harder to build a business.
You worked on it for many years.
It's not like actual, this is not a funeral arrangement.
The thing is living on, it's living on open source.
But you're not going to pursue it
as a business for yourself anymore.
You don't, you're a little burnt out.
You're not going to go the VC route.
What were the hard parts in the business?
What made it burn you out?
What made it not hit that hockey stick growth
that people desire, you know,
when they go out to turn a side project into a business?
I've always said that I actually like marketing.
And it's true that I think I still do like doing that.
I like having exposure.
I like going on podcasts like this.
I like talking at conferences.
I like even just paying for marketing
and paying for promoted tweets and stuff like that.
All that stuff is very interesting to me.
But I think it was hard
because I'm doing a novel product
where it is local first.
That requires a pretty significant where it is local first. So that requires a
pretty significant investment on my part technically. And so I can't just fall into
the happy path where Oz or a Heroku-like thing is taking care of a lot of stuff. I can't use
an existing framework because it just is incompatible with everything that I'm doing,
which is local first. So unfortunately, that did require significant investment,
which because it's hard to context switch,
I ended up focusing more on the tech side of things
and less on the marketing.
And so I think that's one thing where I fell down,
where I wasn't spending time getting
and actually selling to users like I should have been
because it's hard.
I think I learned early on,
I felt like I couldn't,
I couldn't go and talk to users and sell them on it because it wasn't really good enough yet. And
I think that's a very common pitfall that a lot of new entrepreneur type people fall into where
it's like, I don't like, how can I publish a landing page and get emails when I don't even
have a screenshot of the app yet? Like, I remember thinking that, and now I'm just like, that's,
that's the stupidest thing I ever thought. Like just pitch the idea you like write some text and you describe what it should be
and then you have an email page and if people are interested then they'll sign up for it uh that's
all you got to do like it's not that hard so i i overthought a lot about that i thought i needed
much more weight behind like a sale than i needed to have um at the beginning and therefore i deferred the marketing
and the sales um plus with the investment of tech required it's just very distracting and i just
easily fell into the tech part of it more sure well we all understand that engineering it's the
fun part and you can get yeah knee deep and sometimes neck deep and
that's not even talking about the business side which i think you i think you're maybe pointing
to more which is what was hard about that which is i was stubborn and i really wanted to prove
that i could build mobile apps as well and so not only did i have to implement a authentication flow
and a subscription management system and deal with all of that stuff,
I also had to use iOS and get my apps in their store.
And then they are forced you
to use their subscription system.
And so I had to set up that whole thing
and just manage all of that.
That is a ton of work.
Like don't downplay,
like if you're thinking about building an app,
like you got to figure out how to streamline that stuff
or find somebody else to help with that.
Because that is dealing just with all of that. that's the business side of it that is really
really time-sucking well speaking of i guess being such a burden how how long did it take you to get
more people on the team and describe how your team has ebbed and flowed to from inception to now
more people on the team for actual there hasn't really ever been a team.
It's been, so, you know, over the years,
I would tell people all the time,
like my biggest problem is I need to find,
I need to figure out how to involve people.
And I never really figured out how to do that.
When you're bootstrapping, you can't pay people, right?
So I had had there were
many there was like four or five times where i tried out a contributor model where people were
just interested people would ask a lot actually how can i help like contribute and so i bring on
some people and then obviously as just you know a free contributor they do a little bit of work and
then they just kind of fade away which is just how it is and then at that point it's just like
it's something even else more for me to manage like
right helping them get it yeah getting it running sort of mentoring them and helping them and then
it's just like an extra thing on top of everything else i never figured out how to get past that
threshold i did there was one success which was earlier this year a couple months before i open
source as i was trying to scramble and sort of solve this, I brought on I finally found a good service who helped me find a personal assistant
or like a virtual assistant who helped manage support. And she was amazing. And she I was
feeling very guilty because I had I think 200 unread emails that I hadn't just lost track of
it over a month or so at that I hadn't responded to in like two over a month or so that I hadn't responded to.
In like two days, she brought that down to zero,
just answered everything and categorized everything
and just really cleaned it up.
And then at that point, she would take on support
and that was a huge help.
And so that was good, I think.
And it's not like development
where it was super, super expensive.
Like I think you can find places to pull off and get help
that isn't going to drain your whole finances
like hiring another developer or something.
Well, especially when you are a developer and you love that part.
The first move is to hire the not that part, the other parts.
The things that you aren't as good at or the things that you don't like to do.
And it also is a bonus in the sense of
if support is what you need to help with,
generally salaries or pay for support agents
lower than developers, et cetera.
Works out.
On the sales side, it's interesting
because what you have is developer friends and audience.
You have respect in the developer community.
There's really cool tech inside of here.
I've heard you on a podcast or two over the years
talking about some of the stuff you've built
inside Actual or for Actual.
Really cool things in there.
You have Twitter followers.
You do well on Hacker News, et cetera, when you write.
But in terms of finance, you're nobody in that world.
I think so, I'm just assuming.
You mentioned Dave Ramsey.
It seems like a lot of these products or software services
that are successful are kind of attached to a guru
or a personality or some sort of a program.
Like Suzy Orman helps people with finances,
Dave Ramsey helps people, I'm sure there's other people. Suzy Orman helps people with finances. Dave Ramsey helps people.
I'm sure there's other people.
Yeah, Suzy Orman, doesn't she help people with their finances?
Sure.
And so I wonder, like, on the marketing front,
if something like that, or did you try anything like that?
Like, what if we could get attached to some sort of a bigger rodeo show
and that they sell the idea?
Because you almost have to be like, here's why you need budgeting and maybe this style of budgeting and by the way actual is the best way it's super fast
it's privacy focused that could be like a a sales funnel but it's hard to get that thing going unless
you want to become you know a finance superstar or something right well i think you can i think
there's opportunities to not become
one like that because that is probably like a lifelong type or not a lifelong but like one
stage of your career like a decade but you could like one thing that i should have done more is
reach out to people like that like there's popular blogs that people read that aren't dave ramsey
famous but you don't have to be dave ramsey famous to really give a good kickstart for product for like a product uh uptake in in sales uh but there's a
lot of blogs that i could have been reaching out to um developing those relationships but again
that's just like a very sales thing that was it just anything that took more than a couple days
which is very hard to context switch into because that means that I'm putting the product down
and it's not getting features for a month or two.
It's very hard to context switch
between development and all of that other stuff
because you've got to be on top of that sales,
developing those relationships with those bloggers
to get featured.
It's just hard to do it.
Did you ever feel like the product's not good enough?
So that old saying,
if you're proud of your first release,
it was too late kind of a thing.
And I wonder if your desire to keep doing product
versus going out and switching to the sales context
is because deep down you're kind of like,
it's not good enough yet,
or I'm not happy with it.
Oh, totally.
Yeah, that's what I was mentioning earlier,
where even just feeling like I couldn't put up a landing page
without a screenshot, that's ridiculous.
You don't need to have that already to sell.
You can sell somebody with an idea without,
the feature doesn't even need to be there yet.
People do sales all the time, say,
hey, we're going to build this incredible feature,
here's how it's going to work, it's going to be amazing,
and it's not even built yet, which can be a problem.
But you can totally make sales that way.
And I should have embraced that more.
I do think that there was a point
when I really should have
and could have switched to that.
I think it's,
I was somewhat aware of a lot of this stuff,
even in that moment.
But there,
one thing that I would say is
if you were building a product
or doing,
if you are trying to achieve anything, try to do it quickly and make quick decisions and move fast, because not just so that you will like make progress fast.
But when something kind of slows down, like if I was a year into actual when you've been doing something for a while, it's just it's really easy to just keep that pace it's really hard to like i don't know like if i
have like a problem on my house like fixing a toilet that's been broken for a year there's
something about the like psychology of it that's like i'll fix it next week it's already been a
year i'll fix it next week whereas if it broke yesterday i'll probably go out to lowe's this
weekend come back it's a 15 minute fix and i'll fix it right there's some psychology there that's interesting where if you aren't acting on things
fast they just sort of become this pile of responsibility behind you that you just sort of
ignore um i think that's one thing that sort of happened to me at least it's like i've already
been working on this for so long let's just keep building a couple more things you've got me thinking about that the broken window theory but i can't remember if that's
the exact application of what you're talking about or if that's slightly different but the idea there
at least the start of the idea i can't remember the end the start of the idea is if you got a
broken window you can fix it right now because if you leave that broken window broken i think it's
a signal and's a signal,
and maybe a signal to the outsiders that no one's taking care of this house or something.
But also it's kind of like,
then the next thing breaks,
and you're like, well, the window's already broken too.
It's kind of like, well,
I'm already not taking care of this.
And so, oh, here we have neglect accelerates the rot
faster than any other factor.
That's Jeff Atwood talking about the broken window theory,
so I found it a little bit.
So there's a little bit of that going on there.
Definitely understand how that is.
It's a metaphor that leads to the disorder, essentially.
Like if you have a broken window here in this house,
well, then your neighbor's going to be okay with their lawn being not so good.
Your neighbors don't want to deal with their landscaping, so you don't. And so it's almost like osmosis in a way.
You sort of do things based upon other things happening around you.
But it's disorder that happens because of other disorder.
It's kind of like that.
Similar, I would say.
I mean, you're talking about procrastination because of the burden and weight.
You start to get – you've got a snowball coming down the hill at you, and you feel like if I could just keep running, that snowball will never hit me.
But it's getting bigger.
There's 200 emails sitting there, but okay, I've got to plow through this.
I would suspect it's easy for us to speculate and theorize why, all the ways you could have done different things. But it seems to me,
and maybe you can clarify this, is that you were alone too long in a very useful application.
And had you gotten not just users or more users, but belief in the financial and business ability
of what you were building, because you can build a product, you can build an app,
but that is not a business. and it's not venture capital.
It's not investment. It's not whatever.
You were solo bootstrapper too long and you sort of maybe got in the weeds.
That seems to me, hearing so far of your story, it seems like that's where you're at
and you kind of got too far in the alone weeds and you couldn't,
you didn't find a healthy path to a success,
in quote success, to get to that next step,
which is financial viability of the application,
being able to hire people, et cetera, et cetera.
You were alone too long.
Would you agree with that?
I think so, yeah.
I mean, I think that's aligned with everything that I've said so far.
Just general thoughts about, I mean, I think that's aligned with everything that I've said so far. Just general thoughts about, I mean, honestly, I think one thing that I learned too was that
I don't think I want to be a CEO of a company.
Like, I wish I had found the perfect thing that could have happened.
And I did try.
It's hard when you're distributed and you're not, I'm not, you know, I'm not in a city
that's San Francisco or New York.
I'm not going to meetups locally
that I'm meeting a lot of like-minded people.
And then COVID happened too,
where it's like I wasn't even going to conferences anymore.
The best thing that could have happened
was finding a co-founder
that would have become a CEO-like thing.
Like it could have been,
it could have still been a developer,
but still somebody who was still very critical
and very like in a positive way, very critical about what we're working on and
helping shape the business and that would have solved the loneliness problem it would have solved
the like i don't actually want to run a company right like i'm i'm happy being super involved
and being making critical decisions and and shaping it but at the end of the day, that's not my strength
when it comes down to it.
So I think part of it was like,
even if I magically could have gotten the number of users
where I could have started hiring,
I'm not somebody who wants to be hiring people
and then only managing them.
I want to be a tech lead.
I want to be, you lead i want to be you know i i'm i i manage pretty complex things
at stripe that like require cross-organizational efforts and i'm i love working with people
but at the end of the day i'm not i'm not a manager i'm not a ceo like personality i think
that's also when it comes down to so it's it's not even that it's like a problem that i couldn't
solve i think it's just like a problem that it's not, that would not have worked out regardless,
unless I had, I think the only thing that could have happened is if I had found a good
co-founder that solved that, that role.
But finding co-founders is incredibly hard, right?
People that you can trust and actually do that.
So unfortunately that didn't.
And so open sourcing, that's when it really came down to it, you know, it's kind of the only path that I saw that didn't. And so open sourcing, when it really came down to it,
it's kind of the only path that I saw that made sense.
This episode is brought to you by our friends at Square.
Square is the platform that sellers trust.
There is a massive opportunity for developers to support Square sellers by building apps for today's business needs.
And I'm here with Shannon Skipper, head of developer relations at Square.
Shannon, can you share some details about the opportunity for developers on the Square platform?
Absolutely.
So we have millions of sellers who have unique needs. And Square has apps like our
point of sale app, like our restaurants app. But there are so many different sellers,
tuxedo shops, florists who need specific solutions for their domain. And so we have a node SDK
written in TypeScript that allows you to access all of the backend APIs and SDKs that we use to
power the billions of transactions
that we do annually.
And so there's this massive market of sellers
who need help from developers.
They either need a bespoke solution
built for themselves on their own node stack,
where they are working with Square Dashboard,
working with Square Hardware,
or with the e-com, what you see is what you get builder.
And they need one more thing.
They need an additional build.
And then finally, we have that marketplace where you can make a node app and then distribute
it so it can get in front of millions of sellers and be an option for them to adopt.
Very cool.
All right.
If you want to learn more, head to developer.squareup.com to dive into the docs, APIs, SDKs, and to create
your Square Developer account.
Start developing on the platform sellers trust.
Again, that's developer.squareup.com. So you say that open sourcing was the only choice you had left, but what about sell?
It's valuable. You've got a lot of years into it. You've got paying customers, maybe not that many,
but you've got a great looking business for somebody who could be a CEO and be a salesman.
Why not just sell it?
I did think about that, actually.
I actually reached out to one or two companies
that have bought other respected companies
that I know of from people that I respect as well.
So I knew that they would give me a fair assessment,
even though I hadn't really heard of them before.
I knew that their track record was pretty good.
The first one responded like
incredible like that day i think and it was like you know you're not making 10k
arr and so we're not interested yet like that's kind of the baseline that that we have gotcha
and i think i never heard back from the other one i didn't pursue it super strongly because
it just would have really had to been the right fit and i also think that once
i mean maybe this is me selling it short but and maybe i should
pursue it further but the local first architecture and all of that kind of a thing would i think that
would make it hard to sell i think once a company was starting to do due diligence it required like
it's something it's something unlike they've ever seen before and i say that like in a good way but
also in a way that's like it would be hard for them to maintain it like i was already starting to
get i i got a couple comments about when i was talking to people about selling it that
were sort of implying i don't think it's out of question but um yeah yeah yeah can you unpack why
that is i mean what makes it such a unique piece of software why it's harder to maintain it's because
it's just the local first aspect of it where it's not a mac os app built on mac os apis where it's
technically mac os native apps are local first right they just do yeah they're built against
those apis it is a cross-platform local first api that works on the web as well um require getting that
to work required significant investment and like novel um research requiring like new ways of doing
things so absurd sql is a whole nother thing that we could talk about which is like a sub project
that spawned out of this which is like another really big innovation in the open source world
which i haven't really had time itself to
manage because of actual. And, you know, that's another reason for open sourcing actual is trying
to get back to something like that. But like, that's a whole nother project that I think could
be a whole nother podcast on. But those ground, like, to be honest, somewhat groundbreaking
innovations to like, use SQLite in a persistent way in the
browser but it stores the file chunks in index cb and it actually blows away index cb's performance
it's a significant undertaking i mean we're dealing with like writing c code to optimize
file disk access so that it works better with index cb um so it's not something that's a typical sas app that a company is going
to come in and buy and then suddenly like let's ramp it up to you know to get 20 000 users and
just like scale it out in all of the ways that were normal that were that we're used to so um
i see so because of the technical innovations and maybe lateral moves that you made technically to achieve things.
It's not that it's just prohibitively expensive
to host and maintain,
but to actually build upon from where you are
requires a certain skill set that most companies
either don't have or don't want to hire for.
Totally.
It's actually the most scalable architecture
you could possibly have
because you don't even need a server.
That's what I would expect.
I would expect it would be cheap to host.
But development is expensive.
So unfortunately, that is the cost there
where they probably require very highly skilled developers
to actually really be able to dig into the hard parts of this.
Well, then they just hire you.
No, I mean, that's fair.
You've got to sell that idea.
I don't know, it seems feasible.
I think somebody saw the vision and the potential,
even though the user count is low
and the money coming in is low.
And so if they're hyper-focused on ARR,
which I think a lot of SaaS investors are at this point,
they're just like, here's your numbers you got to hit
and we got too many opportunities
so we're not going to even take a look at you.
But I think the right person with the right business already
who could see that vision
and then realize, wow, this is almost like an untapped thing that just got burnt out because
one guy has been doing everything and he's been neglecting the sales and the marketing and the
business side, but he's available for contract or whatever. I don't know. I feel like you could
probably get a sell, but that would be itself a whole nother undertaking that would make you have
to ignore the product. Right. Yeah. Well, I mean, mean if that's like a if there's an end in sight like i think that's okay i think i
could have done that but i i still think that one downside is that like i had built up i think i
could have sold i think it would have to like i'd have to swallow some pride because um it is one of
those things where like when you do things solo you can
build up a lot of like very personal relationships with your users and there's a lot of trust there
there's a lot of things and so like there is another aspect where of like i bet if i had sold
it would have been even more like there's a lot of people who reacted to open source where they
are worried about like not being able to set things up themselves and totally makes sense
because they're not technical users but they're happy for that direction i think if i had sold
it would have been like a very similar response from a lot of people where they're going to leave
the app but it would have been like an angry response which i mean honestly like a lot of
apps do that that's just things change and things things happen um but i think it would have i think
there's a lot of trust in there that it's like i, that I've been saying I'm in it for the long haul
and then you turn around and sell it.
Which, you know,
it's,
it would have been my right to do,
to be honest,
but still would have pissed off
a lot of people
and I didn't really feel like
dealing with that.
And I,
honestly,
I don't think it would have sold for.
That might have been
the humbling part, right?
It's like the price
that you would have had to receive
is probably not worth
the sweat equity
that you have in it.
So it wouldn't have felt good
to have like this small exit plus maybe alienate some of your most loyal users i understand why
that is not the best route and so open source is the path that you chose and then of course that's
like the opposite of alienation it's like inviting everybody in, right? To a certain degree. I do have the ones that don't want to
set it up and can't code and all
that. But instead of
spending your goodwill with a sale,
you're almost like buying goodwill with
open sourcing because now you're just giving a gift to the world.
How many users are you talking
about here? You said 10k
ARR, which is annual
recurring revenue. So that's
less than 10k in a year. Not 10k a month. It's less than 10K in a year, not 10K a month.
It's less than 10K in a year.
Oh, did I?
I meant to say MRR.
Did I say ARR?
You did say ARR.
Sorry about that.
Yeah, their requirement was at least like 10K MRR.
Okay, so that's monthly recurring revenue.
Okay.
So what was your user account roughly?
It was roughly 800.
Okay.
I mean, that's respectable.
Is that paying or is it all paid or is it freemium?
No, those are all paid.
Yeah, I don't have a free plan.
So those are all paid in $800.
So, you know, $3,200.
Revenue, profit, or the cost of the business was really only a couple hundred dollars total.
So about $3,000, which wasn't, you know, it's not a bad side income stream yeah and another like i guess
i'm thinking of people listening who are people sort of like me five years ago thinking about
getting into development and like wanting to launch something out and thinking that they can
make money one of the big shifts that i really have this really drove this whole experience
really drove home for me just how different money is when you think about it from a business
perspective i mean money is just entirely different from it like making three
thousand dollars a month when i tell like my friend that they're like dude that's awesome
like they're thinking of their you know 7k a month salary it's like you're almost making half of what
i make but when you think about that as a business income stream like suddenly i have to hire one
developer even just part-time like there goes almost all that money not like
that that's not even enough to hire a developer part-time like somebody who would be really
skilled enough to work on actual and so money from a business perspective if like you know
having to like set aside twenty thousand dollars to you know invest in development for a couple
months like if you're a business and you can't afford that like that's a huge problem but 20k for
personal you know if i'm about to buy something for 20k i agonize over that for a week for weeks
i hate buying cars because they are so freaking expensive but like 20k in business money is is
nothing right i mean for most businesses that shouldn't be anything if you're doing it right
so that it's been a big it's so like 3k you know a lot of people were like dude you're giving up three thousand dollars a month to me it's just like
you don't understand like that the burden because like i was lonely and i really the next thing i
really needed to do was either find a co-founder which i can do or hire somebody else for to help
development like properly hire don't outsource steal some cheap labor like properly hire somebody
to help development and like three thousand a month is not anywhere close to being able to hire somebody out. So it's just, you're kind
of stuck in this awkward, this awkward middle phase, which I think happens with bootstrapping,
right? You got to really bear it through that awkward phase where you make enough money to,
to get to the point where you can start hiring out.
What about the 800 that you got? So what did you do to get them? I mean, what was the hard path today, the 800 people?
Was it, you said no marketing or how did you get the 800 people?
And what would it take to like 2x that, 3x that, 5x that?
Like how hard was it to get that number?
It was, I mean, I launched in early 2019 and I had like 30 to maybe by the end of 2019,
I had like 100 people. So it was a very slow path
for the first couple years, because I really was just building up the product, which, you know,
probably wasn't the best path forward. Eventually, I did start doing just lightweight marketing in
the form of just content marketing, like I would just write blog posts, I would just write, I was
just start talking more, right, I'll just get getting more exposure. And so that's uh that plus word of mouth where people would discover it and because they would see that it's
a super fast app that's like surprisingly good compared to a lot of other things out there then
it was just word of mouth marketing in a lot of ways which is you know the best and most powerful
form of marketing even though it can be the slowest once Once I reached about 150, 200, then I was a slow, like every couple of months
was another, you know,
like 50 or 100 users.
And then it just sort of,
it's a very, very slow ramp up.
So this was very word of mouth,
very organic growth.
This was not like we marketed,
we did Facebook ads.
And so therefore we got a thousand users,
which wasn't the case
because you got a hundred.
But you know,
you got a certain number of users
because of certain output.
You put out X and in comes X.
This was organic growth.
Mostly organic growth.
I mean, I don't know if you would consider this organic growth, but another example is
going back to Absurd SQL.
When I launched that, which got a ton of attention, that was a hugely successful launch.
And actual was the implementation.
This was the production usage of it
and so that was a another bump so just things like that where it's just marketing via stream
like other projects that get you know number one on hacker news for a whole day were you close to
users at all did you talk to a lot of users yes i i had a slack um that was pretty active and now
i've moved to discord when i open source it because Discord is just way, way better.
But I was pretty close to them.
Like I would Slack most,
or I would sit in the Slack and like every now and then
it would be more and more active.
And I would usually respond to email.
Would you hear stories though?
Would you hear like, this is how I'm using it.
This is how I changed my budget.
You know, wow, Mint has great potential,
but it just is X, Y, or Z wrong for me,
and Axial is better, or YNAB was X, and this is better,
or every dollar has a good possibility, but it's just too clunky, which I find that.
I love the concept of every dollar, which is Dave Ramsey's application,
kind of goes back to Jared's seller acquisition kind of thing.
I'm asking these questions because I feel like,
and I'm not in the weeds with you,
but just on the outside looking in to some of the things,
if you got to 800, which is a pretty respectable number,
with no money spent in marketing really,
just effort and showing up,
what if you did a little bit more on that other front,
which is more storytelling of your user base and things like that?
Could you have gotten to 3,000 users or whatever number that was double or triple that to give yourself, I guess, not just more money, which is a resource,
but just almost the belief that what you're putting out there is changing lives?
Because I think my hypothesis in this space, this budgeting space, one, it's psychological.
People do not like the budget.
So when you talk to anybody about budgeting, it's almost like dogma.
It's almost like religion in a way, even.
It's like, whoa, hang on.
You're talking about my money.
What do you want to know about me?
Are you trying to sell something to me?
So everybody has a different way they think about money and they think about budgeting. And so it's almost like counterculture to even talk, safer things in their life, buy a home,
build a pool, buy a bike, buy a truck, whatever, buy these things you want to have in your life.
You want to do these things, but nothing out there really offers you. And here's this thing that
has this potential. And I see it as like a really good potential. You just need some more support
to get you to that next big win, that next gust of wind to get you through the choppy waters
and out to sea yeah i i think it's just the loneliness problem like if the i think there
was almost such a point where like the thought of having 3 000 users or 800 like i just literally
cannot support that by myself you need a co-founder because even if you got,
because you could have went out and maybe raised $5 million or $15 million,
especially last year.
Now it's probably harder.
But money was cheap last year.
But even if you did that,
you wouldn't have that partner, right?
Because you don't want to be a CEO or a manager.
And that's what you would have to become with the money.
But if you had somebody who would do that,
that would really what it was.
Right. Lack of co-founder. Boom. Yeah. I think that's what you would have had to become with the money. But if you had somebody who would do that, that would really what it was. Right.
Lack of co-founder.
Boom.
Yeah.
I think that's what it was.
And so here's the thing.
Here's why open sourcing really was the right move.
And I'm like, this is,
I didn't know exactly what to expect, but when I sat down and I talked to a couple companies
to sell it,
it still didn't sit right with me
for the reasons we already talked about.
I just felt like it would have been kind of a sour ending to this large project that I've
been working on for a long time. And I like, I knew I didn't want to do that. I just really felt
like open sourcing was sort of like fulfilling the promise that I was telling people. It's like,
I'm in it for the long haul. Like if something doesn't work out, then, you know, there's a
potential for open sourcing it. And I, after doing that, I mean, honestly, it's been better than I could have ever expected.
There's, I got way more attention.
I don't like, it was number one hacker news
for that whole day.
I did not expect that at all.
I didn't really, I didn't even know hacker news
would like really care or know what actually even was.
But I guess it is, I built up enough
of an interesting product.
And there's the Discord has like, you know, it's got 600 users.
People joined it that first day.
600 new people in your Discord the first day?
Well, I was number one on Hacker News for the whole day, you know.
So it got 15,000, 20,000.
But here's the thing.
No, there's a really interesting model here, has potential of yeah this open source model um
and i so i haven't turned off my servers yet like i i still have you know it's down you know
50 100 people left and so i have down about seven that's what i was gonna ask is like why
not open source it but also just like keep building the business side because it's yeah
i mean so that is a totally potential option.
It's not something, I think, back in February
when I was really digging into this
and starting to build out the open source version,
I was pretty burned out on just the whole,
I just want my time at night back because I have a full-time job too.
Totally understandable.
Even when we give you this feedback,
I want you to understand we're not coming at you.
We're empathetically talking with you through your journey.
So do not feel like we're calling you out or saying you did wrong.
By no means.
Everybody's journey is tough, and you made choices.
I would say more than anything, Jared and I are trying to encourage you through the process.
I see so much possibility, but you've been through the thick of it.
Encouraging analysis.
Yeah.
So I just want you to understand that.
And the listeners, too, to understand that, too, that we're not coming at James by any means.
Yeah.
Well, that's what a lot of the, not a lot, but some of the Hacker News comments was like,
dude, this guy's got balls.
He dropped $3,000 a month on the floor.
And it's just like, I read comments like that, and I feel like they don't,
that goes back to the business money versus personal money type thing.
But I do think there is some truth to some of those comments where there probably was
potential.
If somebody was able to join me or figure out how to do this, make this work, then there
is possibility that there was some other outcome where we could have grown this into something
and it could have been good.
But I do think that there is still, I think it's probably even better now than it could
have been because there is this, the trust gained from having this open source model
is huge.
And so now it's like this very potent app of like very novel, very privacy focused.
Now it's open source, that component even builds even more of the trust in
the privacy focused aspect of it which honestly i think this i think this whole world is going to
move to at some point i think that it's also positioned in a point to where whenever we
switch even more to privacy focused stuff as people are getting more and more allergic to
everybody spying on each other especially with their finances that like this is a product soup
so well positioned to counteract that like all it takes is one bad post for mint or ynav you know
about them doing something bad with your data and actual b by the way when i open source actual um
or so no this was before i open source actual this is a little bit of a rabbit trail but
wine one of the reasons why i got 800 users i was about 500 back in november i think it was and ynav nixed their grandfathered plans
basically increasing the cost of ynav for all of these long-term loyal users they increased the
price for them uh by 100 it was going to be twice as expensive for them because they were getting
like a grandfathered price and it pissed
them all off. They had a huge
ton of people left YNAB around that time
and there was a post
on the YNAB subreddit
about YNAB alternatives and
actual ended up being
the top one, the number one
YNAB alternative
in that post, which is really cool.
That was a cool, I gained 300 users from that within like a month or two.
So that's another like, just need to market this probably a little bit better.
But so there is still this potential for this open source model, working it really well,
where you have this open source model, but you still have like open sourcing is great.
And being able to run it on your own server is great.
But it is still something you have to manage and do and it's just kind of annoying um so we could still
provide a hosted option and then the open source version just becomes a funnel into that hosted
option um and from all of this visibility that i've gotten there's actually one or two people
that i'm talking to who potentially could be a co not co-founder but like some sort of partnership role where they
are interested in taking on more of that business part and then they get some of the profit and it
just becomes like a mutual and so there's hope so like that i think is a very positive thing that
came out of open sourcing is that just like the exposure and yeah people kind of being surprised
that it wasn't doing better and so they were interested in being involved to help make it
better it's by no means the end of actual
it's just kind of like a new beginning
and it's opened up huge opportunities.
That's spectacular.
And it makes sense especially with this kind of app
because it's such a mainstream
potential user base.
That the further and further your app
moves away from developer land
in terms of the target audience
like it's not a dev tool, for instance,
the more you being open source for most people
doesn't matter to them at all.
They're like, oh, that's cool.
Maybe they're like, oh, cool, so I can trust it.
But they're never going to be like,
well, then I don't have to pay for it
because I can self-host it.
There's millions of people that will never do that.
And they're not on Hacker News' homepage.
So you expose it to those people, then they are you know early adopters and the ones that will self-host and stuff and
so you're not getting them as customers but as it spreads through that mechanism yeah more and more
of those people are not going to be running their own instance now maybe you'll have somebody stand
up their own instance say hey we also self- hey, we also host actual for $2 a month.
Then you've got to make moves, probably.
Yeah, and that is an interesting potential possibility, I guess.
Talking to people about partnerships
or do we want to have an official hosted version.
Open-source version is a little bit risky
because somebody could technically go along and do that.
We talked about like licensing issues.
Maybe there is a license that could use to prevent that.
But really when it comes down to it,
after talking to people, there's not really,
I think you burn more goodwill
with weird licensing issues like that
than trying to prevent that.
So I think the best thing to do is just to get out in front.
And if we're going to do that,
then we just need to do this sooner
rather than later
and prevent some side company
from trying to take this and do that.
But yeah, I think the good news is that
I think that even though people
might not really care about
the open source aspect of it,
it's just an interesting model for me
because a lot of developers are happy. I guess it's it's just an interesting model for me because uh a lot of developers are happy
i guess it's it's interesting to talk about now contrasting this with the prettier kind of to
loop it back all the way to the very beginning where when i was talking about prettier before
i was a little bit angry at open sourcing and the entitlement of developers and users of that kind of a thing. But with actual,
I'm sitting here now and I'm getting developers who, for some whatever reason, they care enough
about it that they're happy to do free work for the app. And there's this potential to have a
hosted version of it, which makes money for it. And so now it's like a lot of the development
burden has been lifted from me.
And if I have a partner who is going to take some of the business burden too, it's like takes burdens from both fronts. And now like, so even if the user is not directly care about the
open source, it still benefits the app because there are features that developers will come in
and just implement for the app and the users can end up just getting them for free. Even if like,
I would have never thought of that feature, right right so the open source is still beneficial for users too
so to summarize you were you didn't want to grow because you couldn't support it personally
as a solo founder you would love to keep doing it but that is you want to get your nights back
you couldn't do that because that would require growth and growth means you solo still yes you
need more users but you can't get more users because you won't work on more users because it's
like this cyclical thing happening here.
What you really need is,
is just really a co-founder to be in the CEO type role or that leader role and
let you be in more of a CTO tech lead type role where you can oversee product
and, you know,
obviously be joint on company decisions and things like that.
Doesn't mean you take a backseat by any means.
This is a lot like the story of InfluxDB.
Paul Dix, that was kind of similar to what he did there.
I don't know the exact story because I've had Paul himself on Founders Talk yet.
But I did have his CEO now on the show, and that was quite an interesting
story. Paul founded the company along with another person I can't recall the name of,
and in many ways, Paul helps lead in a lot of ways the direction of InfluxDB, the product direction,
et cetera, and permissive relations, open source, deeply rooted in open source.
But he's in the CTO role and not in the CEO role.
And I think the point of encouragement I would give you is that you can still build whatever this is,
even if it is open source, and still be successful and not have to be the CEO,
not have to be the one who is in that manager lead role.
You can still be in a lead role,
but on a more product and technical focused role rather than the CEO, how does the company have
finances and win in the marketplace role, which I think is more in line with the CEO role. It's
kind of, CEO kind of does a lot of those things, but if you have a CTO, which is pretty often as
a CEO, you let them handle a lot of those technical concerns and issues and you deal with different burdens.
But it's possible.
I still think there's a lot of possibility for you.
Thanks.
Yeah.
And it's something I'm still interested in.
I think I was more burned out, like I was saying back in February.
But now seeing just such a huge response to the open sourcing
it is it's very encouraging so that that provides a lot of like a chance to sort of not just give it
all up i guess which i don't think i was ever going to do totally but i think i was feeling
that a little bit earlier but now it's certainly like there's something here when you deprecated
the mobile apps which is like a big portion of the user experience right like you basically cut off two of the legs if it's a three-leg
chair stool you know that's two of the legs that's a lot and it's yeah it's it kind of sucks because
i wish i had the courage to just do that two years ago because as much as i am just a really
stubborn person and just really
wanting to prove prove myself in some way and like i really do enjoy doing like ios
not as much android but just like native apps uh i think it's they're really valuable and i do enjoy
but i should have just done that because it was such a huge i mean they're just they're written
in react native and they use the same back end so like all
of the logic is shared across them but the uis are are unique and they're different and i it was just
like such a that was a bad decision um because that was not a good time investment and being in
in the app stores i have a lot of gripes with app stores now too with like mobile development stuff
because like apple i was pushing out an update to my app
to just as for a simple bug fix um that was around the time apple was now requiring all users to use
their subscription model and they rejected my app because they said yeah you're not using our
subscription model you're using stripe and i didn't even like have a i didn't even have the
ability to have users subscribe on the mobile app. Like you don't, you could only log in.
They changed their rules to be more strict. And so you literally, if you use a thing that requires a login, you have to use their subscription service. And so I ended up setting all that up.
I don't know why I did it. And I, I did all that work and I got it working and it's fine. It's a
whole different sign in subscription flow. It's just like pain in the butt. So cutting that off
that really like i
should have done it two years ago and i could have gotten maybe i could have gotten a better balance
of work life stuff because that would have been able to you know just not as much work basically
but now it's like yeah again open source so there's some development help if i'm able to find
people to help with the with the business and now we can ditch the mobile apps that's a much better balance like that is that feels a lot healthier but yeah so and i just
investing in making the mobile or making the the app itself responsive and so you can actually load
it in safari on the mobile app or something like that because um and then focusing on focusing on
desktop as a primary experience probably and then the mobile app would just be,
you can see a lot of the reports and see your budget and stuff like that,
but there's probably going to be features that you just can't do there.
But make it work on web.
This episode is brought to you by Honeycomb.
Find your most perplexing application issues.
Honeycomb is a fast analysis tool that reveals the truth about every aspect of your application in production.
Find out how users experience your code in complex and unpredictable environments. Find patterns and outliers across billions of rows of data and definitively solve your problems.
And we use Honeycomb here at ChangeLog.
That's why we welcome the opportunity to add them
as one of our infrastructure partners.
In particular, we use Honeycomb
to track down CDN issues recently,
which we talked about at length
on the Kaizen edition of the Ship It podcast.
So check that out.
Here's the thing.
Teams who don't use Honeycomb
are forced to find the needle in the haystack.
They scroll through endless dashboards playing whack-a-mole.
They deal with alert floods,
trying to guess which one matters,
and they go from tool to tool to tool
playing sleuth, trying to figure out how all
the puzzle pieces fit together. It's this
context switching and tool sprawl
that are slowly killing teams' effectiveness
and ultimately hindering their business.
With Honeycomb, you get a fast,
unified, and clear
understanding of the one thing driving your business. Production. With Honeycomb, you get a fast, unified, and clear understanding of the one thing driving your business, production.
With Honeycomb, you guess less and you know more.
Join the swarm and try Honeycomb free today at honeycomb.io slash changelog.
Again, honeycomb.io slash changelog. And by our friends at MongoDB, the makers of MongoDB Atlas, the multi-cloud application data platform.
Atlas provides an integrated suite of data services centered around a cloud database designed for scale, speed, and simplicity.
You can ditch the columns and the rows once and for all and switch to a database loved by millions for its flexible schema and query API.
When you're ready to launch, Atlas layers on production grade resilience, performance,
and security so you can confidently scale your project from zero to one.
Atlas is a truly multi-cloud database.
Deploy your data across multiple regions simultaneously on AWS, Azure, and Google Cloud.
Yes, you heard that right.
Distribute your data across multiple cloud providers at the same time.
The next step is to try Atlas free today and have a free forever tier.
Prove yourself and your team that the platform has everything you need.
Head to mongodb.com slash changelog.
Again, mongodb.com slash changelog. so let's nerd out a little bit on some of the tech you have inside of this project because hey
it's all open it's all out there it's all there to be seen and heard although absurd sequel is not
in the actual org it's on j longster so
we'll make sure to link to that one separately but that seems like a good place to start because
this is like a separate project like you said actual uses it and it starts off the read me
this is an absurd project so you touched on it but give us the more of the deep dive what is
this thing why is it absurd why did you build it yes it's absurd because the
web storage apis are just absurd and this adds on additional layer of absurdity it's because
essentially i really wanted to use sqlite in the browser and so to do that you can use in a web
assembly compiled version of sqlite and so there's this big binary blob that you can download,
and it runs just fine.
The problem is that it doesn't persist.
And so in SQLite, usually it persists.
It knows how to persist to disk
by writing out individual small chunks,
usually on the size of like 4K blocks.
And so as the data changes,
it writes those blocks down into the disk.
The recommended way that I've seen before to persist sqlite databases before is to actually just write the
entire database to like index db and so you're literally if you have a 10 megabyte database
every single change you're writing down an entire 10 megabyte string like encoded string it's
totally ridiculous and horrible like it's just not that's just not going to work
and so the absurdity comes into play because the way that this works is it hooks into sqlite's
apis to write things down and it basically captures those requests it basically acts like a file
system so sqlite tells the file system to write down these 4k
blocks and then the file system goes and says okay i'm going to go and write them down on your hard
drive well with absurd sql what it does is it takes those blocks and writes them down into index
cb and so if you look in index cb in actual you'll see just and use you look at that database you'll
just see a bunch of pages meaning like each row or not not, each row is a is a is a block. And so there's
each row of a 4k binary, like array buffer. And so it's absurd. The one level of absurdity
is that it's translating SQL light, which is this normal database thing into index DB.
There's another another level of absurdity where there used to be this thing called web SQL, which actually was SQLite provided as a web API. So you could literally run like
SQLite SQL queries directly in the browser. And that was like another alternative to index DB,
index DB one out. So unfortunately, we need to do this weird hack where we stored in index DB.
Now the absurdity goes even deeper, most browsers use sqlite internally to implement
index cb and so technically speaking when you're using absurd sql to like store the sqlite data
in index cb what's happening is that it's storing it in index cb in these individual blocks index cb
is then taking that and cutting it up differently and putting each of those blocks and different things inside of a SQLite table on your local machine, which then that actually gets cut up differently and ends up in your hard drive in a totally different way.
There's like four different layers here that the web browser is forcing you to go through instead of just opening a direct SQLite file on your local machine and letting SQLite optimize against the pure
raw file access. Wow. Do you know why IndexedDB won out over WebSQL? The biggest reason,
I think Firefox was, or Mozilla was a big pushback or a company that pushed back.
I think Safari might, no, I think Safari was one of the ones that embraced it i can't remember
exactly but i think mozilla was one of the main ones that pushed back for with the reasons that
the apis were would be determined by sqlite like sqlite would be the referenced api for a web api
and that was concerning because they didn't control the web API, essentially.
Like when you run a SQL query
and give it to WebSQL
and it gives it directly to SQLite,
browsers can no longer tweak the API,
change the semantics and do things
and control it in ways that would be better for security.
Like say there's a security flaw
or there's something that they find problematic
with how it plays with the browser.
They have no control over that.
And so I do actually understand the reasons.
I think it's...
An alternative would be to subset SQLite
and say here is our allowed list of keywords
that you can use with SQLite
and we'll pass all those directly through.
But these are the ones we don't support.
Maybe that would be an option.
Something, I mean, there could be more nuanced problems
where it's not even just keywords,
but it's just like you do a select with an inner join
in a specific way that it ends up hitting some flaw
in the whole system.
But another way could be to fork SQLite, right,
and do stuff like that.
Have a SQLite-esque API.
Right, and it's something that they control,
but it's still, I think basically,
if you look at any web API,
you can go and hit a formal spec for that API.
You can go and see in this massive HTML document,
they all look exactly the same.
They all have the table of contents.
They all have exactly the same spec format. have the table of contents, they all have exactly the same spec format.
This did not fit that mold at all.
This doesn't have a spec.
The implementation is the spec.
And so I think web APIs tend to be kind of allergic to that kind of stuff
because it didn't go through the web standards process
and so it just isn't as vetted.
And so I think there's some fear for that because when it really comes down to it,
if they embrace this and it really came to be
this big thing and this big standard API, but there ended up being
some pretty critical security flaw, I mean that could be a
pretty big problem for the web. That could be a death
of the web type situation well
they could just patch it like they patch any other security flaws in the browsers right well it's
but what if like there it could be something intrinsic in how sqlite works because sqlite
was not built with the browser in mind right so there just tends to be i i don't know, I think I get the fear I think it's unfortunate that there wasn't a more
involved attempt to reach that need
I think it's unfortunate that IndexedDB
was the solution, I think, essentially
I don't know what the better solution would be
but it's unfortunate that it just died
without really trying out the things that we're talking about
Well it seems like it's never too late to add.
Like, IndexedDB is going to be there now. And it's there.
But local storage is also there.
And so maybe at some point they revisit and say
IndexedDB is clearly insufficient for developers' needs based on
the absurd things that developers are doing
in order to have an API that is useful and malleable
and desirable in the browser.
Hence, look at James Long's absurd SQL project.
Maybe it's time to give them something else.
I don't think it's too late for that.
I think, obviously, the original VHS versus Betamax is over
and IndexedDB won.
It looks like back on Can I Use WebSQL database,
Firefox never supported it.
Safari had support for Safari 3 through 12
and then they took it out.
So not sure of the story there.
And everybody else seemed to support it.
It still does, it looks like like just can't count on it being
there so okay absurd sequel i guess but the moral of the story is it's still faster than index db
isn't that what you said earlier in the show is that's the crazy part yeah those this was one of
those things that uh was like a rare combination of events that like i i implemented it to do to
get to a certain need
and then it like just there's these other compounding factors that sort of played out
which was surprising in a very very good way the reason is because index db is just very very slow
that's like one of the critical problems with it when you're doing like more than a couple reads
and writes it just gets very very slow especially in certain browsers. I think Chrome, I can say this with confidence, actually, Chrome was one of the slowest ones. It was pretty
bad. You can use transactions and you can sort of manually optimize it, but it gets very difficult
to optimize, especially when you're doing things at the application scale. And so with SQLite,
what it does is because it's writing down these 4K blocks, when you
make a bunch of writes, 4K is actually a lot of data.
And you can do a lot of updates into a pretty large, like you can update thousands of rows
in SQLite.
And it will end up only having to write to like two of those 4K blocks.
And so what you end up with at the file system, or not at the file system layer, but at the browser layer at the index DB layer is two rights. You write these two 4k blobs and like actually writing those 4k blobs, or writing one 4k blob is fast. It's like something about the actual overhead of a right in index DB that is really really really slow like writing 4k that amount of data
is totally fine that's like it's the same as writing like two bytes it's just something about
the actual write call and the transactional semantics and all of that is just really really
slow so if you update a thousand rows in absurd sql and just use sqlite you automatically get
that batching down to just two index cb writes instead of doing a thousand indexed EB writes,
which is just like incredibly slow,
unless you do it in a super specific way.
But that means that your entire app,
if you're writing it against indexed EB,
has to be aware of these like very specific pitfalls of performance.
Whereas with Absorbed SQL,
you get all of these improvements for free.
So you can just do as many writes and reads as you want to.
And it's just super, super fast.
For reads, it's the same thing.
You can read 5,000 rows and it ends up only doing three reads.
If you look at the graphs on my announcement post, it was insane when I actually benchmarked it out.
The performance of SQLite just grew as a huge like curve and then like the like if the y
axis is the milliseconds you'll see index cb is just like this small blue line as the rows are
getting larger at the very very bottom but index like sqlite is still going all the way up you
ever talked to richard hicks about this stuff sorry richard hip i haven't they actually just
released some sort of like in browser thing um and they were saying it's just not the same use case,
and absurd SQL is a great way to persist it.
But I should reach out now that it's kind of a proven project.
Yeah.
Well, worst case, he's just curious.
He was talking about the test suite.
That's another thing I was thinking about with actual.
Did you include the test suite with the open sourcing of actual?
Because part of the beauty of, you know,
if somebody grabs actual in the future, open source-wise and tries to beauty of, if somebody grabs Actual in the future,
open source-wise and tries to use it,
if they don't have your test suite,
then in SQLite's case,
then that's the cream of the crop.
They're running lame.
The massive test suite behind the scenes.
Yeah, it's an interesting model.
Do you have a test suite?
Actual does have a test suite.
I always got to clear that, just in case.
Yes, totally.
It doesn't cover everything,
especially at the UI layer.
It doesn't cover most of the stuff.
However, I literally took the folder actual
and I removed a bunch of the tracking
and subscription code,
but I actually published pretty much the folder as it is
with all the test suites and everything like that.
Oh, wow.
All right, so that's Absurd Sequel.
Links in the show notes.
What else are you proud of in terms of actual technology?
I think there's a lot of things I'm proud of technically.
I mean, the whole local first thing is pretty novel
because I think Absurd Sequel is really one cool thing to come out of this.
Another thing which I haven't really spun off as its own project or anything like that just because i don't really
i'm not super interested to do that is um the syncing engine and so you mentioned hearing me
on some other podcasts that's probably what i was talking about which is uh there's a whole
because it's local first you still want the ability to have your data on different devices
and like automatically have it backed up in a way so that if you just like drop your computer and it breaks, you don't want to
lose your data. I think that was one thing I ran into early on, which is like, man, this local
first step is so cool, but it really sucks that like, if I drop my computer, like it's just gone.
Like that's why the internet and the cloud came to be such a compelling platform. And so I was
talking to some friends and I was looking into it a little bit
and I almost didn't get this to work,
but I landed on an architecture
that ended up working really well
where all of the changes happen locally,
but they go through this system
using something called CRDTs
that it's a pretty elegant solution
to this whole problem
where it can sync these CRDT messages around
and everything always syncs up to the latest version and it can sync these CRDT messages around and
everything always syncs up to the latest
version and it's a whole custom syncing layer and it works
pretty well. So I'm pretty proud of that.
Why are you not interested in extracting that?
Just too ingrained?
It's kind of ingrained. It would take some work to extract
it out and I'm also not
entirely sure what I would really get out
of it. I think that there's
such a small amount of people that... Another H round another hacker news round yeah another project to support
so i think there is at this so i started that probably three or four years ago and there are
other projects a project called yjs which i would recommend linking to if you can it's another crdt
implementation um that there's other more mature projects there's that
and there's auto merge which is another part i think there's a third one too that i forget
that i would push people towards using i just don't have any interest in like competing with
those ones but like now that i've already ingrained it into actual and it works pretty
well like i'm not i'm not interested in switching mine to others but i wouldn't recommend sure you
know i'm not i'm not going to tell people to use mine when there are these other more
mature ones out there.
Comments on React Native.
It's like you're using React Native.
I am using React Native currently for the mobile apps that are, that are going away.
I think a lot of my problems with it are just Facebook's management of it because it's very
driven from internally.
They, they develop react native for
their stuff and then they sync out the changes to the open source world and it makes the whole
open source world feel kind of like a second class you know citizen it's a little bit weird to me
there's a company called expo that like does a lot of tooling and and libraries around react native
a lot of that work is really really really great it's a little bit
weird to me though that a lot of that's even required like i like to use things at its core
like i like to use it like straight out of the box because that's just usually that's the most
supported method um but like expo is kind of the most supported method now for react native
and it's a little bit weird to me that like a third party is the most support in fact i think
if you go to react native docs expo is like the thing to get started.
And I don't really understand why they haven't merged yet.
And I assume it just because of,
they don't want to be part of the Facebook org and all that kind of stuff,
you know?
So I think there's just like,
it feels messy.
It feels like I'm not sure who is what,
which libraries to use.
There's like a react Native reanimated library,
which is an amazing animation library
that fixes a lot of problems
with React Native's built-in animation library.
But why do I need to use an entire replacement
for the animation system?
And I feel like I have to glue together a lot of things
to get it to work well.
And so that's kind of annoying.
But it's a pretty good,
I'm very excited for the React Native
rewrite that they're doing.
They're actually rewriting
like a lot of the core components
to fix some of the pretty core problems with it.
And so I think there could be
a good feature for React Native,
but I'm a little out of it.
I haven't really used it for the last year
when I kind of stopped working on the mobile apps.
Well, your desktop app is built on
Electron, and you want it to be
fast and simple and privacy-focused.
There are alternatives upcoming around Electron. I think Tori is the one that people are talking about
today. We haven't really looked into that much, but Electron's awesome.
It also can hog resources. I'm curious if you've thought of if you've done any workarounds
or if you've thought of trying out something and the newer crop i think there's tori's the one
on top of my head but there's two or three kind of like we are cross-platform desktop frameworks
that are not electron it's kind of what their pitch is. And curious thoughts there.
Sure. I haven't experimented with them a ton.
I'm super interested in them.
Tori, Tari, however you say it, I have a lot of respect for it.
I know people who rave about it that I respect.
And so that typically is like a signal for me that I should look into it.
But I just haven't had the time to really look into it.
I should be relatively painless to port actual over actual already is works on the web
and so it works in most browsers and so if it's something that's using like the local version of
the browser should be totally fine i'm not embedding and assuming electron specific version
of the render is is there i don't do a ton of like desktop integration i don't do a ton of like desktop integration. I don't do a ton of like really weird native API usage of Electron.
Most of the app is pretty isolated in the web view.
So the one thing that I do use is the backend process.
When you call fork on Electron,
it actually forks a native node process.
Like it's as if you ran node from the command line.
It's just, it's pure node.
Like there's no UI. That is what the back end runs which is really nice because i just have a
pure isolated node process so i'm curious how tori solves that or how i would do that there if i can
spawn like a node process for the back end then i'm good but i haven't really had a chance to look
into them a ton cool that's a show we should also do. Adam, we're talking, what shows should we do?
I think a Tori show at this point
would be on point.
That's all for me. Any other cool
tech in there, James or Adam, anything you've been holding
back, questions to ask him?
Just to mention on, or a note on
Tori, we had a really good
episode with them
on GS Party, then rebroadcast
it on a changelog from 1Password.
And then
they're actually a premium sponsor
of Atari, so that's interesting.
1Password's a sponsor of Atari?
Yeah, they're a premium sponsor.
There's two tiers, just sponsors
and then premium sponsors.
Aren't they on Electron?
Are they built on Atari now?
I don't know, maybe there's something happening there.
Okay, interesting.
Any technological innovations that we haven't uncovered
or just hiding in an actual source code waiting to be found?
There's probably other stuff in there.
I think the syncing stuff and Absurd SQL
is really the two groundbreaking things, I think,
that are most interesting.
Well, the source code's open.
So go out there and dive into it.
Check out what James is up to.
I'm sure he's accepting contributions.
What's your call to our listener
if they're interested?
Is it the open source side?
Is it encouragement?
Is it check out Absurd Sequel?
What should they be doing
to connect with you
and connect around this project?
I think the
easiest thing is discord so if you uh i guess we can maybe add a link to the discord in the show
notes it's probably the easiest way sure to i don't have like a clear page to to just say right
now which has has the discord link we'll link to actualbudget.com which will link to most things is
slack is listed in your community section. So Slack is...
I got so burned out, y'all.
I haven't even updated it to Discord.
Just quit updating links and stuff.
We'll go direct to Discord as well.
We'll have all the links.
I mean, if you go to actualbudget.com
slash open source,
that does have a link.
That's my open source post
that does have a link to Discord,
which I will make sure is updated to the latest one but that's probably the best place to that's where the
community is very very active there and that that's where i haven't been as i just moved literally in
the last like two weeks and so i haven't really been involved there much but i do usually dive
in there every couple days and sort of just like involve and like talk to the community and so
that's where you can ask people you know how can i help like what's the community. And so that's where you can ask people, you know, how can I help? Like, what's the status of everything? I really would love soon help just maintaining the GitHub
project itself, you know, just setting up everything, setting up web hooks, making sure
actions work, just things like that, because there's actually a bunch of PRs out there that
I haven't had time to really manage. But we really really manage. But I need help setting up just a whole contribution process
for how you block PRs on reviews and things like that.
So if you have a lot of experience with that,
that's probably the most needed.
But I would say jump into the Discord if you're interested at all.
And there's a lot of really active people there to help get started.
Cool.
One correction you said, slash open source.
It's slash open dash source so if
you're listening and you went there and it 404s that's why we'll put a link in the show notes to
open dash source james so you're taking a break for a bit you think you're gonna take a break
for a bit what's a good hypothesis of what you might do in the near future as it relates to
actual are you breaking are you you getting back
with family in time and getting your evenings back like how you feeling you know i think the
open source scene uh or just all of the attention that it got from that was pretty encouraging like
i think if i'd open source it and all of my just existing users were like oh that's cool um and
then they started using the open source version i'd probably eventually you know not do much um but i'm kind of i'm re-inspired a
little bit so i i think i might um i'm we just moved and so i'm focusing on on all that right
now i think i'm just finding better balance and uh we'll just i kind of see my role right now as
sort of a project maintainer just like helping helping people get PRs in, answering the questions,
and just kind of helping the project along.
And then if there's a business partner and if one of those people work out,
then we might have a hosted plan coming out soon
that will continue that on in a different way.
It will look the same as current users,
but it'll be a whole new stack where it's hosted somewhere else.
That is a potential opportunity.
But right now, I mainly just see myself as a project manager
to help unblock people who are interested in helping get things done,
just helping get PRs in, basically.
So that's the near term for now.
But right now, my job and my family and my nights do come first.
So there'll be weeks where I don't do much, and that's okay.
That is okay.
Good for you, man.
That's good.
The one thing I think I want to give you a pat on the back for
is prioritizing your priorities, really.
So often do we just pursue things blindly in some ways
because we're passionate.
We like complexity.
We like to do clever things. We like
to innovate. We love to pursue the dream of something, right? But you got your family,
you got your girls, as you mentioned in the show, and making sure that you're the James,
you need to be the daddy, you need to be for them is the most important thing in the end.
Finding that balance is really the most important thing.
And we want you to have that.
We want you to have that balance and go back and get that balance.
And if the passion bug gets you again,
we want to encourage you in that path too and figure something out.
We think there's a lot of opportunity here.
Jared and I know we're asking lots of grilling questions about where you've been, choices you've made and whatnot,
but we just want to be a source of encouragement for you that when and if you pick the ball back up,
we'll be here to say, you can do it.
Well, cool. Well, thank you. I appreciate that.
It means a lot.
And thank you for coming on the show and answering all our questions
and exposing the world with your code
and all the cool stuff you're doing with Absurd
and actual server and just your journey.
We really appreciate you sharing a lot with us.
So thank you so much.
Yeah, thanks for having me.
I enjoyed it.
It was good.
All right.
That is our show.
Subscribe now.
If you're new, head to changelog.fm for all the ways.
Long time listeners, do us a solid and share the changelog with your friends.
That's the best way people find out
what we're up to. In fact, I'll cut you
a deal. Email a personal recommendation
to three friends and
bccjared at changelog.com
I'll send you a free
pack of changelog stickers.
That's a win, win, win. With win, win, win
we all win. Changelog++
members, stay tuned for your bonus pre-show backstage conversation.
We discuss so many things.
The market downturn, layoffs, collectibles like Ken Griffey Jr.'s Upper Deck,
Rookie Card, the insanity of modern-day shipping fees,
money for nothing by Dire Straits,
cringe laughing at comedians, and so much more.
If you're not a member yet, there's no better time to join.
Learn more at changelog.com
slash plus plus. Thanks again to our partners at Fastly for having our CDN covered, to BMC for
these dope beats, and to you for listening. We appreciate you. That is all for now. We'll talk
to you again on the next one. Outro Music