One of the biggest cultural shifts in my experience from Mozilla to Stripe is code review speed. At Mozilla you'd often wait days and have to hunt down people to review PRs.
At Stripe my PR is often reviewed within 10 minutes.
That makes a _huge_ difference for shipping fast
I'm open-sourcing Actual.
I'm sad that I couldn't make it work as a sustainable company, but I've seen the magic of open-source before and I'm excited about what can happen here. Read more!
🎉 It's finally ready! I've been hacking on something for the past couple months and it's absurdly great. It's time for more powerful web apps.
Announcing "A future for SQL on the web":
I've:
* Never used TypeScript. Used Flow once.
* Never used Parcel, or any other newer bundler (mainly CRA now)
* Never used Elm, did a little bit of ClojureScript
* Never done serverless
* Never used Vue
I don't feel behind. I chose my stack and I'm shipping with it.
I'm tired of demos. It's time to see if this async version of React really works.
I flipped it on in my (changed 5 lines of code) and this is the difference. It completely changes the user experience. There's a lot of little things left to do, but this is huge. Awesome work.
I've implemented full undo/redo in
@actualbudget
. Any action can be undone/redone, even across any screen. Totally changes how you use the app - no fear of mistakes. Will be released Monday.
I almost want to never write TypeScript again because of how condescending people are.
I know what I’m doing. I’ve been in this field for over 15 years. There are other approaches, ya know? Some of you need to try other types of languages.
I like TypeScript, but I’m still not convinced it’s worth it when exploring architectures. I’ve ripped out and completely reshaped something 3 times. Would have completely wasted time trying to type it first.
It's ridiculous that we don't pay for open-source software. I find a good quality package that handles a lot of complex logic that I don't have to write myself, giving $20 is a no-brainer. Maybe $100. Maybe more.
I wanted to take some notes on the airplane so I pulled up Notion but it wouldn’t load because of lack of internet. This stuff kills me, it’s not acceptable
Cool, got it working. This is _not_ using the server for syncing at all, this is the entire backend running in a background process with SharedWorker. All tabs connect to the same worker and share the same app. Makes for lightweight clients, all in sync, flexible workflows
I'm going to be learning AI from scratch.
No hype. No grand vision. Just learning the fundamentals of how it works without any end goal in sight. It's clear we'll need to know this.
Interested in following along? I might start a newsletter
The most critical skill you can develop as a maker is to learn how to take a product/feature/etc and cut it into 1/10 the size, and fearlessly ship it. Find the tiny bit that still makes it useful and only build that.
I seriously need to sit down and blog about the architecture of Actual. It's so cool.
* Local app, with a syncing layer that gives stuff like undo for free
* It runs on the web too. The whole node backend is compiled and run in a worker
* Uses sqlite, compiled to wasm on web
Fun fact: I created Prettier solely for
@actualbudget
. I was so tired of being bogged down with formatting.
@Vjeux
pushed me to open-source it and helped make it a standard tool. Solving your own problems is the best!
I've spent the last couple months quietly building a mobile app for
@actualbudget
, and more importantly, rebuilt the database layer to be syncable. I'm so excited about how all this works, here's a quick demo of two desktop clients syncing in near real-time:
My 5 year prediction: we'll realize it was a mistake to write all of our high-level tools in a language built around systems-level memory safety (Rust)
You should *absolutely* study why something gets popular though. But you don't have to change anything unless it really provides enough value to you to be worth it. Who cares about hype.
🤔 What is this? Actual in a browser? Hey, it works! In Firefox, even! It's amazing that the UI only needed a few tweaks to work in other browsers. The backend is compiled with a virtual FS and runs in a web worker.
Y'all, if console.log is your jam, that's fine. I've been talking to devs as I work on the DevTools and this aligns with things I've learned from devs and mostly why I shared this. You do you.
I think symmetry is more important than abstraction in code. It’s way easier to get right and serves a similar purpose. A large system is easy to understand if you see the same patterns everywhere.
Hitting scaling issues with PostgreSQL. Yes! The best kind of problem!
Now I need to figure out how to make a query on 11644420 rows take less then 3 seconds.
I enjoy my current setup (working from home, seeing kids a lot), but the worst part about working on something alone is there’s nobody to get beers with after a good launch
I owe all of my success to one simple thing in morning routine:
Every single morning, in the shower, I let a little bit of shampoo slowly drip into my eye. The sting makes me feel alive and increases my productivity for the next few hours 5x
This phenomenon is so fascinating: you build something, find extremely negative comments about it (from randos), reply and engage with them kindly and they become super interested in what you’re doing and almost apologetic. It’s crazy.
Native selects really are awesome. They can expand past the window (see the screenshots). Did you know they also autocomplete? If you typed "big p" below it would end up highlighting "Big Projects". Make sure you really need that custom autocomplete.
🌟 Just launched a fresh new version of my personal website:
And I wrote a new post about why. I'll be writing about everything I've learned building Actual and trying to bring it to profitability over the next year:
The responses to this are amazing. I still can't believe it's become such an ecosystem standard. Props to all of the Prettier maintainers who made it go mainstream.
I've been wanting to give that talk for a long time, thanks
@dotJS
! Just explained how to practically use clocks and CRDTs to implement local apps that sync. Slides coming soon.
Here is the example app that includes all the code (~800 lines of JS!):
Nothing shows the state of the JS ecosystem better than the fact that there are two packages, `node-uuid` which generates insecure uuids (dangerous!) and `uuid` which generates secure uuids (yay!). It's basically a coin flip.
Main thing that makes me sad about React is the lack of solutions for offscreen rendering, animations, child->parent communication, better events etc. All client-side stuff. Current focus feels very different from what a lot of people want
This is shaping up to be a great release, so I'm going to do something I should do more often: a thread of features and UI polish in the next release of
@actualbudget
:
First, the coolest feature: the ability to float the sidebar (thanks
@NotionHQ
for great UX ideas)
Granted, I've studied all of these things, some of them deeply (ClojureScript, Flow). My point is it feels like the frontend space moves fast but it really doesn't have to feel that way. What I'm using worked the same 2 years ago. And it works really well.
A clear sign if your tests are good or bad: after refactoring something significant, what is the experience like getting the tests passing? Do you spend days/weeks frustrated doing grunt work w/out finding anything interesting? Or do you spend that time discovering new problems?
I'm extremely excited to be a part of this!
Check out all the exciting workshops already available:
I would be giving more workshops soon but have personal stuff going on until August.
The gap between a weekend hack project and a product ready for production is so large. Larger than I thought. There are so many little things you need once you want to have real users.
Recently tweeted about creating a discord to manage my life. Well I did it. I made a bot that obeys my command and it's freaking amazing.
I'm connecting all my stuff to it (github notifications, subscribe to rss, etc.)
It can also write out: example, this channel writes to Roam
New year, new site!
Not a blog. I'm killing my blog. let's focus more on a graph of ideas
using Remix, this reads directly from my Roam graph and publishes that content. reading is slow, but a simple Cloudflare cache in front solves the issue completely
Tip: don't let callbacks with dynamic args get you down in React. You can still retain identity across renders to avoid rerenders by memoizing the curried form. In plain terms: the same function will always be passed in so you don't break pure checking.
The modern version of the lonely "finding a forum post describing my exact problem with no replies": finding a github issue describing a real problem with many replies confirming it, only to end it an automated bot closing it due to inactivity.