Much of our work at Buttondown revolves around resolving amorphous bits of state and cleaning it up to our ends, particularly state from exogenous sources. This manifests itself in a lot of ways: SMTP error codes, importing archives, et cetera. But one particularly pernicious way is straight. An author can come to ButtonDown having already set up a Stripe account, whether for some ad hoc use case or because they were using a separate paid subscriptions platform such as Substack or Ghost that ...| Applied Cartography
Once upon a time, I wrote weeknotes for Buttondown. I’ve started them up again—the first edition is linked below. I’ll spare you the navel-gazing about whether they belong there or on the blog (I cover that in the other post). In short: this won’t really affect the blog. Most of what will go into weeknotes are things I’ve been too much of a coward to blog about until now. So, consider this just more content for your enjoyment.| Applied Cartography
I'm spending a lot more time lately using Pulumi. This is for a handful of reasons. The two biggest ones are as follows.| Applied Cartography
I wrote two days ago about how our pytest suite was slow, and how we could speed it up by blessing a suite-wide fixture that was scoped to session. This was true! But, like a one-year-old with a hammer, I found myself so gratified by the act of swinging that I found myself also trying to pinpoint another performance issue: why does it take so long to run a single smoke test?| Applied Cartography
The speed of Buttondown's pytest suite (which I've written about here, here, and here) is a bit of a scissor for my friends and colleagues: depending on who you ask, it is (at around three minutes when parallelized on Blacksmith) either quite fast given its robustness or unfathomably slow.| jmduke.com
We have wrapped up the formal portion of DjangoCon. DjangoCon is not Buttondown's first conference that we've sponsored, but it is the first one that we've actually manned a booth at — and we did so in a fashion that I would describe as idiosyncratic, ramshackle, and informed by a charming bootstrapper ethos — which is to say, deeply on brand. We didn't really know what boothing was like, so we showed up with a stack of postcards because everyone loves a good postcard.| Applied Cartography
Tomorrow, I am taking a very early morning flight to Chicago to attend DjangoCon US. Buttondown is sponsoring, less as an exercise in lead generation and more as an act of circuitous open source sponsorship, and perhaps "sponsorship" is not quite the right word compared to gratuity in the most literal sense. I have been writing Django for fourteen years now: I started during 1.3, a hinterlands time that I remember mostly in two respects:| Applied Cartography
One extremely compelling form of blogging, both for the reader and the writer, is the admission of defeat. Seriously: whenever you find yourself faced with an empty iA Writer window and a dearth of ideas, ask yourself "what have I been wrong about this week?" and let the digital ink flow.| Applied Cartography
One of the amazing things about Morrowind is that it's a combat-rich game in which you can feasibly go through much of the game without ever fighting; indeed, gaming up your Disposition with every NPC you meet is a key to a much easier and interesting experience.| Applied Cartography
The summer heat in Richmond clung to everything this August like a second skin, broken only by afternoon thunderstorms that sent Telemachus scurrying to his fortress of solitude (the upstairs bathroom), and Antibes — Lucy's first European stamps in her passport, her delight at the Mediterranean blue (all ten minutes of it before we scurried to shade), her confusion at why Papa kept trying to order things in a language that clearly wasn't working. The wedding was beautiful; the pissaladière...| Applied Cartography
It seems fairly clear that, as far as product lifecycle goes, GitHub is in its “Azure metered billing” stage. I don’t mean this as a negative value judgment in of itself — who am I to argue that GHE is not, from a certain utilitarian point of you, more valuable to the world than all of the things I’m about to kvetch about? — but two things seem quite clear:| jmduke.com
Trundle is not quite the right word. When I hear trundle, I think of layers, of wool and dampness, of hitting the road before the sun does, wrapped in a blanket and uncaffeinated haze. One cannot trundle in the summer, and so this morning we did not so much trundle as we did shuffle our way to the car: Haley and I sporting matching pairs of sunken eyelids and cans of Celsius that could not kick in soon enough; my mother, gracious as ever, bright-eyed and cheery at 6:00am, and Lucy, still wear...| Applied Cartography
After what has felt like a long winter of habitual reliance on my existing tools, I’m finally playing around with some new ones. This is a healthy habit—so long as you don’t convince yourself that you’re just one more App Store download away from a previously unimaginable level of personal satisfaction and joy.| jmduke.com
Telemachus turned five, two weeks ago. He did not have a great July; Richmond's been roiled by storms (ten nights in the past two weeks have ended with him hiding in the bathroom before bravely emerging at two in the morning, having wisely assessed that the threat has passed); add to that the fireworks on the fourth and the fireworks from the Flying Squirrels games the corgi blood pressure is high.| jmduke.com
My wife got sick this past weekend, and as a result we had to cancel or at least postpone a trip to Seattle that we had been looking forward to. She's feeling much better now, and I am left with the task of recouping what I can from our reservations — a task much more satisfying and much less stressful than force-feeding her electrolytes and naan.| Applied Cartography
More than anything else, Bodies Bodies Bodies is a perfectly reasonable and delightful way to spend 90 minutes. It is beautiful, well-acted, and consistently funny, with a banger soundtrack and a propulsive pace. Much like Glass Onion, I think a lot of the attempts at social commentary work better if you treat them as being in service of broad comedy rather than any meaningful point; this is not a horror or a satire so much as a comedy film in the vein of Game Night or Do Revenge, where half ...| Applied Cartography
There was a point in my life where I was excited about the Apple Watch. I think in no small part because it represented a new frontier in consumer technology. I was the consumer for whom marketing material about leaving your phone at home and going for a run listening to music really resonated. I was also the consumer for whom sleep tracking really resonated. In many ways, I am the perfect ICP for Apple's marketing—an affluent yuppie with social and physical aspirations and a fervent believ...| jmduke.com
This is the fifth summer that we've stayed in Richmond since moving back east, and therefore also the fifth soilday of our backyard garden. Our garden is not spectacular, but it is special; it is both calendar and time capsule, a lodestar around which we orient our daily lives and our memories of the years past.| Applied Cartography
Simon Willison writes about the recent Cursor changes:| Applied Cartography
Jesus, nobody twisted your arm to be here today. You're here of your own volition. You like to think the weight of the world rests on your shoulders. Like this place would fall apart if Dante wasn't here. Jesus, you overcompensate for having what's basically a monkey's job. You push fucking buttons. Anybody can waltz in here and do our jobs. You... You're so obsessed with making it seem so much more epic, so much more important than it really is. Christ, you work in a convenience store, Dante...| Applied Cartography
We are officially in H2, gang. I published fewer posts than I had hoped:| Applied Cartography
Many people have asked me what the biggest surprise has been, now that the dust has settled: I politely inform them that the dust has never been more unsettled before answering that nobody quite tells you how fun having a kid is. Childlike joy is a contagion; it is impossible to watch your baby blow raspberries for a minute straight without laughing.| Applied Cartography
One of the first things I did when setting up Whisperglass was to create a justfile.| Applied Cartography
I spent a couple hours this weekend resuming work on Whisperglass, born from some of the internal functionality within Buttondown. Resuming is perhaps a misleading choice of words: the work hitherto performed on the app was: thinking of the idea, registering a domain, and putting a Google Docs-based landing page in front of it. This weekend, I actually created a repository and started adding some code. This is going to be a hodgepodge of various notes from the early onset before I forget them...| Applied Cartography
Thomas Crown: [smirking] I trust myself implicitly.| Applied Cartography
pytest is, in many ways, the Age of Adz of the broader Python ecosystem: a rewarding idiosyncratic departure from convention whose quirks and foibles are quickly and easily outweighed by the fact that it’s just really, really good.| Applied Cartography
Scattered throughout the Buttondown docs site, you'll see the fruits of the latest experiment I'm running: getting rid of outdated screenshots and videos by replacing them with iframes. The iframe itself points to our demo instance, which helps alleviate some security issues, and some very light parsing of query parameters allows us to apply a mask and highlight a specific element. This seems really cool, and after hacking out a proof of concept, I'm kind of surprised I haven't seen this tact...| jmduke.com
Hello! I have so much to catch up with you about. The time has flown.| Applied Cartography
In descending order of importance:| jmduke.com
One of the most useful and janky internal tools we have in Buttondown’s codebase is a codegen pipeline called “autogen”. There is nothing “auto” about autogen: it is a series of scripts that munges a bunch of data into a bunch of different formats, to generate things like our API clients and code snippets and storybooks. Some of this data is stateful, and therefore requires a database, and therefore requires migrations — you see how this kind of thing can grow somewhat labrynthine.| jmduke.com
When we added support for complex filtering in Buttondown, I spent a long time trying to come up with a schema for filters that felt sufficiently ergonomic and future-proof. I had a few constraints, all of which were reasonable:| Applied Cartography
If there's been one through line in changes to Buttondown's architecture over the past six months or so, it's been the removal and consolidation of dependencies: on the front-end, back-end, and in paid services. I built our own very spartan version of Metabase, Notion, and Storybook; we vended a half-dozen or so Django packages that were not worth the overhead of pulling from PyPI (and rewrote another half-dozen or so, which we will open-source in due time); we ripped out c3, our visualizatio...| Applied Cartography
After many wonderful years of working out of my home office (see Workspaces), I've now "expanded" [1] into an office of my own. 406 W Franklin St #201 is now the Richmond-area headquarters of Buttondown. Send me gifts!| Applied Cartography
I love this bit from Paul Graham on pattern-matching founders:| Applied Cartography
Buttondown's core application is a Django app, and a fairly long-lived one at that — it was, until recently, sporting around seven hundred migration files (five hundred of which were in emails, the "main" module of the app). An engineer pointed out that the majority of our five minute backend test suite was spent not even running the tests but just setting up the database and running all of these migrations in parallel.| Applied Cartography
Humane Inc. started in 2018; it raised around $250M over five years before coming out of stealth mode with an AI pin that people did not like very much, and today they announced their sale (or, to be specific, the sale of their patent library) to HP for $116M.| Applied Cartography
Matthieu asks:| Applied Cartography
What a start to the year! January was a bit more flat-packed than I think Haley and I would have otherwise liked, but all with great things. (Highlights include: first weekend trip with Lucy, signing a lease on an office, and Third South's annual offsite.)| Applied Cartography
Guillermo posted this recently:| Applied Cartography
(Shout out to Red Queen Podcast for introducing me to this book.)| Applied Cartography
Consider a fan-out-ish model that you want to aggregate a bunch of: likes on a post, for instance.| Applied Cartography
Hello, 2025! (As always, Death Cab remains the soundtrack by which you should read this.)| Applied Cartography
(Order in the CSS rule sense, not the metaphysical sense.)| Applied Cartography
I invited nickd to join our Linear instance yesterday, which reminded me that I had a slew of notes I wanted to publish on our own experience of migrating from GitHub Issues to Linear, and some reflections on it as a product now that we've been using it for a few months.| Applied Cartography
Some kind words from Chris Krycho on Buttondown's Alternatives page:| Applied Cartography
I've been on the hunt for a new way to dogfood Buttondown for the past month or so, and I've finally found it: Hypermodern Django.| Applied Cartography
Three months ago, I wrote Bluesky et al, in which I walked through the various platforms vying for the dubious title of "Twitter's successor" and landed on Bluesky as being my favorite, perhaps less out of its ostensible inherent virtues and more out of the size of its alternatives' flaws.| Applied Cartography
Not a lot to share this month; it was a particularly busy time, between a mystery (and now solved, without fanfare or closure) cough and a dearth of time to write as I started to explore easing back into full-time work.| Applied Cartography
Every straight white male is forced, character-creation-screen-style, to choose one overtly consumptive hobby that in some small part defines their twenties and – God willing — their enduring adulthood. Some choose sourdough; many choose barbecue; I chose mixology.| Applied Cartography
At Stripe, we had two abstractions for branching logic in production: flags, which were meant to be explicitly temporal (temporarily split-testing traffic; rolling out a new feature or code path; exposing a specific path for a cohort of users during a closed beta) and gates, which were meant to be explicitly permanent (overriding a statement descriptor for a Thingish merchant; preserving historical functionality in a neglected API endpoint).| Applied Cartography
I'd been meaning to jot down some thoughts on Fathom for a while, and did not have a particularly good reason to do so until the news broke that Paul Jarvis was selling his share of the company to Jack Ellis, the technical co-founder. [1]| Applied Cartography
I tend to ignore the entire genre of what we now refer to as BNPL businesses — Affirm, Afterpay (RIP), Klarna, et al — not for any particular sin I feel that they are committing, but because they in my mind are much less interesting companies with less volatile upside than the Stripes and Squares and Adyens of the world.| Applied Cartography
Buttondown was kindly featured in H1 Gallery last week, and Ryan asked me to opine a bit on how we arrived at our current iteration, which is the anodyne yet pointed Email for you. Yes, you.| Applied Cartography
This great essay from Sean Goedecke went viral two weeks ago, drawing fury and fervor alike for a Moral Mazes-esque analysis of how engineers at large companies should think about shipping:| Applied Cartography
Had a blast live-coding some experimentations with Steve and Shovel yesterday using Val Town. (If you haven't used Val, well, watch the stream — think live, zero-deploy code snippets that can be arbitrarily extended and executed.)| Applied Cartography
Two companies that I started following (with no small amount of envy) back in 2021:| Applied Cartography
Hello! Lots of writing in October (what early parenthood takes away in terms of deep flow, it gives back in terms of twenty-minute pockets of time and thought):| Applied Cartography
Kevin Twohy has a list of heuristics for new projects/clients, and my favorite is simple:| Applied Cartography
(Epistemic disclaimer: there are few Extremely Big Tech Companies to whom I feel apathy more vividly than Meta. I had a Facebook account in high school and college and got rid of it at some point post-graduation, though I'd be hard-pressed to tell you when exactly that was.)| Applied Cartography
Lots of kind words poured in as a response to My approach to GTD and PKM, and one question was asked so frequently that I decided to write about it.| Applied Cartography
Earlier this week, I stumbled upon this brilliant marketing-slash-documentation idea from SingleStore — notebooks as a first-party page! There are a handful of nice things about this idea:| Applied Cartography
One pernicious thing with writing about productivity and knowledge systems: you only change systems that aren’t working, and you tend to write about things during times of change. So most writing about productivity systems stem from people whose systems have failed them.| Applied Cartography
The advice might seem dated these days, but I think the stair step approach to bootstrapping is evergreen:| Applied Cartography
A prior iteration of this site had a page called "Project ideas" that listed a bunch of things that I'd like to build. This was a good idea and useful in its own right (I got a few people to build companies and projects based on them, and it was a useful avenue by which folks could tell me which ideas were already implemented.)| Applied Cartography
The total LOC delta to migrate Buttondown from Django 4 to Django 5 was +143, -150. (I was incentivized to do so because our search right now is quite slow, and the lowest hanging piece of fruit is to move some of the tsvector generation out of band, and I'd rather do that using the fancy new GeneratedField abstraction than rolling the SQL myself.)| Applied Cartography
There are few pleasures greater than getting to be profiled for an interview series that you've been reading for months, and last week I got to do exactly that.| Applied Cartography
You say that these numbers mean dial it down. I say they mean dial it up. You haven't gotten through. There are people you haven't persuaded yet. These number mean dial it up. Otherwise you're like the French radical, watching the crowd run by and saying, "There go my people. I must find out where they're going so I can lead them."| Applied Cartography
A little over six months ago, I wrote Notes on Zed. My conclusion at that time was that Zed made a lot of great choices and felt really good to use, but lacked parity with VS Code's feature/ecosystem to its detriment.| Applied Cartography
We've had Lucy for two weeks, which qualifies us as experts, which means it is time to write about parenthood. (In all seriousness, consider the below descriptive and not prescriptive: mostly, it's a notepad filled with things that were remarkable or surprising or divergent from popular consensus.)| Applied Cartography
Chatted with Jess and Jeremy about a whole slew of things, from pricing strategy to terrifying and arcane differences between various Markdown parsers (including why I hate Slack.) They were particularly kind and gracious given that the amount of production-quality Rails I've written is ~zero; you'll enjoy this even if Ruby/Rails is not your cup of tea.| Applied Cartography
When I was first starting my career at Amazon — even more bright-eyed and rosy-cheeked than I am now — I was thrilled by the concept of an "architecture review", and by extension the concept of a "Principal Engineer" (Amazon's term for a staff-level engineer, someone beyond career level) who was always treated with some level of mystique and reverence.| Applied Cartography
In Notes on buttondown.com and How Buttondown uses HAProxy, I outlined the slightly kludgy way we serve buttondown.com both as a marketing site (public-facing, Next/Vercel, largely just content pushed by non-developers) and an author-facing app (behind a login, Django/Heroku/Vue) and recommended developers not do that and instead just do the sensible thing of having:| Applied Cartography
Yesterday, I was trying to set a unique constraint for comments in Buttondown to prevent accidental double-commenting, and I ran into a problem that I hadn't seen before:| Applied Cartography
In Paul Graham’s latest essay, he writes:| Applied Cartography
Someone emailed me in response to Two years as an independent technologist, in which I wrote:| Applied Cartography
There are few technical decisions I regret more with Buttondown than the decision to combine the author-facing app, the subscriber-facing app, and the marketing site all under a single domain. Most technical decisions are reversible with sufficient grit and dedication; this one is not, because it requires customers to change their URLs and domains.| Applied Cartography
We spent $85,000 for buttondown.com in April; this was the biggest capital expenditure I've ever made, and though it was coming from cash flow generated by Buttondown rather than my own checking account it was by rough estimation the largest non-house purchase I've ever made.| Applied Cartography
When it comes to AI tooling, I am equal parts optimist and cynic. I have no moral qualm with using these tools (Supermaven is a pretty heavy part of my day-to-day work), but have found most tools quite bad by the metric of "do they make me more productive on Buttondown's code base?" I think it's important to be able to taste the kool-aid with these kinds of things, and try to carve out an hour every weekend to test something new.| Applied Cartography
Buttondown's API calls are very fast, and one of the reasons why is that we've removed every single possible database query that we can.| Applied Cartography
A handful of folks sent me this quip from Nate Silver a few days ago:| Applied Cartography
Andrew Rea with an interesting and increasingly familiar take about how AI will disrupt software-focused private equity:| Applied Cartography
There’s a nascent trend of releasing ostensibly-private material (changelogs, public wikis, handbooks, etc.) to the public as a bit of a marketing push. This is essentially a form of debt, to the extent that you’re taking a lump-sum payment now in exchange for the implicit cost of keeping these things “up to date” indefinitely (and if you don’t, it’s immediately obvious: nothing gives me the ick more than seeing a changelog whose last entry was six months ago or a “internal hand...| Applied Cartography
Glyph (whose writing and contributions to the Python ecosystem I am deeply grateful for) wrote Against Innovation Tokens yesterday:| Applied Cartography
Inspired by Adam Johnson's test for pending migrations, and of course in conversation with my own love of weird tests, I offer a similar concept: a test for finding stray print statements in your codebase, with a ratchet array for stuff to ignore.| Applied Cartography
I watched Gary Bernhardt's talk on static routing back a few years ago and — I'm not sure if I would call it formative, but it stuck in my craw as a platonic ideal of sorts, as something I couldn't really justify adopting within Buttondown but really wanted.| Applied Cartography
Lots of writing this month:| Applied Cartography
Unlike stories, real life, when it has passed, inclines toward obscurity, not clarity.| Applied Cartography
Buried in a snarky thread about why Google Calendar doesn’t support calendar syncing is a long, detailed explanation of why shipping this sort of thing is hard:| Applied Cartography
I wanted to get a commit that was temporally some distance back as part of my experimentation with git cliff. This took some time to do, but here's what I ended up with:| Applied Cartography
By far the single most-fruitful tactic has been "just look at raw GET responses from Mastodon and see what things are shaped like." I know that "ActivityPub is under-specified" is a bit of a meme, but it's wild how little prior art there is.| Applied Cartography
Internal tools and small, well-scoped projects are a great avenue to tinker with technologies on the periphery of your understanding, and a Third South project has led me to spin up a small Next project using Bun[1] and Auth.js (nee next-auth), which has been quite bad and I think successfully dissuaded me from using it in any more serious endeavor.| Applied Cartography
It's not quite interesting or noteworthy enough to warrant a full-on essay, but yesterday we unshipped the last remaining Invoke commands and ported them over to just.| Applied Cartography
I'm not lovingUnreasonable Hospitality, but it did supply me with a phrase that I've been looking for:| Applied Cartography
If you spend enough time digesting hackneyed business or self-improvement advice, you've probably seen someone wax poetic about the following image:| Applied Cartography
I’m increasingly convinced that for developer-first tools, a really good docs experience is a durable, non-trivial advantage.| Applied Cartography
Things take time.| Applied Cartography
I have a good number of people ask me what software stack they should use. I always have a two-part answer:| Applied Cartography
Welcome to spring, bona fide and humid. Lots of writing this month:| Applied Cartography
Postgres' JSONB functionality is fast and useful but when I find myself dropping down from the Django ORM into| Applied Cartography
Here is a confession: I am a very strong proponent of a robust test suite being perhaps the single most important asset of a codebase, but when it comes to auxiliary services like admin sites or CLIs when it comes to testing I tend to ask for forgiveness more than I ask for permission. Django's admin site is no different: and, because Django's admin DSL is very magic-string-y, there's a lot of stuff that never gets caught by CI or mypy until a lovely CS agent informs me that something is blow...| jmduke.com