You should be using custom feeds on bluesky

Custom feeds are an underused feature on bsky, and can really improve the experience.

Yes, a chronological feed is nice, but so is an algorithmic or limited feed you understand clearly.

In particular I use…

  • OnlyPosts: Top-level posts from accounts you follow, no reposts or replies
  • For You: It finds people who liked the same posts as you, and shows you what else they’ve recently liked
  • Mutuals: What it says on the tin, just posts from your mutuals
  • Quiet Posters: Highlights posts from people who don’t post frequently

Right now “OnlyPosts” is my default view, and I check out “Mutuals” regularly to make sure I don’t miss things from those folks. “For You” is for when I want to vary it up, and “Quiet Posters” is checked occasionally to surface things I missed.

My Following feed is demoted to the end of the list, and I’ve completely removed Discover.

There are a ton of custom feeds out there, and they’re worth checking out. It turns out algorithmic feeds can be helpful, but it’s nice to understand how they work and even better when they aren’t trying to sell you anything.

2025

2025 was an exciting, difficult, stressful, and very mixed year for me, and I’m really uncertain how to sum it up.

On the positive side:

  • I had a very successful professional year, including several big projects delivered and a nice promotion
  • More importantly, I also felt like my team really got a handle on our overall workflows and processes, getting into a groove rather than improvising (read: panicking) about everything
  • I’ve learned a ton about some technical areas I had never had the opportunity to dig into before, both in my work life and general interests. (So many good books!)
  • I kicked off a new D&D campaign with a group of friends that has been a great source of enjoyment and fun
  • I got to travel and visit with friends I hadn’t seen in a long time, at multiple points in the year
  • We adopted a puppy!
Maddie likes to jump directly at any camera pointed at her, making photos difficult

On the other hand…

  • It was a very rough year on the family health side, with both my mother and my partner struggling with major challenges, as well as a constellation of minor issues such that I never felt like I could really relax
  • While I felt very successful in my professional world, work was also extremely busy throughout the entire year, and I spent basically the whole year feeling like I didn’t have enough hours in the day.
  • The creeping fascism in the United States made my family substantially and materially less safe, as well as adding an undercurrent of dread to the whole year
  • Puppies are adorable but I haven’t had a decent night’s sleep in a month!

Overall if I had to sum up the year in a word it would be exhausting. I genuinely feel like I’ve been running as fast as I can all year, and there are whole months I can hardly remember except as a blur.

I’d love to say I plan to slow down in 2026, and I do hope to make some efforts in that direction…. but realistically none of the complicated areas in my work or my life are likely to change, and the world as a whole just looks more bleak. So a lot of my plans for next year look more like managing the chaos more effectively, rather than expecting it to go away.

On Friday deploys

This post from Charity Majors on Friday deploys is well worth reading.

In the past I’ve seen her comment on how deployments should be carried out fearlessly regardless of when, and I’ve often felt like saying “yeah, well, …”. Because of course I agree with that as a goal, but many real-world orgs and conditions make it challenging.

This most recent post talks about the situations when those freezes can make sense, even if they’re not ideal. And in particular I like the discussion about what really needs to be frozen is not deploys, but merges:

To a developer, ideally, the act of merging their changes back to main and those changes being deployed to production should feel like one singular atomic action, the faster the better, the less variance the better. You merge, it goes right out. You don’t want it to go out, you better not merge.

The worst of both worlds is when you let devs keep merging diffs, checking items off their todo lists, closing out tasks, for days or weeks. All these changes build up like a snowdrift over a pile of grenades. You aren’t going to find the grenades til you plow into the snowdrift on January 5th, and then you’ll find them with your face. Congrats!

Why generic software design advice is often useless

In You can’t design software you don’t work on, Sean Goedecke discusses why generic advice on the design of software systems is often unhelpful.

When you’re doing real work, concrete factors dominate generic factors. Having a clear understanding of what the code looks like right now is far, far more important than having a good grasp on general design patterns or principles.

This tracks with my experience not just of software systems, but also systems with a hardware component (eg ML training clusters) or a facility component (eg datacenters). The specifics of your system absolutely dominate any general design guidance.

As the manager of a team that publishes reference architectures, I do think that it’s helpful to clearly understand where your specific design differs from generic advice. If you’re going off the beaten path, you should know you’re doing that! And be able to plan for any additional validation involved in doing that.

But relatedly, this is part of why I think that any generic advice should be based on some actually existing system. If you are telling someone they should follow a given principle, you should be able to point to an implementation that does follow that principle.

Or else you’re just speculating into the void. Which admittedly can be fun but is not nearly as valuable as speaking from experience.

Large software systems

In Nobody understands how large software products work, Sean Goedecke makes a number of good points about how difficult it is to really grasp large software systems.

In particular, some features impact every part of the system in unforeseen ways:

Why are these features complicated? Because they affect every single other feature you build. If you add organizations and policy controls, you must build a policy control for every new feature you add. If you localize your product, you must include translations for every new feature. And so on. Eventually you’re in a position where you’re trying to figure out whether a self-hosted enterprise customer in the EU is entitled to access a particular feature, and nobody knows – you have to go and read through the code or do some experimenting to figure it out.

Sean also points out that eventually the code itself has to be the source of truth, and debugging requires deep investigation of the continually-changing system.

I’ve seen this happen in a bunch of different orgs, and it does seem to be true, especially for products with a large number of collaborating teams. I would add that in addition to the code itself, you often need to have conversations with the relevant teams to discern intent and history. Documentation only goes so far, eventually you need talk to people.