Going in Circles Just to Realize You're Already There

Dec 31, 2023

I think I’m nearing the stage of my life where something matters to me if I think it matters to me. And I care about productivity and being able to make things that are insanely great without having to work insanely hard.

Maybe I got a bit egotistical last year, but I went on this bender trying to rewrite all of my core services using typescript, node, and just “re-inventing” myself. I felt like the world was shifting and everything was changing and I wanted to keep up.

But here’s the thing about re-invention: actually, I don’t totally know what that thing is, but it’s possible to end up lost on the side of a freeway somewhere wondering why it’s taking 10 seconds for your blog to load a blog post.

Something about this felt off.

But it more than felt off – it was off. I vividly remember getting a page one night because someone was trying to load one of my blog posts and it was hitting some vercel filesize limit. I assumed I had gotten hacked, because why is my site trying to send a 100MB file response to someone anyways?

I’m not going to go deeper into what was going on there, because of the main point I want to get to: we’ve solved so many of these problems already. I had hosted a personal site in 2002 that served media larger than that, so why was I now, in the apex of my career, struggling to serve an imagine to someone visiting omarish.com?

The more I thought about it, the more I realized how messed up things had gotten. I don’t know how to put into words what is wrong, but here’s someone much smarter than me talking about rendering react using server side components.

React’s older features have been renamed to Client Components, and they can be used alongside new server features by adding the “use client” directive at the server-client boundary. Yes, the name is a bit confusing, as these client components can add client-side interactivity and also be prerendered on the server (same as before).


Hat tip to mayank.org for his deep investigation.

Surely there’s a time, a place, and a need for things like this. But the truth is, it’s not my battle to fight. I’m not sure if it ever was my battle to fight. But the less I think about this, the more peace I feel.

The Great Undoing

I spent a couple hours yesterday undoing everything I had done to my personal site. I pulled out the buggy notion renderer I wrote, switched back to render, and went back to a stack I was more comfortable with. In this case, I chose Ruby on Rails, but it was a a close call between that or Django. I know what you’re thinking, fellow reader. Look at this guy, all he does is write and rewrite and re-re-re-re-write his personal site.

And I’m not even going to deny that anymore. Yeah, this is probably like the 15th iteration of my personal page. But guess what? That’s how I want it to be. I started writing here in 2002 to impress a girl with my 1337 skills. I haven’t spoken to that girl in a long time but I’m grateful because teenage angst, when routed properly, can be used as rocket fuel.

So I finished (is something like this ever truly finished?) this, watched it deploy, and decided I was done for the day. It was 8pm, which, given my work schedule these last few years, feels like a half day.

For a fleeting second, I had this fear: oh no, what if someone tries to load my company’s dashboard site but they’re on a 3G connection on an airplane in the spotty parts of the sky and it takes a second to download a javascript bundle? But then I gave myself permission to move on. And I’m not going to optimize for shaving every millisecond of page load time anymore. I will always care about fast page loads, but I’m not going to spend more time caring about anything that’s smaller than a 50kb bundle. Sure, I could make it faster. But you know what else I could do?

These are the circles where I want to spin

I walked out of my home office, lifted my kids up in the air, and spun them around in circles and tickled them for an hour. In the middle of spending a quality hour with my kids, and for the first time in a few years, I didn’t give a shit about the performance gains that I might have from using the next greatest web technology. That person sitting on a plane trying to load the dashboard should just watch a movie, I’m not going to trouble myself or my team with a marginal 10kb bundle reduction.

After my kids went to bed, I went out for a spirited drive. 101 is almost as beautiful as 280 this time of year. I admired the billboards because this place is still, in my opinion, one of the drivers of ingenuity and the American dream.

I got back home, browsed the internet for a little while, went to bed, and fell asleep with a feeling of gratitude.

I’m all for being a rebel, but picking fights with the ghosts of chaos and complexity is a dangerous war. You start with something that sounds obviously good, like “of course I should standardize how all my personal websites and software is deployed” and next thing you know you’re growing white hairs and you are trying to fix the 7000th ESM versus CJS bug in a codebase that you think would be cool but has only brought you pain, loss, and has stolen you from your family.

Good intentions, met with an individual with even minimal autonomy but no sense of critical reasoning is insidious because it looks so friendly when it comes knocking at your door.

Programming languages and frameworks are a highly personal choice.

In the past I’d write a sentence like that and then edit it into oblivion and try and sound appealing to a “wide” audience. But there’s no such thing as a wide audience when it comes to a personal project. It’s just for you. Maybe someone else reads this, if so, hi nice to meet you. But to be honest, at this point in my life I’m just doing it for the lulz. And if you’re judging me for writing a sentence like that on the internet, then I’m judging you back already.

wowow, as they say.

A bad IDE is an IED

Has anyone else run into that strange thing in vscode where prettier just seems to stop working? Almost as if it’s decided it’s introduced enough beauty into the world and just stops formatting.

I like vscode (mostly), but wow one of the most difficult thoughts is the number of times I didn’t say goodnight to my kids because I was at work trying to solve a problem that I didn’t actually need to solve.

Other Thoughts

I’m trying to think of the point in time when I crossed the complexity rubicon. Where I got so invested in it that I feel like I started to lose my way. Maybe I got complacent. But it’s time to focus on fewer things and doing those things better.

Competition is not only good but it’s a necessity to make sure people don’t spend their lives arguing over whether it should be import { foo } versus import {foo}.

I don’t think there’s anything inherently bad in arguing about tabs versus whitespace. Like, think of the protagonist from flatland, where he could either 1) move left, 2) move right, 3) argue on the internet about tabs versus spaces.

Maybe it’s the same with RSC and other “debates” that people are having online right now. There’s nothing wrong with spending the holiday break trying to get your personal projects working with the next great thing; the only thing that makes it bad is when you’re not spending your time the way you want to be spending it.

So, to you, frontend maximalist: keep arguing. Keep fighting for what you think is right. Keep building the future you want to be living.

The secret of happiness is to see all the marvels of the world, and never to forget the drops of oil on the spoon.

I don’t think there is a pithy closing to this. There is no irony, there’s no feeling to evoke. There’s only whitespace and a blinking cursor: the closest thing I know to feeling peace.

I hope your 2024 is filled with everything that you’re seeking. And once you find what it is you’re looking for, I hope you also realize that the place you’ve been looking for all along might be where you already are.