MoreRSS

site iconSam RoseModify

Since the start of 2023 I've been creating visual and interactive introductions to computer science topics.
Please copy the RSS to your reader, or quickly subscribe to:

Inoreader Feedly Follow Feedbin Local Reader

Rss preview of Blog of Sam Rose

2025

2025-12-23 08:00:00

This last year marked a fundamental shift in my professional life, and I'm going to reflect on the journey that got me to it.

In 2023 I wrote Load Balancing. I had been writing blog posts since 2011, but Load Balancing was like nothing else I'd experienced. After a retweet from Josh Comeau it spread far and wide, and my phone didn't stop vibrating for 2 whole days. I was instantly hooked and needed to experience that again.

So I wrote Memory Allocation, which had a similar response. I started to think I was onto something. I'd found something that was fun, challenging, not being done by many others, and lots of people liked. It felt like the pool of potential topics was infinite. I could keep going for years.

Then another thought entered my mind...

Aren't you sick of chasing other peoples' dreams?

I was. I really, really was. I sit in the privileged position of deeply enjoying the work that I do. Programming computers is a joy and I love it as much today as I did when I discovered PHP for the first time in 2007. But what to do about it.

When I was in high school, one parents' evening a teacher told my parents that I would make a good teacher one day. I was 15 or 16 and thought absolutely nothing of it, I just liked helping people. Then in my first job I got similar feedback one performance review. I was good at explaining things to people. I thought nothing of it, I just liked helping people. But...

What if I actually am a good teacher?

So I made the decision to drop down to 4 days a week in my day job, create a limited company, and start testing this theory. Initially I spent the time writing more blog posts, to see if I could keep the momentum going. I even landed a sponsor, the wonderful ittybit, which was a huge boost to my confidence.

Then I landed a client that I did some tutorial writing work for. It paid well, enough to make me start thinking there might be a future where I could do this full time. But... it wasn't what I wanted to be doing. The work that paid well wasn't the work I'd set out to find. I'm sure many people before me have independently discovered this.

I knew quickly that freelancing wasn't for me.

Around April/May time I was diagnosed with tennis elbow after struggling with arm pain for some months prior. I'm not new to hand and arm pain, I've had bouts of pain in the past and made many ergonomic adjustments to my setup. But every time it reminds me how careful I have to be with my body. I need to be able to code for another few decades yet, and doing that in constant pain is not appealing. I scaled back the freelancing to give myself more space to recover.

I still suffer with tennis elbow. It comes and goes, and when it's bad I tend to switch away from using a mouse to controlling my computer with my voice using Talon. It's a remarkable piece of software that I'm grateful exists. Even if you don't need it today, you might tomorrow. Consider supporting their Patreon.

And then in July, ngrok reached out to me.

They had actually been in contact earlier in the year, around March, about some freelance work but the conversation petered out. I was a bit upset that it had, because the work had sound fun and much more in line with what I was looking for. In July, though, the message was different. The title of the email I got on July 10th, 2025, was: "What if you worked at ngrok?"

We talked a lot. I was cautious. Freelancing had taught me what I didn't want, and I was scared of pivoting my career into a role I didn't like. I wanted to continue this blend of education and art I'd come to love, and be known for.

As it turns out, ngrok wanted that too. They had a vision that closely matched my own, and they were willing to invest in me to see if it could play out in a commercial setting.

We came to an agreement at the end of July and everything was signed and returned in August. I was to start as a Developer Educator in September.

This was my first job in marketing.

Every job prior to this one has been in the engineering department of companies. I had no experience working in marketing, and the first weeks were rough. Lots of acronyms I didn't know, KPIs that were unfamiliar to me, and tools I'd never used before.

On top of that, ngrok's blog used a CMS system that wasn't going to work for the type of posts I, and they, wanted to write. I had to be that guy and suggest changing everything before I could get to work, but I was given a lot of agency to make it happen.

After a lot of feet-finding and a short but intense project to shape the blog into something I could work with, I got started on my first big project on November 11th. I was worried about how long it had taken me to get to the point where I was starting the work I'd been hired to do, but everyone was extremely supportive.

Beyond my wildest dreams.

Prompt Caching was published on December 16th and initially sank to the bottom of Hacker News and my socials without much fanfare. I was gutted. I knew that not everything takes off first time, plenty of my past posts haven't. But this felt different somehow. I'd invested 5-6 weeks of full-time effort, effort ngrok had paid me for, and had nothing much to show for it. My boss asked me in a 1:1 if I thought publishing on a company blog is inherently more difficult than publishing on my own blog. I think that would be a comfortable thing to believe, but I don't think it's true.

Then, on December 19th, I woke up to several messages from friends to say that the post was on the front page of Hacker News. I checked and sure enough, there it was. Around 10th place, but on the front page nonetheless. From there it took on a life of its own. It never really got much higher than 10th on HN, but it spread across Twitter something fierce. I got DMs from friends saying they couldn't reload their feed without seeing it. It was surreal.

