Order, Tailwind, DRY π
(Order in the CSS rule sense, not the metaphysical sense.) The time has come to begin exfiltrating some higher-traffic, higher-leverage parts of Butto [...]
a collection of dev rss feeds - blogroll
Posts
(Order in the CSS rule sense, not the metaphysical sense.) The time has come to begin exfiltrating some higher-traffic, higher-leverage parts of Butto [...]
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 migra [...]
Some kind words from Chris Krycho on Buttondown's Alternatives page: This is how I want all my tools to be. There is a ton of room in these markets fo [...]
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. At this point, all [...]
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 land [...]
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 t [...]
Every straight white male is forced, character-creation-screen-style, to choose one overtly consumptive hobby that in some small part defines their tw [...]
At Stripe, we had two abstractions for branching logic in production: flags, which were meant to be explicitly temporal (temporarily split-testing tra [...]
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 [...]
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 fe [...]
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 anod [...]
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 [...]
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 [...]
Two companies that I started following (with no small amount of envy) back in 2021: Hype (fka Pico) sold to an MMA-themed holdco earlier this year. Ra [...]
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 [...]
Kevin Twohy has a list of heuristics for new projects/clients, and my favorite is simple: No Bozos. Simple policy. No exceptions. You know it when you [...]
(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 schoo [...]
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. W [...]
Earlier this week, I stumbled upon this brilliant marketing-slash-documentation idea from SingleStore β notebooks as a first-party page! There are a h [...]
One pernicious thing with writing about productivity and knowledge systems: you only change systems that arenβt working, and you tend to write about t [...]
The advice might seem dated these days, but I think the stair step approach to bootstrapping is evergreen: Itβs much easier to sell an add-on to an ex [...]
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 [...]
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 [...]
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 exa [...]
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. Thes [...]
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, b [...]
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 [...]
Chatted with Jess and Jeremy about a whole slew of things, from pricing strategy to terrifying and arcane differences between various Markdown parsers [...]
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 "architectu [...]
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 (publi [...]
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 [...]
In Paul Grahamβs latest essay, he writes: The theme of Brian's talk was that the conventional wisdom about how to run larger companies is mistaken. As [...]
Someone emailed me in response to Two years as an independent technologist, in which I wrote: I miss of being at a large company, which is dealing wit [...]
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 [...]
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 generat [...]
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 m [...]
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. The most rece [...]
A handful of folks sent me this quip from Nate Silver a few days ago: Slightly against interest to admit this (I don't want more competition lol) but [...]
Andrew Rea with an interesting and increasingly familiar take about how AI will disrupt software-focused private equity: Distribution and brand moats [...]
Thereβs a nascent trend of releasing ostensibly-private material (changelogs, public wikis, handbooks, etc.) to the public as a bit of a marketing pus [...]
Glyph (whose writing and contributions to the Python ecosystem I am deeply grateful for) wrote Against Innovation Tokens yesterday: In 2015, Dan McKin [...]
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 te [...]
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 p [...]
Lots of writing this month: Why you should use Rails A reminder that things take time How shadcn/ui's previews work Why I hate that 1.01% meme A lovel [...]
Unlike stories, real life, when it has passed, inclines toward obscurity, not clarity. Thereβs a relatively famous line from Bezos, circulated first a [...]
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 thin [...]
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 wh [...]
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 "Activ [...]
Internal tools and small, well-scoped projects are a great avenue to tinker with technologies on the periphery of your understanding, and a Third Sout [...]
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 t [...]
I'm not loving Unreasonable Hospitality, but it did supply me with a phrase that I've been looking for: Eventually, that gesture became one of our ste [...]
If you spend enough time digesting hackneyed business or self-improvement advice, you've probably seen someone wax poetic about the following image: [...]
Iβm increasingly convinced that for developer-first tools, a really good docs experience is a durable, non-trivial advantage. Part of this thesis is t [...]
Things take time. Nintendo fairly famously was born in 1889, and the modern incarnation β Yamamuchi Nintendo & Co., LTD β was established nearly fifty [...]
I have a good number of people ask me what software stack they should use. I always have a two-part answer: Use what you're familiar with. If there's [...]
Welcome to spring, bona fide and humid. Lots of writing this month: I wrote about spending the past two years as an independent technologist. On the m [...]
Postgres' JSONB functionality is fast and useful but when I find myself dropping down from the Django ORM into SQL to do weird things, the syntax stri [...]
Lots of people have spent the past few days discussing the perceived increase in difficulty in getting an entry-level programming job relative to the [...]
Cognition, a six-month-old startup in the AI coding space just raised $175m at a $2b valuation: Despite the skepticism surrounding Devinβs launch, the [...]
Stripe held the keynote for Sessions, their annual WWDC/re:invent-esque conference, this morning. I wanted to jot down some thoughts while theyβre sti [...]
I wrote last month about using weird tests. Here's another example: checking for broken internal links in our upcoming docsite redesign! const extract [...]
I wrote two days ago about a real and useful application of Tailwind black magic; here's another. Buttondown has a dropzone component lets folks drag- [...]
The new version of the Buttondown docs site is all in on Keystatic, Markdoc, and Tailwind's typography plugin β which makes it really easy to author b [...]
For a long time, my goal with Buttondown was largely around failure avoidance: "I want to get my first paying customer so I know it's not a fake produ [...]
One of the more interesting theses advanced by Zero to One [1] is that monopolies are good to the extent that they afford companies the agency and com [...]
Via HN I ran into not one but two extremely neat and pleasant-looking libraries for URL manipulation. They look like great libraries, and a prior vers [...]
We've been using Keystatic in Buttondown for around six months now: we migrated most of the content on the marketing site (which is backed by Next) fr [...]
Histoire, like so many other tools in the Vue ecosystem, is a bit of a neglected younger sibling to Storybook β a little bit uglier, with worse docume [...]
I was late to the VS Code zeitgeist, and as penitence I try to go out of my way to try new editors whenever I see them β which is why this morning I i [...]
I had bookmarked Kolo many months ago to try out and finally got a chance to integrate it with Buttondown β a process that I expected to take a couple [...]
XH asks: How do indie developers/small teams keep track of and prioritize long-term roadmaps? I've been basically work off my gut + Feeling of the Day [...]
Was digging through old issues of the personal site and found this draft snippet: I was evaluating HelpScout as a potential first step in a series of [...]
.njk as the default templating language is an odd choice, and I find myself stubbing my toe on it a good amount. Maybe that's a me thing! It is extrem [...]
Working on a new analytics engine β a scant eleven months after the previous 'new analytics engine'. Calling this 3.0 is a bit of a misnomer: most of [...]
Virginia has draconian liquor laws, which means I have to get interesting bottles shipped from [REDACTED], a site on which I am very prone to judging [...]
Most Stripe accounts on Substack are βStandard Connectβ, which essentially means that: the author has full agency over their account and is the mercha [...]
One of many two-liners to come as I migrate things from the old site onto Obsidian: brew install rename rename "s/.mdx/.md/" **.md [...]
It hasn't failed me yet: BATCH_SIZE = 100 def batch_proess(queryset) -> None: count = queryset.count() if count == 0: time.sleep(10) [...]