I had held off on watching Being John Malkovich for a while, mostly because I think I had a pretty good idea of what it was and, while I wanted to watch it at some point, it never felt particularly urgent. (The vision in my head was a sort of Bosch painting filled with John Malkovich, which of course is true of exactly one scene [and perhaps the most indelible and famous of the film.])
Having finally gotten around to watching it, the biggest surprise was just how large the gulf was between my preconception of this thing — a silly art experiment of a movie — and the reality of it, a script and set filled with humor and wit and a thousand different ideas. [1]
John Cusack plays a Nice Guy (not to be confused with a nice guy); Catherine Keener plays what I think we'd recognize today as an evil twin version of a MPDG; Cameron Diaz's (out of type!) performance was, for me, the show-stopper. It is really hard to seriously play a non-serious person: she does it with aplomb, and her arc is the soul and sugar of the movie that rescues it from collapsing into self-indulgence.
The worst thing a piece of comedy can do is, in the process of not taking itself seriously, it forgets to take its characters seriously. This film is deeply funny, and deeply weird, but Kaufman remembers every step of the way that these people are real, that they want things and feel things. (And I'm sure there are a lot of interesting things it's saying at a metatextual level, but I figure I should finish watching Adaptation before I mull on those too heavily.)
It is hard not to be grateful that this show came out in 1999 and not 2025, when it would have been forced to be a miniseries or even a full show, with each little angle and side street stretched out into its own episode. ↩︎
I told you about danger, didn't I? First it makes you sick, then when you get through it, it makes you very, very loving.
Every review (contemporary or otherwise) of Family Plot refers to it as a "lesser work" of Hitchcock's, and my reaction both immediately after watching it and now, a few weeks later, is largely the same: it is no North by Northwest or Rear Window, both of which felt so obviously like they had not only invented a genre but mastered it in the making.
Family Plot, if it can be said to have invented anything, feels like a spiritual predecessor to the Coen brothers' early ouevre: tragicomic, centered around a crime and a misunderstanding, pitting the foolish and naive yet goodhearted against the evil yet fallible. Karen Black and Bruce Dern could have been the protagonists of Fargo; their performance, both individuals and as a team, is lovely (as is William Devane, who I'd never seen in this phase of his career.)
It's a fun film, but once the puzzle box of "how are all of these people going to run into each other?" is solved, it feels a little bit like the back third of a Sudoku puzzle: satisfying in its own right, sure, but not something you'll look back on with amity and awe.
If you want to get schmaltzy [1], though, I think there's a certain symbolic richness in Hitchcock's final directorial scene being as cute as this film's ending, a literal wink to the audience. You know, he says, that I hid this diamond myself: but I kept you guessing, and I kept your faith alive for as long as I saw fit.
Of course Primal Fear's legacy is (justifiably) dominated by Edward Norton's insanely talented debut performance [1], but what I came away most surprised by [2] was the richness and texture of Gere and Lilley's performances. I have nothing against either of them as actors but — there's a certain We Have George Clooney At Home quality to most of Gere's work for instance, a sense of them being more of a well-executed archetype than a singular presence.
And that, I think, is the lens through which it's most fun to experience Primal Fear: a sort of gradual Dante-esque perversion of what feels like a standard SVU episode into hell: hell of the heart, hell of the soul. The hotshot amoral defender is revealed to be, in fact, a paladin succored and ruined by forces more wicked and clever than he thought extant; the wisecracking prosecutor discovers that she sacrificed everything and earns nothing. The two performances could not have been portrayed by "bigger" actors; the strength of their arc relies on the fact that you think you know who these people are from the very first time they step onto the screen.
This is an uncomplicated and unnuanced reaction, but: I cannot think of a single better debut performance in film? ↩︎
Including the "twist ending", which felt cheap and telegraphed by today's standards but not ridiculous, which cannot be said of other legal thrillers in the era. ↩︎
What you name your product matters more than people give it credit. It's your first and most universal UI to the world. Designing a good name requires multi-dimensional thinking and is full of edge cases, much like designing software.
I first will give credit where credit is due: I spent the first few years thinking "vercel" was phonetically interchangable with "volcel" and therefore fairly irredeemable as a name, but I've since come around to the name a bit as being (and I do not mean this snarkily or negatively!) generically futuristic, like the name of an amoral corporation in a Philip K. Dick novel.
A few folks ask every year where the name for Buttondown came from. The answer is unexciting:
Its killer feature was Markdown support, so I was trying to find a useful way to play off of that.
"Buttondown" evokes, at least for me, the scent and touch of a well-worn OCBD, and that kind of timeless bourgeois aesthetic was what I was going for with the general branding.
It was, in retrospect, a good-but-not-great name with two flaws:
It's a common term. Setting Google Alerts (et al) for "buttondown" meant a lot of menswear stuff and not a lot of email stuff.
Because it's a common term, the .com was an expensive purchase (see Notes on buttondown.com for more on that).
We will probably never change the name. It's hard for me to imagine the ROI on a total rebrand like that ever justifying its own cost, and I have a soft spot for it even after all of these years. But all of this is to say: I don't know of any projects that have failed or succeeded because of a name. I would just try to avoid any obvious issues, and follow Seth's advice from 2003.
Dear Dad — you always told me that an honest man has nothing to fear, so I'm trying my best not to be afraid.
I floated the idea of a TBS canon when writing about Planes, Trains, and Automobiles — a sort of normcore cohort of good-but-not-fine movies whose pop cultural imprint has somehow never quite convinced me of their viewership, and right after doing so a friend wrote in suggesting Catch Me If You Can as a worthy entrant. And, indeed, I know the movie poster extremely well despite having never seen it.
It's a stretch to draw too many parallels between the two films (both now-rote plots largely carried by the sheer charisma of the leads and their winning chemistry, et cetera), but whereas Planes, Trains, and Automobiles had to win me over from my default position of "road trip movies are kind of boring" — here I was in from minute one, completely sold into this universe. Spielberg is at the peak of his powers: Christopher Walken delivers an absolute knockout performance with every second of his limited screen time, and DiCaprio — always an actor who felt like he was in conversation with a version of himself whom I had never seen — well, I get it now, this is the guy, this is the urtext which Killers of the Flower Moon destroys.
The movie does such a good job of selling you in its first two thirds with a sense of verve and playfulness (the John Williams score!) that the few moments of somberness hit you with affectation. The two truly dark scenes: DiCaprio's character meeting his father at a bar and understanding that the house of cards around which he's built his life has fallen, and then him peering in at his mother's house to understand there is no going back — do not feel cheap, do not feel schmaltzy. There is an emotional texture to this film that beggars comparison to Wolf of Wall Street: once you stop moving, once you catch your breath and the world settles around you, you realize you are alone, and so you better keep running.
(The kicker, the perfect kicker: the person about whom this story is ostensibly written made it all up. A perfectly meta-textual long con!)
Before reaching cruising altitude the plane sliced through a thick layer of cloud and for a few seconds there was nothing but white outside the window and I couldn’t help feeling, as we cut through the ephemeral landscape slowly thinning and dispersing and branching out in a thousand unmappable directions, that this moment had been prepared especially for me, some kind of aerial requiem held in honor of the city I was leaving behind, and in the end, I remember thinking a few minutes later as the Lufthansa stewardess rattled down the aisle with her drinks cart, there was little difference between clouds and shadows and other phenomena given shape by the human imagination.
It is sometimes obvious when a newer author organizes an entire book around a single paragraph or image, as if they've decided on the thesis they wish to present and spend the intervening pages gathering supporting evidence to bolster its strength. This little bon mot — clouds are like shadows! history is pareidolia! — quoted above as the final paragraph of Book of Clouds lampposts the entire novel, as if Aridjis' discursions on lights and fogs were insufficiently subtle.
There are good moments in this book, in much the same way that chatting with a clever but self-absorbed friend can still leave you with a smile on your face. Aridjis has a prose that manages to be both humane and detached, and her flirtations with the world of magical realism are not exactly Marquez-tier, but they're still interesting.
But — as is often the case with these sort of pseudo-autofictional debuts that have become increasingly common over the past two decades — wit and skill makes for a great garnish but a poor main course. This book is a pleasant way to spend a few hours, but it lacks substance and insight: it is, in fact, quite akin to spending two years in Berlin in your twenties and flying back home to consider yourself a changed person. You have nicer shoes; you can chat with your friends about your favorite spots on the Hermannstraße; your eyes are thinner and sharper. But you're still you; you haven't changed enough, you haven't changed at all.
Becoming Trader Joe is, more than any other business book (certainly any other business memoir), a turpentine book. There is interesting philosophy and retrospective here — and Coloumbe, whether through earnestness or affectation, is a more literate and flippant narrator than your standard post-exit founder — but the meat and the merit of this is the absolute smorgasboard of anecdata and fun facts. Some notes:
Trader Joe's counterpositioned themselves early on by making deals with suppliers that their larger competitors couldn't due to supply constraints: they bought, for instance, XL eggs at sub-market prices because the Krogers of the world were unable to purchase them as they wouldn't be able to distribute them to the entire corpus of stores in an areas. This let Trader Joe's both get favorable unit economics and counterposition ("we have this unique product that nobody else has!")
Trader Joe's spent a lot of time figuring out how to compete and innovate in an ostensibly static market due to fair trade and other regulations: for instance, being unable to market California wines at a discount (due to price controls) but instead offering complementary wine bank access to accomplish the same thing.
Lots and lots of pivoting. (Bullets used to be one of their best SKUs: standardized, value-dense, easily shippable.)
Trader Joe's made the explicit decision to shift from "customer focus" to "buyer focus" in order to aggressively maximize deal flow.
More than the sheer pleasure of reading — Coloumbe is a fun personality, and garnishes all of his stories with equal parts honesty and flippancy — this book strikes me as real. This is not a hagiography: it does not purport that all of Trader Joe's was a grand plan, but more of a series of strong base hits (with some misses as well) and a couple really great strategic shifts.
The passage of time and the monotonic accretion of accolades makes it difficult to remember with total clarity and honesty the sins and virtues of The Wire, both artistically and politically. It all gets eroded in a certain hagiographic tide: without committing myself to an (overdue, but unlikely) rewatch, I remember the character notes more than the glorious latticework (replete with frayed threads) storytelling.
Whether you want to call it a spiritual successor or not, We Own This City is a work in obvious conversation with The Wire. Pelecanos and Simon are interested in talking about the same things: the impossibility of an individual reformer to heal a corrupt system, the way those systems self-perpetuate even when filled with good intentions, and the bi-directional relationship between the streets (metaphorical and otherwise) of a city and its City Hall.
We Own This City is a decidedly more new show than The Wire. It is a miniseries, rather than a multi-season affair; it is postmodern and non-linear, following multiple threads and timelines to piece together every part of the GTTF story and all of the cohorts impacted by its rise and fall.
Much of this feinting towards the nouveau is neither necessary nor successful. A solid tranche of screen time is devoted towards the DOJ's attempts to build a civil rights case against Baltimore, and this time (largely the same three characters, didactically explaining that Crime Is Bad) provides neither pathos nor revelation given how already heavy-handed the core narrative is. [1]
But the heart of the show is still raw and pumping. Jon Bernthal's performance is as masterful as everyone says it is, even though his character lacks the folk hero complexity of Omar and Stringer; the (true!) story is gripping and masterfully told, and Simon et al manage the same core empathy that made The Wire such a uniquely American piece of art, summoning the jeremiad levels of fury and rage while always grounding things in the humanity and plight of the people victimized by the system, portrayed with depth and nuance uncommon in this decade's television.
This single bit of pay-off from this thread is watching the OCR's initial attempts to solicit the alliance of the then-mayor of Baltimore, whose career ended due to her own fraud and conspiracy charges. ↩︎
One reason I love An Everlasting Meal is that even more than its ostensible didactic value, Tamar Adler's writing and humanity compels and enchants you to cook so that you might have a life as lovely as hers. Her writing conjures a world of warmth and bonhomie and charm: you finish the book less with a renewed understanding of why and how to keep a practical kitchen, and more with a sense of the joy of cooking and the joy of sharing it with others.
This is not an easy feat. By blurring the line between textbook and memoir, authors run the risk of doing neither well; such is the case with Bringing up Bebe, a book that exists less as a serious study about cultural and socio-economic differences in child-rearing (here is a fun drinking game: take a shot every time Druckerman refers to the Parisian crèche where she sends her children as "completely free") nor as a meaningful self-examination of her own transformation as her mother during her time in Paris (even the stilted narrative strains credulity: she opens a chapter about how no other mothers would talk with her at the park due to "typical French indifference", and then the very next chapter opens with an anecdote of a French mother chatting her up at the park).
This is unduly harsh; if I had approached Bringing up Bebe less as a serious tract and more as, say, a This American Life segment, I would probably be more charitable. Certainly, I found the core theses of the book interesting and worthwhile. I'd summarize them as follows:
French households try to integrate their children into the existing family unit, rather than reorienting the family unit to revolve around the child.
French parents espouse a "cadre", or "frame", where very strict and non-negotiable limits are set on certain things, but within those limits children have a great deal of freedom and autonomy.
You wanna hurt me? Go right ahead if it makes you feel any better. I'm an easy target. Yeah, you're right, I talk too much. I also listen too much. I could be a cold-hearted cynic like you... but I don't like to hurt people's feelings. Well, you think what you want about me; I'm not changing. I like... I like me. My wife likes me. My customers like me. 'Cause I'm the real article. What you see is what you get.
There are a few movies that I consider part of a "TBS canon", in that I've seen commercials for them for an aggregate of years and have a vague sense of what they're about but have never actually seen. This is one of them, and while nothing in Planes, Trains and Automobiles is revelatory or novel, it hits the John Hughes notes perfectly.
I am simply not a buddy comedy guy, nor much of a road trip movie guy, and much of the actual plotting felt so lukewarm that I couldn't even endear myself to the faux suspense of it all. But Martin and Candy's performances are pitch-perfect; even without the telegraphed reveal or the saccharine reunion, the graduation evolution of the two characters from charming pastiche into rounded, wounded realism is timeless.
Consider a fan-out-ish model that you want to aggregate a bunch of: likes on a post, for instance.
Let's say we want to aggregate the number of likes on a post relative to the post's creation time (for instance, to visualize the growth of a post's popularity over time), yielding a list of tuples of the form [(minutes_since_post_creation, number_of_likes)].
This is an aggregation: databases are good at aggregations!
Your first instinct might be to try to do this using ExtractMinute:
from django.db.models.functions import ExtractMinute
from django.db.models import F
defcalculate_popularity_over_time(post):
events = Event.objects.filter(post=post).annotate(
delta=F("created_at")- F("post__created_at")
delta_in_minutes=ExtractMinute("delta")).order_by("delta_in_minutes").values_list("delta_in_minutes").annotate(count=Count("id"))
But this has a bug. Can you spot it? Here's a hint:
The problem is that ExtractMinute, well, extracts the minute, rather than truncates it. Extracting the minute from a duration of 1 hour, 30 minutes, and 5 seconds yields 30, not 90.
Whatever are we to do? Well, we can take advantage of EPOCH to truncate the duration of a duration to its number of seconds, and then convert that to minutes:
from django.db.models.functions import Extract
from django.db.models import ExpressionWrapper, F
classExtractEpoch(Extract):
lookup_name ="epoch"defcalculate_popularity_over_time(post):
events = Event.objects.filter(post=post).annotate(
delta=F("created_at")- F("post__created_at")
delta_in_minutes=ExpressionWrapper(
ExtractEpoch(F("delta"))/60, output_field=models.IntegerField()),).order_by("delta_in_minutes").values_list("delta_in_minutes").annotate(count=Count("id"))
I suspect there may be even more elegant and efficient ways to do this, but this satisfies a couple constraints:
It delegates the heavy lifting to the database
It doesn't require dropping down to raw SQL or registering intermediate tables
It's fairly reusable and "Django-ish"
Hello, 2025! (As always, Death Cab remains the soundtrack by which you should read this.)
Headlining this month was my annual review; everything else is flotsam.
I have much to write; the backlog is longer than ever before, both literally and figuratively. Our water is out; our daughter is happy; we are keeping sane, and warm, and busy, and we are sleeping lightly but well.
It might be premature to write this review: I'm sure I'll play this game for another ten hours over the next month, and maybe by then (as is often the case with ascension-based roguelites) my understanding of the core game and mechanics will transform, and all of my forthcoming thoughts will be revealed as the meanderings of a novice.
This is a thing that I worry about more with negative reviews than positive ones, though: and I really liked Luck Be a Landlord, even if I found — find! — it a tiny bit wanting. It is in many ways a deckbuilder stripped down to the essence — build a deck, draw 25 cards in order — and your sole act of agency is to choose (or not choose) what cards/items to add to your deck.
Please do not mistake my elision here for disparagement: LbaL crushes this core gameplay loop. The combination of dopamine and analysis is second to none; it absolutely devoured me, even through the runs where I felt like I didn't lose so much as I didn't get great options in the first six hands. [1]
Where I find it lacking is depth once you understand the mechanics and synergies at play: the ascensions (at least the first ten, which took me around twenty runs to climb) are less about transforming the gameplay and more just increasing the incline; the universe of cards is pretty sharply divided into realms of Obviously Good and Obviously Bad, and the anti-capitalist intrigue is fun but doesn't actually contribute much to the gestalt of the game.
Seriously, though: if you like Slay the Spire, download and play this immediately. It won't be your favorite game, but you will have a great time with it, and there are many games that fail to hit that mark.
Again, this might be a thing that I look back on with shame rather than consternation! ↩︎
(You may be interested in 2023 as well, which was last year's annual review.)
Family
Haley and I welcomed our first child, a daughter named Lucy, on September 24th. She is perfect in ways both obvious and mystical. Our whole life is hers, now: this is even true of Telemachus, who proudly and rapidly assumed the title of big brother with characteristic gusto. [1]
I have more writing — which is to say more thinking, which is to say more doing — about what it means to be a parent, and how to be a good parent. We read the Oster books, we road-tested strollers; we were lucky enough to have a safe and relatively uncomplicated time at the hospital [2]; we slept for sixty minutes at a time, then two hours, then four, and now six. Everything is a lovely maelstrom; we have never been so lucky, to have found each other and to have the sibling and parents and extended family of friends and neighbors that we do.
Health
Ha-ha. I mean. I am going to grade myself both harshly and kindly here, which is to say that I'm in my worst shape since... 2018, maybe? I do not feel bad about this; I still try to eat fairly healthy and walk four miles a day [3] but there is not much else to counterbalance the "terrible sleep, much more delivery/takeaway, tremendous amounts of caffeine, no dedicated exercise time" melange in which I (just like every new parent) am adrift.
In the start of the new year, I'll be picking back up nSuns (which is quite literally exactly what I said last year before pivoting to a 5/3/1 program because nSuns was too taxing) and starting to do some jogging with hopes of improving my 5K time. We'll see! No plans (or hopes) to get into some hitherto-unseen level of fitness, just to shift back into a default state of discipline and posture now that the first wave of chaos has mostly passed and we have a bit more time and space to breathe.
Buttondown
Ending last year, I wrote:
The question that the industry trains us to ask is: what's next? I think that's obvious from a product perspective but a little less so from an organizational or business one: but my high-level goal for next year is to make a full-time hire, and all of the financial/existential commitments entailed therein.
It took me some time, but I'm ending 2024 with an answer to that question (see Why should a company?) and a full-time hire to boot.
Most of this year was spent in operations and development: I was a practitioner more than a manager, largely because I was interested in pushing Buttondown forward as much as I could before Lucy came. That was successful! Successful here meaning: Buttondown once again basically doubled in all of the metrics that matter, and it did so in a way that I felt honored my own ideals as an engineer, writer, and human.
Third South
Our goal with the first full year of Third South Capital was a diptych of existential questions:
Do we enjoy spending time and energy on this thesis, relative to other options?
Is this a financially viable thesis, relative to other options?
(And, yes, in that order.)
The answer to both questions proved to be a smashing yes, and in the waning weeks of this year we started to once again fire up our acquisitive flywheel. (Please reach out if you're ever interested in chatting about your company!)
This was, legitimately, the first "real" year of writing in a long time for me. I think it was largely prompted by the increasing fracture of social networks and continued collapse of Twitter as a respectable, hospitable platform; I wanted to broadcast and no other better option remained than my own blog.
For the first time in a long time, I've had people talk to me about my blog. The two most common remarks I receive are:
I love your blog specifically because it is so weird and idiosyncratic.
Why and how do you write so much? What are your goals?
I can say with some degree of smugness and honesty that the answer to the latter is the former.
Media
I don't exactly have a rich corpus of art to review from this year: the first nine months were spent being as heads-down as possible, and the last three were spent in a mode, as aforementioned, that offered little opportunity for consumption that wasn't audiobook-based.
That being said, the best things I experienced this year, in no order, were:
In retrospect, every cliche about parenthood is true; the one I found myself most surprised by was just how quickly and thoroughly a child seeps her way into every pore of your life, suffusing it with renewed texture and meaning and urgency. There is nothing I do now without Lucy by my side, either literally or figuratively.
In last year's coda, I wrote:
The median day of 2023 looked something like this: eight hours of sleep, a good workout, ten hours of exhausting intellectual work growing a business, some puttering around the house and tending the garden, two dog walks, an evening spent unwinding with my wife, an episode of anime with my brother. There are a lot of things I wish I could fit into that day: more time writing, more time exploring new technologies, more time playing video games, more time exploring Richmond. At the same time: I think I chose wisely.
And now, of course, I look back on that time of my life with not just a sense of detachment — again, to risk cliche every memory before your child is so aggressively The Before Times — but also a sense of irony that I could have ever felt like I didn't have enough time then. All I had was time!
And now, instead of time, I have a daughter for whom I would do anything. It is hard to fret about the things that fall away on the margins — a sourcing call that could have been interesting but certainly couldn't have been vital, a partnership talk that wouldn't work out anyway if the relevant details couldn't be hashed out over email, a great new restaurant with a wait measured in hours, a great new RPG that really hits its stride once you get past the first ten hours or so — when the alternative is this tiny little scientist of yours, bright and beckoning, whose every breath and burp and coo and cough is your charge and triumph.
What I am saying is this: it is hard to care quite as much about craft when fidelity has your eyebrows and your wife's nose — it is hard to care about scale when you have divinity asleep in your arms, sighing softly after three and a half ounces of milk.
(And I do care — and I do fret — and whenever I do too much of either, I peer into Lucy's bassinet and remember just how good we have it.)
Thank you
To my wife Haley, light of my life; to Lucy and Telly, precious and perfect; to everyone who sent us a note or meal or gift or hug for the first few weeks coming back from the hospital; to my grandparents, who I think about every time I see Lucy smile; to everyone who's patiently waiting on a response from me in Q4; to every customer who made it possible for me to step away from my job for two months and still afford Pampers; to you, dear reader, for getting this far.
We were, if we're being honest, a little bit worried about this dynamic. In reality, what has happened is that any time Lucy cries Telly softly pads over and licks her face and if she keeps crying (rare) he patiently sits down next to her and waits. ↩︎
Haley had minor pre-eclampsia and was induced two weeks early; she's been great ever since, and bounced back (again, with characteristic gusto) much more quickly than even she had hoped. ↩︎
Which is to say nothing of all the stair work that I do now. Being a parent is about many things, but mostly it is about bringing things up and down stairs. ↩︎
(Order in the CSS rule sense, not the metaphysical sense.)
The time has come to begin exfiltrating some higher-traffic, higher-leverage parts of Buttondown's admin UI away from the autogenerated Django admin and into some more bespoke components.
Take, for instance, this rather grisly (but useful) inline admin table:
This contains useful information but is annoying to parse. It gets replaced with the following HTML, all still governed by Django and a wallop of Tailwind [1]:
draft
about_to_send
in_flight
sent
It's a trivial thing, but lets me pull out a new toy that I learned from Mary a few weeks back: order, which lets you re-arrange the rendering order of elements in a flex container irrespective of their original order.
Obviously, that is a lot of HTML to write for a very simple outcome. There are a bunch of ways you could reduce this. Why so much repetition? Why specify group-last for every node when you know it's going to be the last one?
Because in reality, the above HTML is actually, in Django, a pure and concise for loop:
Not mobile friendly, I'm afraid! Not exactly a pressing concern for the admin site at the moment. ↩︎
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.
One useful lens for understanding a product's positioning and strategy is to look at what its primitives are — the experiences and states that stand alone (and hopefully offer value) without any exogenous or endogenous connections. [1] For Linear, the core primitives are issue and projects; you cannot, for instance, tie issues to initiatives, nor can you create a document that doesn't tie back to a project or issue. It does not exactly take oracular powers to assume that this is not going to be the case for much longer; it is easy and seductive to imagine a world where documents and writing of a more artificial, less project-based nature live in Linear, simply because that's the most pleasant place to write, read, and collate them.
Regardless of Linear's success as a brand, it's very very clear that Linear's success as a product is simple: it is really, really good, in a way that is almost uninteresting. Linear offers very few novel features [2] and instead invested a lot of time, energy, and polish in... just getting everything correct, and making it work extremely extremely fast. (This is, to be clear, whatever the opposite of a backhanded compliment is.)
[REDACTED BUTTONDOWN ENGINEER] commented that using Linear "felt so much better than using GitHub Issues that it made [them] want to actually spend time making sure their issues were up to date", and I echo that sentiment tenfold. There aren't a lot of bold new workflows or insights that using Linear has unlocked, but it has changed "backlog management" from one of my least favorite chores due to the lag of GitHub Issues into something that I genuinely look forward to doing because it feels suddenly tactile and cybernetic.
Relatedly, what all of these nascent "Linear for X" tools seem to get wrong is that the specific design language and branding is downstream (or even orthogonal) to what makes Linear feel so good, which is its obsession with ergonomics. The hyper-designed table views and Things-style progress-indicator chart icons are nice, but they belie the obsession with performance. [3]
In case anyone's reading from the Linear team, my (meager!) wishlist is as follows:
Let me assign individual issues to initiatives
Docs as a first-party primitive
Let me mark certain views/issues as publicly visible (I know this one's niche!)
And, similarly, much of the nuance in "land-and-expand"-style product development, where you wriggle your way into a company with a single wedge and then hope that the company jams more of its state and headcount and process into your product, is offer facility and stair-step value in doing so. ↩︎
The label taxonomy thing, maybe? And "pivot tables in a sidebar"? ↩︎
This is how I want all my tools to be. There is a ton of room in these markets for healthy and friendly competition — and no need at all for winner-take-all or monopolist attitudes.
First off — credit where it's due, I originally came across this genre of page on Memberful's site, and my reaction was pretty much the exact same as Chris's.
Two other points I'd make in favor of this page, or at least something spiritually akin to it:
All of Buttondown's product missteps [1] come from feedback from well-meaning, pleasant customers who deep-down are interested in a different product entirely. Being quite vocal about knowing who we're building for is a good reinforcement mechanism to make sure the customer feedback we get (both implicit and explicit) is coming from the right people, and not someone really enthusiastic about our brand + ethos but is really just looking for a CMS.
People have loud mouths and long memories, especially in long-term, infrastructural spaces like e-mail. My second-largest-customer by LTV was referred by someone who trialed and liked Buttondown and ended up going with a different product because we didn't have omni-channel; we have many customers who don't use us for their first company and then switch to us for their second company; my personal favorite anecdote is screenshotted below, where a customer who tried Buttondown shortly after launch (who I then referred to a different product that had better pricing at the time) came back six years later.
This applies more to companies as described in Befriending the Goon Squad, where your main goal is continued survival rather than winning a time-sensitive land-grab (or, if you're really early on in your product's life, it can be useful to yes-and every single customer request to random-walk your way to PMF — but neither of these options are things that I would personally do myself nor recommend to others.)
of which there are thankfully fairly few, but that's a separate essay for a different day. ↩︎
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 of my/our usages of Buttondown for Buttondown don't involve archives: we're using it headlessly, with RSS-to-email and APIs powering both this site's newsletter and the 'official' one. This is great, and I'm proud of the fact that we can even do that, but it means:
archives are turned off
the "general" analytics flow of everything archive-related is turned off
And this is a shame! I learn best about where the product needs evolution from usage; we've known abstractly that the archives are good-but-not-great for a while, and I suspect a huge part of that is because we're not using them.
So, the search (idle, errant) for a good newsletter concept began. I had the following criteria:
Something that didn't make more sense to be on the actual buttondown.com domain;
Something that wasn't expressly Buttondown-specific;
Something whose average reader might be a Buttondown user;
Something that wouldn't be expressly tiresome to maintain, either by me or by the Buttondown team.
Something that would be a legitimately good newsletter in its own right, not just a way to dogfood Buttondown.
Work occupies much of our time. Doing work we hate assaults our self-esteem and self-confidence. Yet most workers cannot do the work they love. But we can all enhance our capacity to live purposely by learning how to experience satisfaction in whatever work we do. We find that satisfaction by giving any job total commitment. When I had a teaching job I hated (the kind of job where you long to be sick so you have an excuse for not going to work), the only way I could ease the severity of my pain was to give my absolute best. This strategy enabled me to live purposely. Doing a job well, even if we do not enjoy what we are doing, means that we leave it with a feeling of well-being, or with self-esteem intact. That self-esteem aids us when we go in search of a job that can be more fulfilling.
via Bell Hooks
The best way to get rich is to keep $10 million in your checking account in case a good deal comes along.
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.