Simon Willison said it was "one of the clearest and most accessible introductions to LLM internals I've seen anywhere." It ended up in the tldr ai newsletter. It got tweeted out by the former #1 chess player in India.

Maybe I can do this.

So I sit perched on the edge of one of the best years of my career, and I look out on everything that might be possible in 2026 with anxious excitement. I think about all of the people I've had the fortune of meeting through my writing, the friends I've made and the opportunities that have come from it.

I don't think I'm being dramatic when I say that writing on this blog has changed my life. Without Load Balancing, there's simply no way the last few years would have panned out how they did.

To everyone who's read my work, shared it, commented on it, or reached out to me: thank you. You have my deepest gratitude. I hope I get to keep doing this forever.

Big O

2025-08-23 08:00:00

This post includes custom components that need to be viewed on my website. Sorry, I know it's not ideal.

Reservoir Sampling

2025-05-07 08:00:00

This post includes custom components that need to be viewed on my website. Sorry, I know it's not ideal.

Turing Machines

2024-12-20 08:00:00

This post includes custom components that need to be viewed on my website. Sorry, I know it's not ideal.

A Commitment to Art and Dogs

2024-06-01 08:00:00

Back in Memory Allocation, I introduced Haskie.

A husky puppy looking triumphant

Hello!

The idea behind Haskie was to create a character that could ask questions the reader might have, and to "soften" the posts to make them feel less intimidating. I got some feedback from people that Haskie was a bit too childish, and didn't feel like he belonged in posts about serious topics. This feedback was in the minority, though, and most people liked him. So I kept him and used him again in Hashing.

Having a proxy to the reader was useful. I could anticipate areas of confusion and clear them up without creating enormous walls of text. I don't like it when the entire screen is filled with text, I like to break it up with images and interactive elements. And now dogs.

Then in Bloom Filters, I found myself needing a character to represent the "adult in the room." If Haskie was my proxy to the reader, this new character would serve as a proxy to all of the material I learned from in the writing of the post. This is Sage.

A husky looking happy

Well met!

I liked the idea of having a cast of characters, each with their own personality and purpose. But I had a few problems.

# Problems

Both Haskie and Sage, because I have no artistic ability, were generated by AI. Back when I made them I was making no money from this blog, and I had no idea if I was going to keep them around. I didn't want to invest money in an idea that could flop, so I didn't feel bad about using AI to try it out.

Since then, however, I have been paid twice to write posts for companies, and I know that I'm keeping the dogs. It wasn't ethical to continue piggybacking on AI.

While ethics were the primary motivation, there were some other smaller problems with the dogs:

  1. The visual style of them, while I did like it, never felt like it fit with the rest of my personal brand.
  2. It was difficult to get AI to generate consistent dogs. You'll notice differences in coat colouration and features between variants of the same dog.
  3. The AI generated images look bad at small sizes.

So I worked with the wonderful Andy Carolan to create a new design for my dogs. A design that would be consistent, fit with my brand, and look good at any size.

# Haskie, Sage, and Doe

A husky puppy called HaskieA husky called SageA husky puppy called Doe

The redesigned dogs are consistent, use simple colours and shapes, and use the SVG file format to look good at any size. Each variant clocks in at around 20kb, which is slightly larger than the small AI-generated images, but I'll be able to use them at any size.

Together the dogs represent a family unit: Sage as the dad, Haskie as the youngest child, and Doe as his older sister.

They also come in a variety of poses, so I can use them to represent different emotions or actions.

A husky puppy called Haskie looking boredA husky puppy called Haskie looking concernedA husky puppy called Haskie looking confusedA husky puppy called Haskie looking triumphantA husky called Sage looking cautioningA husky called Sage looking cautioningA husky called Sage looking despairedA husky called Sage looking proudA husky puppy called Doe looking amazedA husky puppy called Doe looking mischievousA husky puppy called Doe looking protectiveA husky puppy called Doe looking proud

We were careful to make the dogs recognisable apart. They differ in colour, ear shape, tail shape, and collar tag. Sage and Doe have further distinguishing features: Sage with his glasses, and Doe with her bandana. Doe's bandana uses the same colours as the transgender flag, to show my support for the trans community and as a nod to her identity.

# Going forward

I'm so happy with the new dogs, and plan to use them in my posts going forward. I suspect I will, at some point, replace the dogs in my old posts as well. I don't plan to add any more characters, and I want to be careful to avoid overusing them. I don't want them to become a crutch, or to distract from the content of the posts.

I also haven't forgotten the many people that pointed out to me that you can't pet the dogs. I'm working on it.

Bloom Filters

2024-02-19 08:00:00

This post includes custom components that need to be viewed on my website. Sorry, I know it's not ideal.