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 existing ecosystem like a WordPress plugin, a Shopify app, a Heroku add-on – they’re usually small things to build, relatively inexpensive for customers to purchase, and you have built in discovery through the plugin repository or app store.   Other examples include Magento or Drupal add-ons, a Photoshop plugin, a WordPress theme, or an ebook or course.

These are all great examples for how to obviate marketing as a huge concern for a first product, but they also share a certain sense of finality that a full-fledged SaaS rarely does. Once you've built the thing and added it to the marketing channel of choice, it is done (modulo minor going concerns like changes to the underlying ecosystem, version updates, et cetera.) It is very hard to spend too much tinkering around the margins on a fifty page book or a Shopify <> Helpscout connector, and that inability is a feature that gently nudges you onto greener pastures.

This is a circuitous path to my suggestion of a new genre of entry-level product for the prospective bootstrapper, which I will call the data product. Here are some examples:

These projects have many merits: they are small in scope, require few engineering decisions that could cause an otherwise well-intentioned engineer to bikeshed, easily marketable, and lend themselves to expansion into adjacent products.


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.)

I still haven't quite worked out how this current iteration of my site should handle these sorts of long-form mutable catalog-style posts: the whole thing is really organized around a central timeline, and in lieu of search or a colophon page its harder to designate a given post as an evergreen dumping ground. So instead, I'm just going to batch a few ideas every few months.

(If you end up exploring any of these ideas, please let me know!)

Fuzzy search atop git history

There's a lot of interesting work around applying LLM-powered search to software development workflows; many of these are inordinately ambitious (You gotta be able to taste the kool-aid), to the detriment of the more mundane but solvable problems. Things like:

  1. "Which commit introduced the Automation model?"
  2. "Which of my myriad stashes contains the exploration work I was doing on a new splash page?"
  3. "What un-merged branches touch the markdown rendering engine?"

API wrapper around RDS Performance Insights

One genre of project that I stubbornly refuse to change my priors on despite a dearth of success stories (RIP Briefmetrics!) is: "UI wrapper around obscure/arcane/annoying but valuable FAANG API." RDS Performance Insights is a great example of this, and one can even purloin the great work done by Planetscale to find an early form factor that works well.

A better search around chat.db.

iMessage is one of the biggest social networks in the world; every MacBook has its entire iMessage history stored in a SQLite database called chat.db. It is wild to me that there aren't more projects that take advantage of this, given how annoying it is to actually search and collate one's iMessage history at scale?


...I always hammer on locked doors.

What's that supposed to mean?

The Anderson Tapes was released in 1971, placing it a decade after the original Ocean's Eleven (perhaps the first film to boldly ask: what if committing a heist was really cool?) and before The Conversation, a film more widely credited as introducing the concept of surveillance to the American filmgoer.

The Conversation only came out three years after The Anderson Tapes, and yet its treatment of surveillance is somehow much more postmodern and cynical; Coppola is interested in the interiority and paranoia of his characters, and it is taken for granted that everyone involved is already aware of their wiretapped lives (in no small part, I suspect, due to Watergate happening between these two films.)

This film, conversely, treats surveillance with a heavy-handed sincerity that could be construed as gimmicky [1] if it weren't so prescient. This is a straightforward movie with a straightforward message: we have spent the past decade building the Panopticon, and no amount of Scottish charm or ingenuity will purchase your escape.

Connery is great, of course, and there are bit parts to enjoy outside its use as a time capsule (a young, sinewy Christopher Walken; a Burn After Reading-esque denoument) but the enduring virtue of this film fifty years after its release is its wisdom in understanding exactly how and why the world changed, and to what end.


  1. One of the few things that did not age well was the sound effects as we smash cut from one scene to another. ↩︎


When you’re taught from textbooks, you quickly learn a set of false lessons that are very useful for completing homework assignments but very bad in the real world. For example: all problems in textbooks are solvable, all problems in textbooks are worth solving (if you care about your grade), all problems in textbooks are solvable by yourself, and all of the problems are solvable using the techniques in the chapter you just read. But in the real world, the most important skills are not solving a quadratic by completing the square or whatever, the most important skills are: recognizing whether it’s possible to solve a given problem, recognizing whether solving it is worthwhile, figuring out who can help you with the task, and figuring out which tools can be brought to bear on it. The all-important meta-skills are not only left undeveloped by textbook problems, they’re actively sabotaged and undermined.

via The Psmiths

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.)

The process was so boring as to almost not warrant a blog post:

  1. Had to remove our usage of DEFAULT_FILE_STORAGE and roll it into the STORAGES dict which we were already using;
  2. Had to bump up django-typescript-routes and django-safedelete to new minor versions (and for the latter create a new migration);
  3. Had to trivially rewrite a few tests that were failing because we were incorrectly passing in some non-existent keyword arguments.

