Doing exactly one thing at a time
I first heard this from Alex Vasquez of CodePen:
Only do one of these at a time: learn new tech or solve a new problem. Do not do both. One is a magical number. Do one thing at a time.
(Here’s where they say it, the entire podcast is a great listen: https://blog.codepen.io/2022/08/03/379-chris-alex-have-been-running-codepen-for-10-years-what-have-they-learned-heres-the-top-10/#t=00:23:25)
It sounds so simple, so obvious, but is such incredible advice. It has taken me a while to really internalize why, and how to apply it.
Alex quotes a similar example, but for this blog, I was tempted to experiment with new, shiny tech as I usually like to do, but I stopped myself. You see the whole reason I even built this was to make sure I had a place to write about new things I learn when I learn them. You might not believe this, but this is how I ended up here:
- I was talking to a friend over Zoom, and thought really? This is the best we can do? Let me see why video conferencing is so hard.
- I went in deep, and as I was building the website, realized that I wanted to fetch fonts from a CDN. I wasn’t about to feed Google, so I thought I’d take a detour and build a font service on Cloudflare Workers.
- I spent a week on this (I’ll release it when the frontend is ready and the performance is acceptable), and realized that there wasn’t a cheap, fast replicated database to match the distributed-ness of my Workers.
- I know! Let me see what it’ll take to deploy RocksDB to Fly.io regions across the world! One thing led to another and I’m reading up on Raft and building a distributed database of my own. Oh, and I’ll build it in Rust because I’ve been itching to find a decently large project to learn how to ship bigger things in that language.
- Gotta learn about TLS if I’m to secure this. Like, really learn TLS, all the details.
- I’ve been learninig tons of new things everyday, and I wanted to be able to write them down, mostly for my future self. I would have liked to tweet about it, but I never gather to motivation to do it, so I’ll just write stuff down on Notion.
- Hey I’ll build a blog, shouldn’t take more than a day.
I fully intend to unwind my stack and eventually get back to my video conferencing app, and I genuinely enjoy these detours (they teach me so many things I would never think to investigate), but they also leave a trail of unfinished, abandoned projects. I want to finish things. I know I won’t release them till they’re just right, but I just want to get to the point where things mostly work, so I can actually start perfecting them (“make it work, make it right, make it fast” and all that).
Fortunately, Alex’s words helped me ship this blog in 5 hours (!!!). I wanted to check out Astro, VitePress (I don’t even know Vue, I thought I’d pick it up as I go 😐), and so many other things, but I would have wasted away an entire Saturday if I went down this path. Instead, I picked my go-to stack (Remix, Tailwind, CF Pages), and gave myself 4 hours to finish the whole thing. The end result has to make it easy to just write things down and publish them as quickly as possible. Can’t look ugly either. I overshot by an hour, but I solved one problem at a time (building the thing, instead of pretending to build the thing by learning Vue/Astro or whatever).
On a similar note, I’ve been trying to implement TLS for my distributed database, but in the spirit of “one thing at a time”, I spun up a brand new project, and focused on just TLS, outside of my database, and guess what, it came so naturally. Integrating it into my database took less than a day. Doing them both together would likely have cost me an entire weekend, most likely more.
All this being said, I think there’s nuance to this advice, and there’s a skill to applying it that I’d like to develop. I could have started building my database in TypeScript, so I could focus on building the database instead of struggling with a new language, but I think doing it in Rust has made the thing challenging enough to keep my focus.
Anyway, if anyone’s reading this, solve only one problem at a time.