Demos Make Life Worth Living

The Bethesda Fountain in NYC

The ini­tial goal of any green­field pro­ject of mine is to build a work­ing demo. If pos­si­ble, that demo should run on the web, so I can dis­trib­ute to friends and fam­ily.

One of my first posts to hit the front-page of Hacker News rep­re­sented ex­actly this phi­los­o­phy. At the time, I was in high-school, tak­ing an in­de­pen­dent lin­ear al­ge­bra class. I wanted to demon­strate ex­actly how the things I was learn­ing could be ap­plied to real-world prob­lems. My blog post, Markov Chains are the Original Language Models” in­cluded an in­ter­ac­tive (small) lan­guage model that read­ers could use to gen­er­ate mean­ing­less text. I gave them the abil­ity to toy around with the train­ing data to see how it could af­fect the fi­nal mod­el’s gen­er­a­tions.

I ended up get­ting an A” in the class and a cou­ple thou­sand hits on­line. More im­por­tantly, I had proven the util­ity of a demo. Since then, every ma­jor pro­ject of mine has had some kind of demo. Some of them bet­ter than oth­ers.

The Harper demo, in par­tic­u­lar, was rough to start. It was enough to prove the con­cept and es­tab­lish the pro­ject within a cer­tain ecosys­tem, but it far from per­fect. It had bugs and, un­til now, has­n’t evolved with the pro­ject at all.

For all my pro­jects though, I see the ini­tial demo as crit­i­cal. Beyond prov­ing the con­cept, the demo gives me an enor­mous amount of mo­ti­va­tion. As an en­gi­neer, there are few things more thrilling than to watch some­one toy around with the prod­uct of your work. When there’s a live ver­sion of your prod­uct avail­able, any in­cre­men­tal im­prove­ment comes with a hit of dopamine.

I had a great dis­cus­sion with Adam Zielinski a few weeks ago, when he en­cour­aged me to make the demo on the Harper web­site as close to the ac­tual Harper ex­pe­ri­ence as pos­si­ble. Last week, I did ex­actly that.

Actually, I did more than that. Today, the demo is­n’t just sim­i­lar to the ex­pe­ri­ence of us­ing our Chrome ex­ten­sion, it is ex­actly the same. The DOM-inspecting and ma­nip­u­lat­ing tech­nol­ogy found in the Chrome ex­ten­sion can now be em­bed­ded in any page. That in­cludes the ac­tual Harper web­site, and any other site you might want.

For now, I’m call­ing this the lint-framework, and it opens the doors to a good many other in­te­gra­tions (should we de­cide to build them). It is es­sen­tially a portable pack­age that in­cludes pretty much every­thing you need to pro­vide Harper to any browser-based text ed­i­tor.

Many ap­pli­ca­tions al­low users to build plu­g­ins into their WebView, but don’t pro­vide the full web ex­ten­sion API (Thunderbird, for ex­am­ple). In these cases, we can pull in the lint-framework and wire up the na­tive plu­gin APIs to build con­fig­u­ra­tion pages. It is­n’t a com­plete so­lu­tion, but it cuts down the work and main­te­nance over­head enor­mously.

As it turns out, the cruft of Harper’s demo was a ma­jor bar­rier to adop­tion. Since pol­ish­ing it up late last week, we’re al­ready see­ing met­rics like bounce rate move in a pos­i­tive di­rec­tion.

Published September 18, 2025 at 6:00 AM

Proofread by Harper.

Comments