Ben Congdon

  1. Book Review: Antimemetics

    Source 1. Slippery Ideas Nadia Asparouhova’s Antimemetics is, itself, antimemetic.1 I devoured this book in a few sittings on the bus to work, but if I had to describe it, I really only have a few conceptual handles that I could grasp onto: Memes are ideas that spread easily. Antimemes are ideas that…

    Published

  2. TIL: SQLite's 'WITHOUT ROWID'

    By default, SQLite tables have a special rowid column that uniquely identifies each row. This rowid exists even if you have a user-specified PRIMARY KEY on the table. How this rowid column behaves is influenced by your PRIMARY KEY type. Integer Primary Keys: If you have an integer primary key, then the…

    Published

  3. Race Report: Seattle Marathon 2025

    Last Sunday, I ran the 2025 Seattle Marathon. This was my third marathon, and I got a PR! I’m splitting this race report into two broad sections: about the course, and about my experience/training/etc. The Course & Event Candidly, I’ve avoided running the Seattle Marathon in the past because I’d heard…

    Published

  4. Technical Escape Velocity

    1. When I was learning to program, I remember a specific phase transition in that process of skill acquisition – a distinct “before” and “after”, similar to how when learning to read there’s the “before” of ignorance, the “after” of effortlessly reading, and surprisingly little memory of the intermediate…

    Published

  5. Why Magnetos

    I’ve recently started on the journey to get a private pilot’s license. One thing I’ve enjoyed about the process so far is the extent to which you’re encouraged to understand how most of the systems work at a fairly deep level. Contrast this to driving a car, where you can mostly get away with “turn key…

    Published

  6. Schedule Recurring Calls With Your Far-Away Friends

    I enjoy conversations, particularly with people I care about. I also have a social circle which is rather geographically dispersed. This, of course, presents the problem of “how do I stay in touch with people?” Facebook et al. haven’t solved this problem in a satisfactory way for me. Discord / private…

    Published

  7. Fifty Bits of Career Advice

    As my team’s summer interns finished up their rotations this week, I had my usual end-of-internship “AMA” 1:1s. It’s something I enjoy doing, but I realized I was covering a lot of the same topics I’ve discussed with other previous interns and early-career engineers over the years. So I thought it’d…

    Published

  8. The Agency Gap

    There’s a line in Ben Kuhn’s essay, “Impact, agency, and taste”, that’s been rattling around in my head lately. He describes impact as the practice of “making success inevitable”. That phrase captures something important about how to approach work. Kuhn draws a distinction between two ways of approaching…

    Published

  9. When Red Buttons Aren't Enough

    On June 12, 2025, most of GCP went offline. This led to downstream outages in a multitude of websites and services, such as Cloudflare, Spotify, OpenAI, Anthropic, Replit, and many others. With a few days of hindsight, GCP published a quite detailed postmortem. Frankly, I’m impressed by the depth of…

    Published

  10. Why Developer Tools?

    I had the realization a year or so ago that much of the high-impact work I’ve done in my career has been related – directly or indirectly – to building developer tooling. I did not plan this, at all, but I’m quite happy to have found impact in this niche. My first job outside of school was writing a…

    Published

  11. The Models Want to Reason

    Since I wrote about COCONUT, Meta’s paper on reasoning in latent space, there’s been a wave in publicly accessible research into reasoning models. The most notable example, which overshadows everything else to the point of feeling like I almost don’t need to mention it as I write this in mid Feb 2025…

    Published

  12. How I Use AI: Early 2025

    Previously: Mid 2024 The landscape of AI tooling continues to shift, even in the past half year. This is not unexpected. This post is an updated snapshot of the “state of things I use”. Tools Work Copilot Edits: This feels roughly 85% as effective as Cursor, but the ability to incorporate enterprise…

    Published

  13. AI Slop, Suspicion, and Writing Back

    The impetus for this post was my recent realization that I’ve developed an involuntary reflex for spotting AI-generated content. The tells are subtle now, but (sadly? tellingly?) this sort of content is seemingly everywhere now once you start looking. The Rise of AI Slop One bit of hipster cred I get…

    Published

  14. Chain of Continuous Thoughts

    Recent advances in LLMs have demonstrated increasingly powerful reasoning capabilities, primarily through eliciting chain-of-thought outputs from models. While these methods have proven effective, they rely on discrete, tokenized representations of reasoning steps. A recent research paper from Meta introduces…

    Published

  15. Lake Union's Lonely Trolley: SLU Streetcar Ridership

    I lived in the Eastlake neighborhood of Seattle for several years. Eastlake, by its name, sits on the east side of Lake Union. As a runner, I spent many mornings running along the lake, passing by the South Lake Union Streetcar. Each time I ran past the streetcar, what consistently struck me as odd was…

    Published

  16. TaskWarrior

    I haven’t been writing much recently (sound of crickets coming from this year’s blog archive), but this is such an OnBrand™ post that I couldn’t not write it. At work, I’ve been shifting into more of a TL role, and as such I’ve been tracking an increasingly large number of streams of information. We…

    Published

  17. How I Use AI: Mid-2024

    I’ve been in a mode of trying lots of new AI tools for the past year or two, and feel like it’s useful to take an occasional snapshot of the “state of things I use”, as I expect this to continue to change pretty rapidly. Claude 3.5 Sonnet (via API Console or LLM): I currently find Claude 3.5 Sonnet to…

    Published

  18. Avoid Load-bearing Shell Scripts

    I’ve recently been contemplating a recurring pattern that I’ve observed in several teams I’ve worked on – the ‘Load-Bearing Script.’ The outline of this pattern goes like this: A team member writes a portion of a system as a shell script for a quick prototype. That shell script, initially quite simple…

    Published

  19. Soft Boredom

    I recently read Pema Chödrön’s Living Beautifully, and I was struck by the following passage: Chögyam Trungpa demonstrated the co-emergent nature of feelings in a teaching on boredom-on how we feel when nothing’s happening. Hot boredom, he said, is a restless, impatient, I-want-to-get-out of here feeling…

    Published

  20. Mental Models: Slack

    Two of my all-time favorite articles about managing one’s energy and time relate to the notion of maintaining “Slack” in one’s life. The first, Slack, by Zvi Mowshowitz, directly describes the Slack concept that I refer to in this post. The second, Sabbath hard and go home, expands on this notion in…

    Published

  21. The Soul of an Old Machine

    I recently got an M2 MacBook Air to replace my 2014 MacBook Pro. Apple offered to recycle my old machine (and give me a token $90 off my new laptop as a trade-in), which I gladly opted-in to. However, when it got time to actually wipe my old laptop and trade it in, I couldn’t help but get a little sentimental…

    Published

  22. Scala Pitfall: Parameterless Function Calls and Misplaced vals

    I’ve been using Scala for the better part of a year, and it’s mostly been an enjoyable experience. Scala fits in a comfortable position in the programming latent space somewhere in between Java, Python, JavaScript, and Rust. However, Scala is definitely a a “big” language – it has lots of language features…

    Published

  23. On Prompt Engineering

    [P]hysics simulates how events play out according to physical law. GPT simulates how texts play out according to the rules and genres of language. – Scott Alexander (Source) 1. Whence Prompt Engineering The notion of “prompt engineering” has been rattling around in my head for the last several months…

    Published

  24. 2022 in Review

    Previously: 2021, 2020, 2019, 2018, 2017 Another year come and gone. For me, 2022 had the feeling of being the first real “post-pandemic” year (despite the fact that I caught COVID in July). There clearly was a vibe shift this year, as the pandemic became less of a headline story, the war in Ukraine…

    Published

  25. My Favorite Books of 2022

    Previous book lists: 2021, 2020, 2019, 2018. My Reading List has a full log of the books I read. Another year, another slate of books to reflect back over! I read about as many books this year as I usually do (perhaps slightly fewer), but many more of them were read as audiobooks than I usually do. Non…

    Published

  26. On Personal Predictions

    For the last couple years, I’ve maintained a spreadsheet of personal predictions. It’s been a useful practice that I would recommend. “Personal” in this context has 2 meanings: first, that I don’t preregister or publicly publish these predictions; second, that the content of some of the predictions is…

    Published

  27. In Praise of Stacked PRs

    “Stacked PRs” is the practice of breaking up a large change into smaller, individually reviewable PRs which can depend on each other, forming a DAG: I wrote about this in my post about git-branchless, but I think the practice itself deserves its own post. Why am I so enthusiastic about stacked PRs? They…

    Published

  28. So long, and thanks for all the Gophers!

    In some ✨personal news✨, I’ve recently left Google. It was a great ~3 year ride, and I couldn’t have asked for a better place to begin my career. Obligatory badge-and-laptop goodbye photo Whenever I’d interview candidates for Google, a frequent question was “What’s the best part of working there?”. Invariably…

    Published

  29. Mental Model: Difficult Problems vs. Hard Work

    In “Difficult Problems and Hard Work”, David McIver writes: An idiosyncratic distinction I find useful (though don’t reliably stick to) is that there is hard work and difficult problems, and these are not all that closely related. The distinction is roughly that something is hard work if you have to…

    Published

  30. You Need to be Wrong (Sometimes)

    To be a well-calibrated predictor, you need to to be wrong (sometimes). “Well-calibrated” means that if you predict something occurs with X% probability, then that event actually occurs X% of the time. Since predictions are often made on one-off events, another way of expressing calibration is that X…

    Published

  31. Mental Model: Stages of Change

    A useful mental model for reasoning about behavior change is the Transtheoretical model – sometimes also known as the “Stages of Change” model. This model describes the phases of human behavior change: Precontemplation (“not ready”) – “People are not intending to take action in the foreseeable future…

    Published

  32. NYC 2022 Observations

    I spent a week in NYC earlier this month. Here are some unprocessed impressions I had of of the city, as of Summer 2022. (Disclaimer: Many of these are probably so obvious as to be uninteresting) Transit Google Maps’ subway directions work great in NYC. The schedules/transfers were accurate, and the…

    Published

  33. Tools for Making Difficult Decisions

    The most difficult decisions are when one needs to choose between options that are equally good or equally bad. This is nearly tautological: if you’re choosing between a good option and a bad option, just choose the good option. Similarly, if there is a clear “lesser of two evils”, then that is the obvious…

    Published

  34. Manifold Markets

    I’ve been playing around with Manifold Markets recently. Manifold is a fake money prediction market platform whose differentiator is that it allows anyone to create arbitrary prediction markets. Unlike other platforms1, that moderate market creation and resolution criteria, Manifold users can make whatever…

    Published

  35. One Weird Trick

    Over the past few months, I’ve been hard at work trying to reduce the latency of workflows for one of the APIs that my team owns. Last week, I discovered a small change that had a larger impact on reducing latency than 3 months of work. Somewhat embarrassingly, that change was effectively “don’t call…

    Published

  36. Kindle Snippets Viewer

    TL;DR: I wrote a little web app to view Kindle Highlights; you can check it out here. One of my favorite features of reading books on Kindle is that you can highlight interesting quotes as you read, and revisit those highlights later. Your Kindle highlights are saved to The Cloud™️ for books that you’ve…

    Published

  37. List of Lists of 2022 Predictions

    Life can only be understood backwards; but it must be lived forwards. - Søren Kierkegaard ‘Tis the season for prognosticating 2022. It seems like January now brings a deluge of folks registering predictions for the upcoming year (and, even better, scoring their previous predictions!). I’m becoming more…

    Published

  38. 2021 in Review

    Previously: 2020, 2019, 2018, 2017 To expect the unexpected shows a thoroughly modern intellect. - Oscar Wilde From the record-breaking heat wave to the record-breaking cold-snap during which I’m now writing this post, 2021 in Seattle was truly a land of contrasts. More seriously, 2021 is a strange year…

    Published

  39. My Favorite Books of 2021

    Previous book lists: 2020, 2019, 2018. My Reading List has a full log of the books I read. Fiction The Overstory (Richard Powers) The Overstory is a story about trees, the people that endeavor to protect them, and how rooted human culture is in nature (pun intended). The story is told from half a dozen…

    Published

  40. Branchless Git

    Git is a (in)famously polarizing tool, and there are as many distinct Git workflows as there are developers that use Git. However, since Git has the most mindshare of any extant VCS tool, it’s worth finding ways to make it more comfortable to use. One Git usage pattern that I think is underused is the…

    Published

  41. Using Embedding to Disambiguate Types in Go

    A few weeks ago, I stumbled upon a trick to use Go’s type system to disambiguate between variants of credentials on a RPC service I work with. The premise of the example is that we’re writing an RPC request handler that needs to perform two outbound RPCs – one to an external service that uses user credentials…

    Published

  42. Recently - October 2021

    WFH, Month 19 I was pretty heads-down on work this month. I’m working on a relatively greenfield project that’s had some fun opportunities to make architectural decisions. It’s very satisfying work, but it’s the type of work that stays stuck in your head, making it hard to switch out of “work mode” at…

    Published

  43. Features of Excellent Code Review Tools

    Last week, I onboarded onto a new code review system. In learning how to review code in this new tool, I got to thinking about best features of previous code review systems I’ve used. What follows is an opinionated (and very incomplete) list of what I think are “table stakes” for code review in 2021…

    Published

  44. Recently - September 2021

    New Tools This month I put some time into writing a couple more Datasette-adjacent tools: (See previous Datasette posts) instapaper-to-sqlite - 📑 Export your Instapaper bookmarks to SQLite overcast-to-sqlite - 🎧 Download your Overcast listening history to sqlite Instapaper: For a while, I’ve been using…

    Published

  45. Preventing Link Rot in my Obsidian Vault

    As I’ve written in the past, I’ve been using Obsidian to store notes, links, and other “outboard brain” type information that I want to keep track of. As my Obsidian vault grows, one thing that becomes more of a risk is the potential for link rot. Much has been written about the problem of link rot,…

    Published

  46. Recently - August 2021

    August was a fun month for me. I’ve picked up a new habit of taking pen-and-paper notes while reading non-fiction, and it’s been pretty engaging. So far, I’ve noticed that I retain content a lot better when I take notes, though it does take substantially longer to get through books this way. I don’t…

    Published

  47. B-Trees: More Than I Thought I'd Want to Know

    Recently, I’ve been reading through the excellent Database Internals (Alex Petrov, 2019). The first half of the book is dedicated to the implementation of database storage engines – the subsystem(s) of a DBMS that handles long-term persistence of data. A surprising amount of this section discusses the…

    Published

  48. DIY Air Quality Sensor

    It’s shaping up to be another intense season for wildfires on the West Coast. Last year, we had about 2 weeks where the air quality was bad enough that we needed to limit our time outdoors. It’s been on my mind to stock up with supplies for wildfire season. Air filters (for reducing the amount of smoke…

    Published

  49. Recently - July

    I skipped the June edition of these retrospective posts, but in the spirit of not breaking a habit more than once, I’m back with July! I was hoping that COVID was pretty much “over”, but with the delta variant and my work pushing back our return-to-office until mid-October… the pandemic is very much…

    Published

  50. 2,000 Days Later

    On January 1, 2016, I started a daily journaling habit. As of today, I now have 2000 daily entries – a continuous run for over 5 years1. 🎉 My “journal” started as an accidental offshoot of one of my early Quantified Self projects. The goal was to keep a log of how I was feeling each day, so I could…

    Published