The one wrinkle was some still-unattributable change in Whitenoise / Django behavior; we were using CompressedManifestStaticFilesStorage and some of our vended CSS had, I guess, incorrect manifests? It's still not immediately obvious to me what the root cause was, but it was an easy enough fix.


Django 5's been in production for us for three days. A grand total of zero post-deploy bugs have surfaced.


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.

To browse Manu's site — not just this interview series — feels a bit like walking on a quiet beach in autumn: there's a sense of peace and timelessness that is hard to find in the hustle and bustle of the increasingly-cacophonous internet. Fittingly, the interview is centered on the why and how of blogging:

It’s gone on a series of reinventions since then: my ability to consistently write has waxed and waned, but I keep coming back to this notion — particularly lately — that building artifacts under my own domain’s auspices is more durable and valuable than throwing them out into the algorithmic ether.

Read the full interview

Whenever I really struggle with a book, I try to start from a place of authorial intent: what did the writer wish to accomplish with their writing? I find this particularly useful with postmodern + experimental work, as it lets me divorce my reaction to the form from my reaction to the work itself. Sometimes the answer is onanistic delight (If On A Winter's Night A Traveler, Pale Fire); sometimes it is meant to conjure a certain thesis about the exultatory power of art itself (Cloud Atlas, Ship of Theseus); sometimes it is meant to discuss the subjectivity of perspective and importance of interiority (Rashomon, The Hunting Gun).

Diaz' message with Trust is a melange of the latter two: art and capital are more similar forms of power than you suspect, he argues, and power has a tendency to occlude itself.

This is a bold organizing ethos — it is no wonder this book contended for and won a Pulitzer! — but it is hard to find much supporting material in the prose and character work.

We open Trust with a novella called Bonds, which we later understand to be considered not just (to quote the book itself!) a literary achievement that could have come from Edith Wharton or Henry James but a scathing exposé akin to those of Sinclair Lewis. Instead, it reads like a Wikipedia summary of the Carnegie family, with flat prose and characters sanded down to one-sentence flash cards.

This is what I've grown to call the Studio 60 on the Sunset Strip problem: it's really hard to depict diegetically what the reader must consider "a great work", whether its sketch comedy (in Studio 60's case) or bold, brilliant early twentieth century writing (in Trust's).

And once we've escaped the meta-fictional world of Bonds into the world of the Bevels, on whom Bonds is purportedly based, things are no better. Much post-Pulitzer hay has been made of Trust's desire to understand capital and patriarchy; this desire, if extant, is bloodless. Many sums, movements, and theories about capital, financialization, and soft power are discussed — they all seem as though Diaz spent his time trawling through Investopedia, and assuming his readers are more interested in vibes than barbs. (This inattention to detail transcends the financial aspects of Trust. Diaz also, not thinking readers of a memoir from a New Yorker writer would know what the Voynich Manuscript is, dedicates a two page exegesis to it; he also deploys gaslighting as a verb even though that phrasology only began in recent decades.)


The final section of the book — in which we are revealed that more than anything Trust is a murder mystery, and we get to hear from the woman behind the mask — is both the most controversial and the most interesting. Diaz is most interested in a sort of meta-feminism, revealing that Mildred orchestrated (really) the Great Depression. From an interview:

Mildred was not a victim, was not a sacrificial lamb. And I think the passage that you just quoted shows her agency and with agency comes responsibility, mistakes or the possibility of making mistakes.

I think this is where Trust succeeded the most — the visceral joy you get when suddenly you get to recontextualize all that came before, and various puzzle pieces lock into place.

But it's a shame about all the other stuff along the way.

Highlights

Today's gentleman is yesterday's upstart.

I am a financier in a city ruled by financiers. My father was a financier in a city ruled by industrialists. His father was a financier in a city ruled by merchants. His father was a financier in a city ruled by a tight-knit society, indolent and priggish, like most provincial aristocracies. These four cities are one and the same, New York.

"There is a better world,” a man said. “But it's more expensive."


When a novel doubles one of its formal elements there is likely to be a halving elsewhere. In Trust the duplication of narratives, these life stories both convergent and divergent, has the effect of slowing a forward movement that was already very moderate.

via Virginia Woolf

When a novel doubles one of its formal elements there is likely to be a halving elsewhere. In Trust the duplication of narratives, these life stories both convergent and divergent, has the effect of slowing a forward movement that was already very moderate.

via Adam Mars-Jones

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."


I ran into a great post from Karri of Linear on product management. Most of what he says warrants further discussion and digestion, but I wanted to chime in on the rhetorical question which prompted his lovely response:

Consider this: if “talk to customers” is the biggest secret to product success, then why aren’t more products successful? Why are so many founders unsuccessful? What explains PMs who’ve been talking to customers 5 times a week for years, without ever making products that win?

"Talk to customers" has become, to me, the same kind of truism as "charge more" and "users don't care about your codebase" — easy to deploy and sound clever in doing so, but dangerous in their banality.

At risk of deploying a metaphor (c.f. The taste of beer), customer feedback is something like a GPS: faster than driving aimlessly, slower than knowing the streets like the back of your hand. Especially in commodity/parity-style industries (like product management tools in Karri's case, or email in mine) customers make for good historians but poor futurists, and certainly they won't do the hardest and most important job of identifying your leverage points for you.

None of this is to say you shouldn't talk to customers: you should! But it should be neither the first nor the last step in your process: if someone needs to talk with people to figure out what to build next, it means they have insufficient vision; if someone needs to talk with people to figure out if something is truly ready for GA it means your org has insufficient conviction and process.

Customers are great at informing a product: reminding you of edge cases, blind spots, prior art, and so on. But there are many incredible things that can be built without information, and the annals of history are swamped with products that had very well-informed backlogs and yet no leverage or power to stop their own demise.

Great bon mot response from Ruan Martinelli: When a customer tells you something is wrong, they’re usually right; when they tell you how to fix it, they are usually wrong


It is rare and difficult for a long-running series to reverse a downward slide. There are simply too many sources of gravity: writers run out of obvious plot lines and have to start re-hashing, Flanderizing, and escaping the confines of the show's existing logic; actors change, and audiences grow tired of what was once novel; it is simply hard to capture lightning and put it back into the bottle, and the commercial demands of the television industry incentivize showrunners to turn their works into shambling ghouls (another year of steady work for the crew, another year of solid residuals, another year of fun with coworkers with whom you've grown fond) rather than a surgical and cohesive narrative arc.

(All of these things are true of books series as well: take, for instance, the Berlin Game nonology which started with promise and ended with Deighton left with no other choice but to raze his characters [and goodwill] to the ground.)

Slow Horses bucks — or at least bucked — this trend. Its fourth season is a triumph: it rights every slight misstep of Slow Horses (Season 3) and Slow Horses (Season 2) (both solid seasons in their own right, but not nearly as great as the gemstone first season) and delivers the best six hours of thrilling, compelling spycraft in a long time.

Some miscellaneous notes:

  • One of the keys to Slow Horses' success is the legitimacy of its stakes. There's no Game of Thrones-esque flippancy with which characters are killed off less out of narrative cohesion and more out of a desire to shock the user, but nobody (besides, presumably, Gary Oldman's Jackson Lamb) is safe from death: this is something we're reminded of every season, and it gives a sense of actual danger and urgency to every shootout or chase.
  • Speaking of Jackson Lamb: this season probably had the least screentime from Oldman. This can be a dangerous gambit — it paid off here, and his absence (modulo the handful of convenient deus ex machina opportunities he's afforded) is felt but not painful.
  • Spy stories must thread a very tricky needle when it comes to realism. It's really hard to be entirely grounded in craftwork and realpolitik unless you're le Carré or The Americans, and it's also hard to be bombastic and exciting in the traditional language of television action sequences without feeling like you've suddenly entered a different, sillier show. (This was, I'd argue, the main flaw in Season 3: we suddenly entered a Call of Duty commercial in the back third of the season.)
  • Season-long arcs dedicated to flushing out a character's backstory can, similarly, be hit or miss: shows need to earn an audience's trust that we actually care and empathize with them enough to follow them down unexpected corridors, and actors need to be able to shift from being relatively one-note to full-fledged protagonism. Jack Lowden passed with flying colors.
Specifically with the last point: my brother points out that part of what made this feel like such a successful backstory arc is that it's not even explicitly a backstory arc until the back half of the season. There are clues, sure, but there's none of the cloying visual language (opening with a lugubrious tracking shot of River, etc.)


"There is a better world,” a man said. “But it's more expensive."

via Trust

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.

Six months later, I spent a few days using it as my daily driver to see what had changed:

  • It's still really, really fast — and in fact, the delta between VS Code and Zed has grown even larger (either objectively or subjectively) since I last used it.
  • They've made a good amount of progress on Python support, but it's still not great:
  • Multi-buffer editing is great though it breaks my brain a little. It seems obviously like the correct interface change, not unlike so many other little lovely decisions Zed has made.
  • There are a myriad of memory leaks. I diagnosed two during my time with Zed: one, due to it trying to index a SQLite database within the repository; another, due to inline assistance.
  • I miss GitLens and ErrorLens much more than I would have expected.

This list probably sounds more negative than my experience warrants. Zed's core value proposition — performance and productivity — is still enticing and tangible, despite some of my fears about them pivoting towards AI and collaboration tools. The team is iterating quickly: I'm excited both to try Zed again in a few months.

What surprised me the most about this time was how much I missed Cursor, which I've been using ever since Using Cursor to port Django tests to pytest. Common wisdom is that the AI layer for all of these tools is essentially a commodity without much differentiation, but I found myself missing the aggressive autocomplete and file-level refactoring that Cursor is (in)famous for.

So: at least for Buttondown, back to Cursor. But the Zed team is doing really good work, and the things that they're investing in feel much more durable than the things their competitors are investing in. If I were to bet, this time next year Zed will be my full-time editor of choice.


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.)

  • American pop culture puts too much emphasis on the onus of diaper changing. Diapers are easy; swaddles are slightly more difficult (we've gone with what we refer to as "the three corners method"), and the true endgame foe is the onesie. Sleeves are difficult!
  • We were nervous about Telemachus not adjusting well to having a baby sister in the house; instead, he is enamored with her, and already quite protective, and mostly just annoyed at my wife and me for getting up so often in the middle of the night.
  • Common wisdom says that babies sleep for eighteen hours a day, the mechanics of which are hard to really internalize until you're amidst it. There is more downtime than you expect — it's just that the downtime comes in a random, somnambulant staccato.
  • There is a surprisingly deep amount of variation amongst baby bottles. (We've gone with Dr. Brown; the form factor of the bottle itself is easy to wash, and the nipples are the right size.)
  • You will spend so much time going up and down stairs; you will spend so much time washing (bottles, pumps, blankets, etc.)
  • We have never been more vividly aware of our luck and fortune. DMs and texts and emails, hand-knit hats and blankets, embroidered sweaters, Doordashed lobster rolls and hand-delivered pots of 冬瓜海鲜羹, words of advice and encouragement: all of these things are glittering gems; our coffers overflow.


I think I could be good at this. I think you might find me useful.

via The West Wing

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.

Listen to Indie Rails #42

In descending order of importance:

I hope you are well; I, for one, am bleary-eyed and blessed.


One of the many parts of Ocean's Eleven's terrific legacy is the mistaken notion that all you really need for a film to be smooth and pleasant is a sufficient number of A+ actors playing some effervescent version of themselves.

This is, of course, not the case: Ocean's Eleven has many imitators and few peers (Logan Lucky being one of the few), because dedicating a film to the pursuit of pure pleasure is more difficult than it looks, and made more so by hackneyed attempts to shoehorn in an Albanian mobster subplot.

Parts of this movie feel deeply successful. The first few montages of Old Clooney driving through sleepy wintertime New York is borderline pornographic; Austin Abrams' four minute monologue is a tour de force that manages to hit a Linklater-esque melange of earnestness and humor; Clooney and Pitt sparring with one another is, even in a not-great film, fun.

But the first act falls off a cliff and into the realm of Red Notice-tier "what the fuck are these setpieces, anyway?" quicker than even a cynical viewer might expect. We are treated to the world's most bizarrely choreographed chase scene; an ethnically ambiguous "Club Ice" with a pager-sized MacGuffin; a too-long shooting sequence involving three people walking straight ahead and shooting blindly as if they're redcoats on an FPS with the difficulty turned down to zero.

Your love (or, rather, your acceptance) of this movie will hinge on just how charmed you can be Pitt and Clooney, gamely smirking and chuckling at the increasingly-vacuuous goings-on while perfectly well-clad.

For me: they elevated the movie, but not enough to warrant rating it anything more than a not-unpleasant way to pass the time.

(One little needle to end on: something about this movie's relentless refusal to commit to a tone reminded me of the MCU and its awful determination to cycle viewership through irony, slapstick, CGI, and pathos all in the span of a single over-produced five minute scene, so I was satisfied to discover that the director and writer is most well-known for the most recent few Spiderman movies. At least he didn't try to cast Tom Holland, too!)


I am a financier in a city ruled by financiers. My father was a financier in a city ruled by industrialists. His father was a financier in a city ruled by merchants. His father was a financier in a city ruled by a tight-knit society, indolent and priggish, like most provincial aristocracies. These four cities are one and the same, New York.

via Trust

Today's gentleman is yesterday's upstart.

via Trust

Next page

Lightning bolt
About the author

I'm Justin Duke — a software engineer, writer, and founder. I currently work as the CEO of Buttondown, the best way to start and grow your newsletter, and as a partner at Third South Capital.

Lightning bolt
Greatest hits

Lightning bolt
Elsewhere

Lightning bolt
Don't miss the next essay

Get a monthly roundup of everything I've written: no ads, no nonsense.