More from Tom MacWright
September was another big month for my life, mostly for me offline. Another good month for bicycle riding, seeing more of the trails on Randalls and Wards Islands. The New York area has taught me a few things about islands and one of them is that they're very fungible. On a map, Randalls and Wards Islands look one one island because they're "conjoined". They were conjoined on purpose: they used to be two, with a bridge and everything. But then in 1955 the government announced they wanted to join up the islands "by allowing private contractors to dump debris within Little Hell Gate for free" (!) Photo from From City of New York Department of Parks: 28 Years of Progress, scanned by Erica Fischer (!) CC BY SA 2.0 The opposite happened with Fire Island: it was one island for a while until 2012, and Hurricane Sandy broke it back into two. Photo from USGS, PD Dump trash to combine islands, dump water from the sky to divide them. That's just how life is. .two-up{display:grid;grid-template-columns:1fr 1fr;gap:10px} Listening I watched Magnolia this month and finally got the hype around Aimee Mann. It's a little frustrating that the songs from the film aren't on And a throwback: Dusty Springfield's version of When the Love Light Starts Shining Through His Eyes. Originally recorded by the Supremes and forgive me for highlighting the blue-eyed soul version of this song but it's so driving and urgent in a way that most of the other versions aren't, it's such a good slice of that very particular rushing rhythm of the era. Reading On a meta-level: I'm getting pulled back to Instapaper from Readeck, because I rely on offline reading so often and unfortunately the Readeck iOS offline mode is unreliable. It is open source and I should contribute and in all likelihood the issue will get fixed, but in the meantime I need something to look at on the subway. Reading: I enjoyed Spiral's launch post a lot, as well as turbopuffer's post about their refactoring. Database companies in the AI-adjacent space are a nice hybrid kind of reading, still concerned with architecture and a little more grounded than a lot of the "big idea" or marketing-centric stuff that I read from AI labs. I also liked Charles Broskoski's "Personal Business" essay (one of the are.na founders). And I've been really liking reading Work by Bud Smith. Review of that soon. Otherwise The end of October will be even more packed than September for me, so if I don't post, don't worry, I'm not dead, I'm partying.
I skipped August's Recently because this summer has been relentless, mostly in the positive sense. July and August were filled with bike rides, 5K races, friends in town, life changes and logistics. For a friend's birthday, we rode the rickety Coney Island Cyclone, which was faster and more intense than I remembered it. But it's been 18 years since the last injury on the coaster, and the rider was partly at fault: good enough for me. .two-up{display:grid;grid-template-columns:1fr 1fr;gap:10px} I rode my first proper randonneuring ride: 200km (124mi) to all of the beaches around Brooklyn. It was pretty challenging, as you'd expect, but I didn't 'find my limit' for endurance, but I did find my limit in terms of how many gels & ride-nutrition packets I could consume before sugar becomes repulsive. I do still heartily endorse maple syrup packets for ride nutrition: compared to the space-age fuels that all taste like fruit or coffee, it's an identifiable substance that tastes like you'd expect. And, not pictured, but I ran a bunch of 5Ks. Haven't hit my goal this year of going sub-20, but got close in the last one - 20:15. I'm not giving up yet, because the weather is getting better and Brooklyn has a lot of 5K options. Listening Hot Creek by Duffy x Uhlmann Duffy x Uhlmann has been in my rotation for a year now and the new album has all the things I like from the combination. This and Shrunken Elvis go along well together and both have been hits at dinner parties. This album from Frances Quinlan, the frontperson of Hop Along, went under the radar, but it's so good. I've also been playing Hop Along's send album Get Disowned. I really like everything that this band has put out. It's a product of Philadelphia but I hear some of the elements that drew me to DC post-punk in the turn-on-a-dime songwriting. Get Disowned by Hop Along Watching This video, 'The surprising truth about what motivates us', is kind of an artifact of the 'Obamaverse', as one of my friends would put it. It's by Daniel Pink, a writer-speaker-self-help kind of guy, and it's accompanied by one of those realtime hand-illustrations. There are lots of reasons to tune it out as YouTube filler. Still, I thought it was pretty cool for two reasons: first, it connected directly with Andrew Kelley's video, which is the next one. And it connects with my feelings about incentives and how most simple incentives are counterproductive. And second, the drawing is real. I'm so used to the artificial version of this visual style that it took a minutes to realize that the it wasn't AI or some 'drawing hand' style of video essay, it was a real person making quite nice illustrations: specifically Andrew Park. Found myself nodding along to every bit of this interview with Andrew Kelley. His values and motivation are so nice to encounter in this current phase of tech. He's kind of a role model, which is something that I used to find trite in my early career but I'm coming around to. As Adam Neely pointed out in his video, a lot of the people heavily using Suno (an AI music tool) could not cite any role models, and defaulted to a sort of enclosed, self-centered stance. I see this with engineering too: it's hard to discern what values or talents the people at 'the forefront of the industry' have that I want. Finding personal qualities as something to imitate instead of desires and possessions (cue the segue into Girard's Memetic theory) seems like a better way to live. Reading What strengthens a relationship? Almost always, it is personal investment. Perhaps an AI agent might be better at predicting what my father will want for his birthday than I am, but it definitionally cannot give him my time and consideration. Love is not just a feeling; it is a way of paying attention. Elizabeth Lopatto in The Verge picks apart Mark Zuckerberg's weird, sad view of humanity. It's worth a read even just for the incredible opening anecdote. Home of the titular 100 foot waves. Which existed when I was a kid of course, but the larger world didn’t know about them yet. They were our secret. My grandfather and I would walk to the lighthouse and watch the waves hitting against the cliffs and he’d tell me that these were the biggest waves in the world. I didn’t believe him, of course. I thought it was standard grandpa hyperbole. But I also didn’t want to believe that I was seeing the biggest of anything. Not yet. I wanted the really great things to be in the future. Something to aim for. Which means I missed out on some great things that were right in front of me. Mike Monteiro's newsletter is always beautiful and melancholy, and this is a really nice edition of it. I read and highlighted a few other articles but they were all saying things about AI, mostly about how it makes the world worse and makes people feel bad. I won't add those to the pile because I don't want that kind of content to dominate what I mention, even if it does dominate what I read. Elsewhere For the Val Town blog, I wrote about our experience with the bug bounty program. It's been a very interesting experience. Val Town has a pretty difficult security surface: in contrast to Mapbox, which was mostly a read-only API, it's a very read-write system with many access controls. At the center of the product is a sandbox that we want to keep secure. And because we're living in the AI age, a single bit of functionality can be exposed via REST API, React Router loaders, tRPC, and MCP. Building a model layer and a shared authorization layer - modeled after Oso - has helped a bit. But the reports still come in. It's pretty wild how AI factors into it: I'd say that 100% of the vulnerability reports used AI to write the report itself. From the best reporters, the vulnerabilities come with screen recordings and evidence, and it's clearly not all-robot. But - I suspect that other people manning help desks & bug bounty programs know this experience - it's jarring to go three replies into an email conversation with someone and they suddenly stop using an LLM to write their emails and the voice completely changes, from hyper-literate to abbreviated and misspelled. I also wrote about our new authentication scheme that makes vals require login and makes it possible to manage permissions to val applications, not just their code. It was pretty fun to implement, and the sixth or seventh time working with HMAC schemes I'm starting to get a natural grasp on them.
Back in 2022, I wrote Web technology optimism hour, highlighting the things I thought were cool about the state of technology. Time flies. Let's do it again. It's still easy to be pessimistic, but it's nice to mine your feelings for the positive ones. The elephant in the room is AI, but I don't feel like throwing another post into the gravity field of that topic. Without further adieu: TypeScript 7 It's here, finally, and it's faster. In the last edition, one of the headings was "Rust and Go based tools are making TypeScript development faster." At that point we had a few upstart projects for minifying, transpiling, and bundling TypeScript. Those tools have become standard-issue. But TypeScript, the actual type-checking of the language and the language tooling in editors, was still a bottleneck. There was exactly one implementation of the TypeScript type checker, and it was implemented in TypeScript, so it ran at JavaScript speeds and had limited ability to become multi-threaded. Unfortunately there's still only one game in town for TypeScript type checkers: it's still just Microsoft. But they rewrote TypeScript in Go for TypeScript 7 and it's much, much faster. This is one of the most noticeable changes to my day-to-day coding in a while. Plus, even better: TypeScript 7 supports the Language Server Protocol! As I wrote about in 2024, Microsoft invented TypeScript and also the Language Server Protocol, but TypeScript never implemented the Language Server Protocol. So there was no standard way for other editors, other than Microsoft's VS Code, to provide language tooling for TypeScript. This was suspicious behavior because of the company's history. But now: it just works. Neovim can support TypeScript 7 with its built-in Language Server support instead of someone wrapping the VSCode extension in an LS-protocol shell. So: a big win. Hooray for the new TypeScript: it's faster, it supports open standards, and now there are two TypeScript implementations. Now all we need is one that's made by someone who doesn't work at Microsoft. The Effect ecosystem is exciting I've been writing little development logs about Effect over the last year or two. I'm excited about Effect. It's a big, all-encompassing system, but I think it has a lot of potential and is arriving at exactly the right time. This is an era of supply-chain risk and I think there is, and should be, a swing away from the tiny module ecosystems in NPM. Software that's composed of hundreds of little modules from hundreds of authors is a lovely idea that doesn't work with malicious actors. The swing is toward larger, buttoned-up libraries, and Effect is really well-positioned for that. It has type validation, observability, state management, fancy data types, and lots of functional programming helpers all under one roof, in one package that's pretty well-maintained and heavily tested. It's also very, very typed, which makes it safer to use at scale. And it makes limits a lot easier: you can just stick an Effect.timeout on anything and prevent network requests or database queries or anything else from taking too long. The same with concurrency, it's very easy to limit concurrency. It's ready for a very uncertain world where you have to validate and be careful about everything. But at the same time, it's fun to use, if you're that kind of person, which I am. Bluesky and Mastodon are successful, meaningfully decentralized systems I use Bluesky and Mastodon all the time and both just work. They don't feel like tech demos, it's not all nerds using them. The uptime is pretty good, the featureset doesn't seem limited by the technology choices. And yet both are legitimately decentralized (in different ways) networks, with really interesting ideas about security, privacy, and community systems. Bluesky is aggressively building out its protocol as an independent technology from the social network, and as I learned at their conference, there are lots of creative people building on the technology. There's a big gap between a cool tech demo and a user-friendly popular service, and both of these have bridged it. It's exciting, and shows that you don't have to accept a bad set of tradeoffs to make tech that's both principled and popular. Signal, WhatsApp, iMessage, and RCS are meaningfully secure messaging platforms I want to just celebrate the end of a technology: SMS. It's so good that people don't use SMS anymore: it was needlessly expensive and extremely insecure. My texts with friends are almost exclusively on Signal & iMessage, and occasionally WhatsApp. Now, WhatsApp is a mixed bag and nothing's perfect, but it's cool that the secure options recommended by the EFF and other sources are also popular options that people use every day. That's also pretty important from a privacy standard: having Signal installed on your phone is normal because it has a wide userbase, but the same would not be true if it was only used by people attending protests and being wary of government surveillance. Hardware update cycles are slowing People are hanging on to their phones and computers for longer. I'm part of this trend - my iPhone hit its fourth birthday, and I have no reason to even think about replacing this computer. With the exception of their batteries, modern laptops and phones are robust: they're water-resistant, made of durable materials, and basically just work. You could read the same data differently: maybe people are upgrading slower because they have less disposable income. I'm not sure that's true. But either way, it's good that upgrade cycles are longer: it means less e-waste, less pollution, less churn overall.
June was a big month: I went to Porto & Lisbon, and had a lot of life stuff happen. I'll get into the trip once I get my rolls of film developed. Three rolls at a new photo developing place: fingers crossed! Reading I finished reading Intermezzo (of the bag) and it was fantastic. I've always liked Sally Rooney's books but this was the one where the writing style really clicked. Also, The Vegan. Meh. I read Patricia Lockwood's 'A Tradcath Wedding' via Perfect Sentences but found an additional sentence to be perfect: Whenever they rang the chimes, which seemed to be every four seconds or so, a toddler screamed ‘WOW A BELL!’ to the visible displeasure of the celebrants – though isn’t the entire point of the ritual that you’re supposed to be that awestruck every time? Patricia Lockwood is the funniest writer I've read. You cannot grow a pumpkin, but you can improve the odds. Taylor's 'You Cannot Grow a Pumpkin' is a fantastic little prose poem of sorts. Watching I'm always trying to find a 'romp' when it comes to movies. Something lighthearted, pretty easy to watch, so on. We watched The Pink Panther this month and it is a perfect example of the genre. The inspiration for the watch came from the hamburger scene: But there's so much more of this kind of thing in the movie, little bits and physical comedy. Oh, and I also watched The Departed, which everyone says is good and is good. Elsewhere I wrote Accidental Anonymity on the micro blog, and it stirred up some discussion on Bluesky as well as at least one blog response. It was kind of an angry piece, as I said at the start. I will keep trying to stay out of the trap of writing about that topic all the time. Listening The only album I bought this month was Songs of Her's by Her's, which is fine. I wish I had something more profound to say about it given how the band met an unbelievably tragic end. Maybe more influential than that was Know Your Enemy's recent podcasts, especially this one about the pope's encyclical. I've really grown to love that podcast, and it has been part of me intellectually reconnecting with, but not readopting, Catholicism. Art Here's some art I really liked this month: This Hockney piece called 'Picture Emphasizing Stillness' from 1962 was at the MAC/CCB museum in Lisbon. Via Tim Babb, I enjoyed finding Tomás Sánchez's work.
More in programming
This post was previously published through my newsletter on November 9, 2026. From time to time, I will republish newsletter issues on my blog here if I think people (and search engines) might benefit from it. If you want to read everything I’ve written once it is posted, I recommend signing up for the newsletter. If you’re doing anything to stay on top of what is happening in the world of software testing and test automation, like browsing or even posting on LinkedIn, which I stopped doing for the foreseeable future, or reading blog posts - my preferred way of keeping up these days, and I highly recommend Dawid Dylowicz’s excellent Software Testing Weekly aggregator mailing list if you prefer longer-form reading, too you’d be thinking that AI has consumed our entire field, and that everybody (or at least those who post or write in public) is an AI expert these days. The reality, though, is far from that. Yes, some people use a lot of AI, even when I would only call a small fraction of them ‘experts’. I definitely do not classify myself as an ‘AI expert’, by the way. A much larger group uses AI on a less frequent basis, and they’re getting some value out of it. Sometimes more, sometimes less. That’s the group I’m probably in. And then there’s a group of people who haven’t really been using a lot of AI at all so far, beyond maybe the odd prompt to ChatGPT or Claude. I don’t have the actual numbers, but I suspect that this group is a lot larger than you would think from browsing your feed or surfing the blogosphere. You just don’t see them, because they’re typically not the people who do a lot of work in public. A few weeks ago, I started working with a small group of testers to teach them how to use AI in their daily work. This work covers both test automation as well as broader software testing tasks, as some of them contribute to automation on a daily basis, but not all of them do. I’m working with them one day per week, on average, for three months, and we’re making small steps towards making AI a more prominent tool in their tool belt. So, what are we working on right now? I’m pulling ideas from my ‘Valuable Feedback, Fast with AI’ course, and so far, we’ve spent some time setting up Claude, going over some important concepts such as context windows, models, tokens, and (of course!) the probabilistic nature of LLMs, and what that means for the results they provide. We have gone through several initial conversations, using Claude to learn more about and review specific user stories, which was an excellent segue into using talking about MCPs and setting up a connection to both Jira and Confluence using the Atlassian MCP. Last week, we also started experimenting with writing straightforward skills to make it easier for Claude to repeat certain actions in a structured way. These actions ranged from reviewing stories and acceptance criteria to refactoring small chunks of code in their (Robot Framework-based) test automation suite. What I loved about this is the avalanche of ideas that popped up in their heads when they saw how easy it was to use Claude. We made a short to-do list of ideas to try out for the next couple of weeks, and I’m looking forward to seeing them getting more confident around using Claude. One thing I have noticed is that their level of comfort around using AI varies quite a bit. Some of them are naturally quite cautious, which means they’ll ask ‘can we really do this?’ and ‘should we really do this?’ frequently before even submitting a single prompt. This is a good habit, I think, but we’ll have to do some work to get them more comfortable with using LLMs, without losing too much of that caution. Others in the group are the opposite: I need to hold them back a little, because otherwise they’ll create a beautiful mess within days, simply because they see so many opportunities to use Claude in their work. That, too, isn’t inherently bad, but I do want to teach them not just how to get the most out of an LLM, but also (more so) how to use AI prudently. Over the next couple of months, we’ll dive deeper into writing better prompts, creating and structuring skills, better context management, and creating and using agents, and probably a few more things, too. I’m looking forward to seeing these people grow more comfortable around using AI in their daily work, and figuring out where AI genuinely adds value and where it doesn’t in their own context. Is there a deeper message in this newsletter? Maybe not, and I’m just happy to tell you about this project, and how it is a great example of a what I call ‘corporate mentoring’, a very efficient way of teaching a small group of engineers new skills, within their own context. But maybe it’s also to show you that, despite what you might see on the Internet, especially those places featuring a lot of self-congratulation (I’m looking at you, LinkedIn), not everybody out there is an AI expert. At least not yet. So, if you feel like you’re ‘behind’ simply because you’re not running at least 17 agents continuously, creating 5400 merge requests per day, know that you’re not alone. Quite far from it, I would say.
The economics of software engineering have fundamentally changed.
How effect handlers removed control-flow plumbing from query-json
An introduction to ZKeys: a new service that stores encryption keys off-site and automatically locks access to them if the client machines go offline for a long period of time.