For the past couple of days, I’ve been waking up around 3:30 AM, excitedly jumping out of bed to make some tweaks to the website you’re reading this on1. I’ve spent a lot of hours updating it to the latest version in hopes of improving the build time of 3 seconds, which is abysmal. After all this work, the build time is now down to about 100 milliseconds.
Of course, for one reason or another, it’s precisely now that I stumble upon Bret Victor’s seminal talk with the core argument being that it’s very wrong to have a delay in the feedback loop when you’re building something and that you should strive to make that feedback loop as tight as possible. I’m now very satisfied with the latency of the feedback loop being measured in milliseconds. I’ve underestimated how important this is, as these changes have now inspired me to make further optimizations that are now a joy to work on.
I’ve been delaying all this maintenance work as I didn’t consider this work important and saw this website and its source only as a vehicle for delivering blog posts. This is the primary reason why the entropy accumulated to such an extent that it was frustrating to even do the work that was allegedly the sole purpose of this website – writing blog posts. See, whenever I had a problem, I would just search for the plugin that solved it and just forget about the problem. But that, of course, resulted in the accumulation of technical debt, which I didn’t think something as simple as a static website could have.
The plugin added support for PostCSS to Jekyll so that I can use Tailwind. The fix to make the site pleasurable to work with was just to remove that plugin and run the Tailwind CLI in a separate process. Making live reloading work (which of course didn’t work with the initial 3 second build time) was a little finicky, but in the end simple to fix after taking a little break. This is just another example of the lesson that I should be skeptical about using libraries that wrap other tools to add support for something. It’s always better to just use the thing directly.
But to get back to the point, I’ve spent dozens of hours optimizing this website and I don’t regret it. In fact, I’m glad I did it. The best thing about having a website like this is how much learning happens, just like with any side project.
These past couple of days, I’ve learned a lot, not only some CSS features that I’m not going to disclose out of embarrassment for learning about it only now. I’ve used Claude Code and, in contrast to how I’ve been feeling about it during my work hours, I’ve been pretty impressed by it. See, I wrote a custom plugin for rendering emphasized code blocks2 but I knew that it wouldn’t work if I updated to the latest version of Jekyll.
Thankfully, Claude added support for the latest version and even added tests to make the future upgrades easier. Of course, it didn’t think of the simple fix to the initial problem, of changing the configuration a bit, which means I lost a lot of unnecessary hours trying to make the plugin more performant with various hacks and whatnot.
All in all, I’m glad I didn’t listen to the voices of doubt in my head as I started this upgrade process, that told me that I should update to some more performant static site builder, like Hugo. I wasn’t confident that Jekyll builds could be fast, especially with PostCSS. But I’m glad I can say that this site is running Jekyll since 2011 and it’s going to stay that way.
1. For some reason I’ve been following my own advice.
2. You can see it in action here.