Whose inflation is it anyway?

A mathematical explanation for why inflation rates feel too low.

Last week, after months hovering around 0-1%, America's official inflation rate jumped sharply up to 2.8%. For a lot of people, that was a long time coming. There have been suspicions for years that the official inflation rate is somehow not reflective of the "real world" — that while inflation has been low, the actual cost of living has been increasing.

(Btw, do not search for “inflation” on Twitter. I promise you will regret it.)

Clearly criticising inflation calculations is nothing new. More in depth criticisms range from sensible questions about the goods and services considered, to crackpot theories about government cover-ups. Some of the first category are worth looking at, especially around the question of how to include housing, but for the rest of this I'm going to focus on something I don't see mentioned as often.

You're (maybe) not average

If an economist tells you “wages have increased”, the appropriate response is to ask “Whose wages? Mine haven't.” We're all well aware that increases in an average don't necessarily mean an increase for a particular individual. But when it comes to inflation, we seem to forget that. The reported national inflation rate is an average of the price increases of a variety of goods and services. The "shopping basket" is chosen to be representative of the country as a whole, but that doesn't guarantee it applies to you.

If the price of children's clothes increases, but you have no kids, you won't be affected. Similarly, if you don't have a car, an increase in the price of petrol (gas) isn't going to hit your wallet directly. If you take all these price changes together, you get your own "personal inflation". In fact, in 2010, the BBC published a "personal inflation calculator" that you could use to work this out. The national inflation rate is an average of all these rates — so obviously there will be some people for which "their inflation" is much higher than the reported rate — something that is rarely mentioned.

GDP is to wages as inflation is to...

Of course, this is really just being pernickety. The inflation rate isn't really designed to be used as an estimate of the changes in the cost of living. It's designed as a tool to support Central Banks with their monetary policy. Much like measure of GDP per capita is a good measure of long term national prosperity, inflation is a good measure of average changes in the purchasing power of money. However, for measuring short term fluctuations, or for looking at outcomes of specific groups, national average inflation may not be the best metric.

In general, to be a good measure of cost of living changes, the inflation rate needs to measure the change in consumer prices for a "typical household". If there is random variation — some people experience more inflation than the official rate one year, and then less the year after — that's to be expected and not a particularly big deal. However, if there is systematic bias — if inflation for one group is always different from the national average (and different in the same direction), that's a much bigger problem...

Plutocratic bias

Once you start thinking of inflation as an average, you might start to wonder what kind of average. How do statisticians take the all prices of this "shopping basket" and collapse them into one number? Between products, how important is a change in the price of bread compared to the price of cat food? Across people, if everyone has their own "personal inflation" reality, do we treat everyone equally? Or do we give more weighting to the people who spend more?

In the UK, the answer to both these questions is the same. (I am going to use UK figures for the rest of this because the UK's Office of National Statistics is so good —they report all their assumptions, underlying data and methodology issues in nice clear language. But the rest is true for all the CPI calculations I’ve seen across other countries) For each item in the shopping basket, the ONS (the "Office of National Statistics") calculates a "weighting" — the proportion of total national expenditure spent on that item. The annual price changes are multiplied by these weights to come to one final figure. For example, £0.22 of every £1000 spent in the UK goes on cigars. So they get a weight of 0.022%. And so if cigars double in price, inflation increases by 0.022%. As a result, the more you spend, the more important you are to the calculation.

Calculating the weightings in this way does make a difference. In 2015, the ONS wrote a paper to work out exactly how much. They recalculated inflation as a straightforward average "one person one vote" style, and then compared it to the weighted method they normally use. The result: for 15 years, with a few rare exceptions, the reported rate was consistently lower than the inflation experienced by a typical household.

While the average difference across this period (0.33 percentage points) doesn't sound massive, it compounds. Each decade, the median household's wages "adjusted for democratic inflation" are ~3% lower than the real wages typically reported.

Why is this?

The rich don't spend their money on the same stuff as the poor. You don't see many aristocrats at Poundland, and you don't see many shift workers in the business class seats. In Britain, the poorest 10% spend 42% of their total expenditure on food. The richest — just 25%. In general, the poorer you are, the more money you spend on necessities, and less on luxuries. If the price of necessities are consistently increasing faster than the price of luxuries, inflation will always be higher for those on minimum wage. This becomes particularly important when you consider Baumol's Cost Disease.

From Scott Alexander:

Suppose in some underdeveloped economy, people can choose either to work in a factory or join an orchestra, and the salaries of factory workers and orchestra musicians reflect relative supply and demand and profit in those industries. Then the economy undergoes a technological revolution, and factories can produce ten times as many goods. Some of the increased productivity trickles down to factory workers, and they earn more money. Would-be musicians leave the orchestras behind to go work in the higher-paying factories, and the orchestras have to raise their prices if they want to be assured enough musicians. So tech improvements in the factory sector raise prices in the orchestra sector.

Now, look at this graph:

TVs, Toys, Software, Cars and Clothes are all industrially manufactured goods with continuous productivity improvements. They are also the kind of things you buy more of when you're rich. Healthcare, Childcare, Housing and Food are typically labour intensive — for now at least, you still need real people involved in all of these. They are also the kind of things almost everyone needs to buy, and as such are a much higher proportion of a poorer household's budget. While Baumol as a rich academic first noticed his Cost Disease in orchestras, it's far more important for a country's essentials than its symphonies.

I think this gives a nice theoretical explanation for why people are suspicious of inflation calculations. Because of Baumol's Cost Disease, the price of labour intensive essentials are increasing much faster than TVs and software. For most people, these essentials are a significant proportion of their budget. However, the richer you are, the more you spend on other things that are continually decreasing in price. And, the richer you are, the more important you are to the overall inflation calculation, because you get a weighting based on your expenditure. As a result, inflation rates systematically underestimate increases in the cost of living for a typical household.

At the extremes

The graph from the ONS earlier showed in difference in average inflation rates calculated in two different ways. At the extremes of the distribution, the difference is likely greater still. This is particularly important, because we often use “inflation adjustments” to answer questions like "How has the real minimum wage changed over time?" or "How much should inflation-linked benefits increase each year?".

For example, if we take this graph of showing the Federal Minimum Wage in the United States “adjusted for inflation”:

If US inflation patterns are similar to the UK, we already know we need to subtract at least an extra ~3% from that top orange line every decade because of the difference in plutocratic and democratic inflation averages. (Or, to put it another way, at least $1.15 between 1970 and 2016.) However, people on minimum wage are, pretty much by definition, not in the middle of the income or expenditure distribution, so we probably need a bigger adjustment. But how much bigger?

In the UK, the ONS outdoes itself. It publishes detailed CPI calculations for the different subsections of the country, even providing both plutocratic and democratic weightings for each. They split it by retired vs working, households with and without children, as well as providing a calculation for each decile of both the expenditure and income distributions. As you’d expect, the biggest difference is between expenditure deciles:

If the difference in inflation between two groups can be as high as 12% over a 15 year period (or 0.8% per year), this is clearly something worth taking seriously in discussions over benefits, pensions or minimum wages. For people who depend on these income streams, this difference in inflation rates means they may be effectively 8% poorer every decade than is reported in official statistics.

This isn’t as a result of an elaborate conspiracy to cover up “real inflation”. It’s a simple mathematical quirk of the way inflation is calculated that is explained in detail on the UK government website. The problem comes when we use an plutocratic weighted average inflation rate to describe changes in the cost of living, something that measure was never designed to do.

Finally, here's something I made earlier…

Since the promise of this newsletter is a bit of writing combined with a bit of making, I thought it would be fun to revive and update the BBC’s old personal inflation calculator:

It comes pre-filled with some data from the ONS for median households, as well as the poorest and richest 10%. You can also fiddle with the numbers to tell whatever inflation-based story you think will get the most likes on Twitter.

However, it doesn’t work particularly well. It doesn’t go into enough granularity to show any interesting difference between groups. Regardless, I thought it could be of interest to someone so here’s the link: https://notfunatparties.com/inflation.

A "solution" to the Calendly debate

A whole new way to passive-aggressively schedule a meeting

Each year, humpback whales spend the summer feeding in the fertile waters of the Arctic. When winter arrives, and the fish become scarce, they travel 5,000 miles to their familiar breeding grounds in tropical waters. Similarly, when the posts about Tigers, Miami or VCs’ topless selfies have run dry, ‘Tech Twitter’ returns to the comfort of debating the etiquette of sending a Calendly link:

For the uninitiated, Calendly is a tool that lets you send out a link to someone so they can book a time directly on your calendar, without the rigmarole of the email back and forth. Though other brands are available, Calendly is the biggest and most popular. While it definitely makes life easier, there is obviously some debate on whether it’s a bit rude?

As this blog post nicely summarises, the main problem is that while it may save time in aggregate, it moves all the effort onto the person who needs to book the meeting. As a result, it can come across a bit impersonal. And if you’re the person who is asking for the meeting it’s probably on you to put the work in, so a Calendly link might not be the best option.

So in that vein, I want to offer you a simple alternative. It’s designed for when you really want someone to agree to a meeting — whether that’s a friend with a notoriously packed social schedule or former acquaintances that you want to share exciting business opportunities with. It’s completely free — you can try it out and create your own calendar links without even making an account. (Though if you need any enterprise features, please do get in contact with our sales team.)

Hopefully, this will solve some of your current meeting scheduling problems. And then replace them with completely new ones.

So, without further ado, here’s “I’m booking you”:

I hope you enjoy it.

About “I’m booking you”:

Obviously, we (me, Reda and Reuben) had a lot of fun — mostly just playing around with various CSS transformations. If you liked it, I would also highly recommend the “Bad UI Battles” subreddit. And, if you were wondering where our original inspiration came from, look no further than this incredibly nostalgic piece of internet history:

If you’ve got any fun suggestions, definitely let us know. We’d be up for adding/changing/removing features if anything makes us laugh.

If you enjoyed it, feel free to share it with your friends/colleagues/HR departments.

If you hated it, close the tab.

About Not Fun at Parties:

This “newsletter” is a fairly odd mix of tech, data, economics and stupid stuff (like this). I’m aiming for each post to have an attached “thing I’ve made”, mostly to give me an excuse to try out new tech. If that sounds like your bag, let me send you emails:

What Goodreads could have been

And a prototype of something different...

Apparently 88,000 people read the last post here. It went to the top of HackerNews, was featured in Morning Brew, Startup Digest, and most amusingly, Money Stuff. Basically, it was a bit crazy. Also, more than 100 people decided to subscribe, which feels like a pretty big vote of confidence after just 1 post. So I guess the pressure’s on for this one…

Last weekend I was recommending books to 3 million strangers on the internet. It’s not a situation I’ve been in before. Setting it up, while definitely easier than selling an NFT, wasn’t completely straightforward. I ended up handwriting HTML and CSS to show book previews in a way I thought made sense.

This gave me an inkling of an idea. And thinking about this gave me an excuse to do 2 things:

  • Try out Supabase to see if I could built an entirely new app in a weekend

  • Really go to town on why I don’t like Goodreads.

I don’t want to bury the lede. If you don’t want to read a longish article and just want to try something out, you can sign up to the prototype here: https://copybooks.app.

Recommending books on the internet

On istheshipstillstuck.com, this is what I ended up with when I tried out affiliate marketing:

I wasn’t particularly happy with it, but I didn’t have time to make something better. Firstly, the book list (and its order) was hardcoded. Every time I wanted to change the selection, I had to change my code and redeploy the whole website. That’s the main reason why I ended up with so many commits for what was quite a simple site:

The second “issue” was that this was just me imposing my ranking on the world. It would have been far more interesting if the ranking could have dynamically changed based on which books people were actually clicking on.

Finally, I managed to localise these links so that people with their computer’s language set to “en-gb” would get shown Amazon UK links, while others would get Amazon US links. However, this didn’t always work — a lot of people in the UK just use the default American language settings. It also didn’t account for people not living in the UK or in the USA, which was actually quite a lot of traffic:

I couldn’t find a useful widget that had all this built in, so I had to make do. But what really confused me was: why on earth doesn’t Goodreads do this?

They’ve made a half-hearted attempt — but you can’t add an affiliate code, you can’t add comments and you can’t easily choose the order:

A week later and I’ve been thinking a lot more about how and why Goodreads screwed up…


Critiques of Goodreads are 10-a-penny. Most them bang on about on how the UI is dated, how parts of the site are buggy/broken or how the content moderation is a misery for authors. But if that were truly a death sentence for the success of a product, someone ought to write to Craig Newmark, Jeff Bezos or Mark Zuckerberg. Make sure to address it to their butlers.

Goodreads isn’t “broken” because it’s difficult to use. Goodreads never achieved what it set out to do in the first place:

The focus is on finding and sharing. But virtually no one uses it for that. If you ask people how they actually use the site, they say this:

I do find it useful, but not entirely for the way it's intended. The social part of Goodreads is the least important thing to me. I don't belong to groups or seek out friends at the site or utilize any of the recommendations or lists. Mostly it's an organizational tool to keep track of what I've read .

I mostly use it as a glorified list of the books I want to read in the coming time (I LOVE making lists). 

I pretty much completely ignore the social-media aspects of the site with the possible exception of occasionally scanning a list or two.

I like it as a personal record, of books I read and how I felt about them.

I absolutely detest it as a social media. All you ever see are people posting gifs and extreme reviews long before the books are published. The sheer amount of "I refuse to read this book and it gets 1 out of 5 because nothing can be as good as THE hunger games" are rampant, and even worse they tend to end up as top reviews.


Goodreads wants to be a social network. For most people, Goodreads is a bookmarking tool. That’s why the embed widget wasn’t what I wanted. It was just a public facing progress tracker, not a tool built specifically for sharing books.

Of course, the site does have its fun moments…

Though if the top Goodreads moments start to sound like they ought to be on Twitter… segue time…

A theory of social networks:

I recently read an interesting blog post about social networks called “Status as a Service”. It talks about how social networks compete on 2 things: Social Capital and Utility. By Utility it meant “using this app makes my life easier” (think Steve Jobs’ “bicycle for the mind”). Social Capital essentially means to what extent does the app feel a bit like this:

Here’s a few examples:

  • Messaging apps (Skype, Whatsapp, Messenger etc.) are high utility, low social capital. Much better than shelling out 12p credit per text, but you can’t really get followers/likes or meet new people.

  • Facebook is apparently high social capital, low utility. It’s basically useless for your life, but if you post your engagement photos you get lots of likes.

  • High utility, high social capital apps basically only exist in China: think WeChat.

This is Goodreads, on a graph:

On Goodreads, there are a few people fishing for likes with their reviews, but generally Goodreads doesn’t really have any Social Capital. People just use it to make their life easier.

This is extremely weird!

How we talk about books:

Outside of Goodreads, people talk a lot about their favourite books, and we constantly use them to make judgments about people. If you walk into someone’s house and there’s a copy of Infinite Jest on their table, you know what you’re dealing with:

Likewise, if someone’s book shelf is filled exclusively with Jeremy Clarkson, Stephanie Meyer or Dan Brown, you’re probably making a different kind of assessment. And if it’s exclusively Jordan Peterson? Run.

More generally, recommending a good book gets you some social brownie points. And in a remote-working world, woe betide the talking face with a poorly judged bookshelf:

This is such a big deal that you can hire a Zoom bookcase consultant, or buy “books by the yard” purely for decoration.

But Goodreads doesn’t seem to want to engage in any of this. They seem quite happy to just be a fairly useful bookmarking tool. If you ever see someone offering their book recommendations, they won’t be using Goodreads to do it. They’ll create a new page on a website, write a Twitter thread or write a blog post.

What went wrong?

In my view, Goodreads made 2 poor product decisions:

  1. Copying/building on Facebook

  2. Combining recommendations and progress-tracking

You can’t really blame Goodreads for copying Facebook. When the site was founded in 2007, Facebook was the only game in town. Everyone and their dog was building the “Facebook, but for cats”. But that decision has limited Goodreads. While reading is sometimes a group activity (think book clubs or primary school), it often isn’t. To be completely honest, I don’t usually care what my friends are reading. However, I do read the recommendations of people on the internet — I’m not friends with them on Facebook, I follow them on Twitter. I think it makes sense. I generally follow people on Twitter because they are interested in the same things as me, which isn’t necessarily true about my actual friends (nor would I want it to be, I think that would make life quite boring).

Combining recommendations and bookmarking is a stranger decision. For Goodreads to be most useful, I need to use it to keep track of all the books I’m reading — but that means recommendations are an unfiltered mess. In a world where people buy “adult cover Harry Potter” books and where 50 Shades of Grey sold twice as many e-books as physical copies, do people really want their bookmarking tool to be the same as their recommendation platform?

Also, maybe I’m just not interested in everything you’re interested in? I like reading books about football (the Fever Pitch kind), about shipping, about tech, economics, business and the occasional historical fiction. I’m guessing you’re not interested in all those genres. But, by encouraging people to create shelves of simply “Read”, “To-read” and “Currently Reading”, grouped only by the star review you give them, Goodreads bundles all this stuff together.

What is copybooks.app?

On Hacker News, there’s a meme: “I could build that in a weekend”. This is my attempt at transubstantiating that meme (it is Easter after all). Predictably, it was a bit more difficult than I thought, so I didn’t manage to get as much done as I’d hoped. However, in true “building in public” style, I thought I’d put out what I’ve got and see what happens.

Essentially, it lets you create a set of book recommendations and then share them:

In the same way Goodreads rips off Facebook, copybooks “draws inspiration from” Twitter. All the recommendations are public. I’m also working on building in a Twitter integration so you can see recommendations most relevant to your interests. Getting back to the original point, it also has a nice embeddable widget for blogs/websites:

It’s not looking to be a straight replacement for Goodreads. There’s no bookmarking, there’s no 5-star reviews (it has rankings instead) and it doesn’t have a list of every book under the sun. Hopefully though, it will have an interesting curated selection from some interesting people.

Who might those interesting people be? I’m not that worried about getting Bill Gates to sign up (though I guess that would be cool?). I’m most interested in the niche bloggers that include book recommendations at the end of every post. Or perhaps the university lecturer that creates a reading list for their course but wants to make it publicly accessible. Maybe even startups who have a reading list for new hires? And for the Substack writers with interesting perspectives, I’d like to be able to see some of the books that helped form that viewpoint.

By deliberately avoiding a comprehensive database and ML recommendation algorithms, I’m hoping this might work without a significant time investment. In an industry where the stone has been thoroughly bled dry by you know who, this seems like pretty much the only option.

You can give it a try here: https://www.copybooks.app (and please do!). It’s completely free for now — if it seems like people like it, I’ll look into what kind of “premium” features I can add. The code is open source, though this is very much a spare time project for me, so don’t expect too much community management (I also don’t really know how to do that).

The technical bit — my verdict on Supabase

Supabase is pretty new. They bill themselves as “The Open Source Firebase Alternative” and they talk a lot about how quickly you can get up and running. They’re not wrong. It was definitely the easiest way of getting set up with authentication and a relational database that I’ve ever tried (for comparison, I had a play with Hasura earlier this year and Supabase was 10 times easier).

As with Firebase, Supabase lets you build a fairly complicated app without a server. By setting access restrictions at row level, you can directly query (and get realtime updates from) the database without needing to set up middleware to handle connections. This, combined with static site hosting, storage, out of the box authentication and serverless functions for sensitive processes (apparently coming soon for Supabase), makes both Firebase and Supabase pretty good options for getting something up and running in a weekend.

How does it rank as a Firebase alternative though? I have a few years’ experience with Firebase, and now a whole 3 days experience with Supabase, so I am at least half-well-qualified to make a judgment on the comparison. Right now, I would say that Firebase just about edges the developer experience. Their tight integration between the functions, the database and the authentication makes development very fast. The docs, examples and extensions are also much more developed (as you would expect for a mature product). Supabase is very cool, but you quite quickly run into some irritating bugs when you try do something slightly more complicated. If you’re looking to build something fairly simple quickly, and you’re comfortable with NoSQL world, Firebase will do the best job for you today.

However, I don’t think that will last long. Firebase is definitely progressing at a slower pace and has some clear limitations that I can see Supabase smashing through mostly by virtue of building on top of PostgreSQL .

For example:

  • Since it’s NoSQL, Firebase can’t do joins so you end up denormalising a lot, and often making multiple queries to fetch related data.

  • Firebase doesn’t have any GIS capabilities, so you can’t do any location based analysis.

  • Firebase has no way of defining a schema (you can sort of hack it together with the rules, but it’s a real ballache)

  • You can’t do full text search on Firebase. As a result, I tend to use Elasticsearch in combination with Firebase which can get a bit convoluted.

In my view, this is what the future looks like:

About ‘Not Fun at Parties’

Running a newsletter is pretty new for me. I’m not quite sure which direction I’m going to take it in, but my hazy plan is that post will be a mix of product/data/tech analysis and “check out this thing I’ve made”. I’m hoping it will give me an excuse to try out cool tech and write about things a particular kind of person will find interesting. If that sounds like your vibe, be sure to like and subscribe (eurgh).

Inside a viral website

Peeling back the curtain of running a viral meme website for 5 days. More details than you could ever hope for.

As anyone reading this knows, the Ever Given was stuck in the Suez Canal for just over 6 days. It blocked a route that normally carried ~10% of the world’s trade. More importantly (at least for this post), it also generated more than 10% of the world’s memes.

This is an account of running istheshipstillstuck.com.


The website received around 50 million views in a 5 day period. That puts it roughly on par with the New York Times, though all the visitors to istheshipstillstuck.com were seeing exactly the same page. At its peak, there were 8,404 requests to the site per second:

It received over 190,000 likes, comments and shares on Facebook.

It became the top result on Google search for “is the ship still stuck” (ahead of all the world’s newspapers) and as a result received over 400,000 clicks.

Personally, I went from having 208 Twitter followers to over 3,000 and my own Tweets were seen over 1 million times, which has definitely never happened before — previously no more than 15,000 people have seen my Tweets in any given month.

Running the site was incredibly fun, at times pretty damn stressful, and ultimately insanely addictive. It sort of felt like the nerdiest possible weekend-long rager. Writing this post is basically my post-night-out debrief.


I was supposed to be taking a day off. Because we’re still in lockdown in the UK, I spent most of it just wasting time on the internet. At one point, I googled “Is the ship still stuck?” and found it surprisingly hard to find the answer. A quick domain search later (I generally use iwantmyname.com or instantdomainsearch.com) and a fairly obvious idea popped into my head.

I should point out that I wasn’t actually the first to do this. This one was: https://www.isthatshipstillstuck.com/

Setting up the site technically

In my day job, we use Next.js for almost everything we build. It’s a framework built on top of React that just strips out almost all the complexity of building fairly complicated websites. Obviously, this wasn’t a complicated website, but I went with what I’m most familiar with.

The first version of the site had a headline: “Is that ship still stuck?”, an answer “Yes.” and 3 recent articles from the New York Times. I wanted the articles to update automatically whenever something new was published, so I used the New York Times Article Search API which was really easy to get started with (and free). I set this up in just over an hour and hit deploy. (Well actually I didn’t, I set up a Github integration with Vercel so that every time I pushed to main the site automatically updated)

I shared it in our #devs channel at Time to Spare. Reuben suggested I should add a sea-shanty, so I added a hidden link to that viral TikTok if you clicked on “Yes.” Reda pointed out that I needed to improve the <meta> tags for the social media previews of the site (I hope you enjoyed what I went with). So with another 20 minutes for those fixes, I posted the link on my Twitter.

The other things that made it onto the page came from feature requests on Twitter:

Early stats of a viral tweet

I have technically been on Twitter since 2011. I don’t post particularly often and I didn’t have many followers (I’m fairly sure half the ones I did have were either bots or inactive). Most of the things I’ve posted are liked exclusively by my colleagues, my Mum and my ex-flatmate. It’s screaming into the void.

This one felt different, and it was noticeable very early on. I did a quick Google for “what is a good twitter engagement rate” and got an article from Hubspot talking about an average of 0.8%. My Tweet was running at 25% (admittedly with a pretty small sample size). I had a bit of a hunch this was going to be fun.

Interestingly, that engagement rate dropped pretty slowly. It stayed above 20% for a long time. Also fairly consistently, around 20% of the people who liked the Tweet decided to follow me. I have no idea if these stats are representative of Twitter normally.

A couple of people have asked me what I did to promote the site early on. The answer is absolutely nothing. I sent out 1 tweet. I didn’t post it to my Facebook, LinkedIn or anywhere else. Twitter’s strange algorithms and the ridiculous scale of the Internet did everything.

At some point later that day, someone posted it onto HackerNews. It went to 2nd on the home page and received a over a 1000 comments. Most of the comments were (unsurprisingly) software engineers speculating on how they would unstuck the ship. Someone should do a text analysis of how many started with some variation of “Couldn’t they just…”. For a self-taught software programmer, this was definitely something of a career highlight.

From there, it really took off. I particular enjoyed this tweet from the founder of Flexport:


Now there were lots of people coming to the site, I was determined to have as much fun as possible.

I also started to get a bit worried about how much hosting was going to cost me. I’m still on a legacy plan with Vercel, so I didn’t have any transparency on what the final number was going to be. I’d done some back of the envelope calculations that suggested it would come out at around ~$450 but my biggest worry was that I could be an entire order of magnitude out. As a result, I wanted to try out some “monetisation” options to try and cover my potential costs.

In the end, I needn’t have worried. I contacted Vercel support and they told me the hosting cost only came to $70 and that they were going to cover it because they thought it was fun. Honestly, great company. So I’ll be donating anything I’ve earned to tythe.org.


You’ll notice that the site didn’t have any normal ads. This was for 3 main reasons (in ascending order of importance):

  1. I don’t like ads

  2. Cookies

  3. Approval processes

Not liking ads is fairly obvious. I thought it would be tacky and boring.

Cookies are also obviously annoying. In my mind, I couldn’t quite imagine anything more irritating than loading a single-purpose website and then needing to click through a horrendously intrusive cookie banner to actually see the answer.

Finally, all the ad networks I found with a quick search required a potentially multiple day manual approval process. I had more faith in the salvage operation than that.


Instead of ads, I thought I would try and sell an NFT of the page. I’d read a fair amount about NFTs (both good and bad), and I was a mix of sceptical and curious. I thought this would be an interesting and weird opportunity to try it out myself. Added to this, it could be a fun meta-meme. I thought it would be fun to be the first meme website to sell itself as an NFT. Also to be completely honest, I thought it might make it into Matt Levine’s Money Stuff. Essentially, I was “doing it for the gram”.

In the end it was successful, selling for just over $200:

However, that is very much far from the whole story. The whole process was riddled with opaque transaction fees. Here’s the full details on selling an NFT (for someone not already in the crypto ecosystem):

  1. Download MetaMask (a crypto wallet). This bit is free.

  2. Set up an OpenSea account. Also still free.

  3. Once you’ve created a listing, you need to connect your wallet to OpenSea if you want to sell anything. For this, you have to pay “gas” on an Ethereum contract. Apparently this price varies day to day (helpfully), but it cost me $65.

  4. If you don’t have any Ethereum in your wallet (as I obviously didn’t), you need to change your normal money into crypto before you can pay the cost to list something. With a service like Wyre, this comes with another ~10% transaction fees.

  5. You need to accept some other contract that allows you to work with Wrapped Ether instead of normal Ether. Honestly I got a bit lost at this point and can’t even remember if it charged me.

So before I got to the stage of trying to sell this thing, the process had already cost me 4 hours of my time and $70+. Still, maybe the joke would be worth it. I added a link to the top of the website and waited for things to get interesting.

It didn’t really get interesting.

I got a few bids on it. My Dad found it amusing. But ultimately it wasn’t really much fun. The bidders were anonymous. There were apparently thousands of people viewing this NFT (it became one of the top 8 most viewed out of over 15 million NFTs on the platform), but not much happened. What’s more, by replacing the “follow me” button with a link to the NFT, it made my day a lot less fun as fewer people were dropping by for chats on Twitter. Though obviously, if Elon Musk or someone had put on an outrageous bid I probably would have changed my mind…

After my 5-day safari into the “creator economy”, in my view, if this is to be the future, the platforms need a lot of work. At a minimum, there should be a comment section on the listings. There should also be an easier way to buy these things if you’re not already bought into crypto. As it was, I think I directed ~20,000 people to a link where they couldn’t engage even if they wanted to.

Still, I got a bid that I thought was worth accepting. Except, because it didn’t clear the minimum reserve price (1 Ether / $1800), I had to pay some more transaction fees to accept the offer. This was another $70. Now, having spent 140 actual dollars, I am the proud (?) owner of $200 worth (OpenSea took a cut too) of Wrapped Ether. Except, I can’t spend Wrapped Ether on anything useful. I’ll need to spend a bunch of transaction fees to change it into Ethereum and then back into fiat (if I want to use it to buy lunch). At this point, I have given up.

Currently on OpenSea there are 17 million items offered for sale. The vast vast majority have had no offers. For all I’ve seen on the internet about how NFTs are a scam for people buying them, I’m not sure I agree. I think the buyers know what they’re getting into — they basically have to be OG crypto enthusiasts to actually buy NFTs. For the sellers though? Especially for artists looking for a way to finally make money from their art on the internet (I am 100% not putting myself in this category), it seems very pay-to-play with very low likelihood of success.

Anyway, back to the fun.

Affiliate marketing

So having been bored by NFTs, I thought I would give affiliate marketing a try. The logic here was simple: I like reading books and I like recommending other people read books.

Getting set up with Amazon’s affiliate scheme was a breeze (though you do have to do it separately for each country). There’s no delays getting authorised, you just fill out a couple of forms and you’re away.

For a data nerd, it is also extremely fun. You get live reports of all the products people using your links have bought. These reports aren’t just limited to the products you recommend — if someone buys anything within a 24 hour period of clicking your link, you can see, and you get commission. It’s wild.

So yeah, I got commission for these:

Almost as much fun as seeing the full breadth of the Amazon product catalogue was seeing which book recommendations were the most popular. If you kept coming back to the site, you might have noticed that the book recommendations were changing. That was because I could immediately see which ones people were buying. In the final reckoning, this was the league table of the books bought (from the US):

  1. Prisoners of Geography — 127

  2. The Box — 111

  3. The Invisible Hook — 16

  4. The Silk Roads — 13

  5. A Splendid Exchange — 10

  6. 90% of everything — 6

  7. The Ocean of Life — 1

That’s also probably roughly the order in which I would rank those books, so well done everyone.

Prisoners of Geography coming top of that list also had 1 particularly fun side effect:

I’m still awaiting the final reckoning of how much I earned from these links (you only get paid commission when the item is shipped, not when it’s ordered), but so far it’s been less than $500 across 3 days. Considering that in those 3 days the website had 2.7 million page views, I think it’s fair to say you’re not going to make your fortune from affiliate marketing links to books. It is good fun though and some people on Twitter thought it was nice.

Tech twitter beef

However, while I was messing around with the site, some people on Twitter were getting a bit annoyed:

Twitter avatar for @holmanZach Holman @holman
istheshipstillstuck.com is such a great example of a page in 2021: capitalizes on current events, is a clear candidate to be a simple static site, loads the HTML immediately but spends the next minute running next.js before it loads anything on-page, and you can buy it as an NFTIs this ship still stuck?You know that ship, the one possibly still stuck in the canal. Is it still there? Find out that, and really only that, at this website.istheshipstillstuck.com

As much as I enjoyed the old-man-yells-at cloud style criticism of the modern web development stack, it wasn’t exactly accurate. As was pointed out in a quote tweet by the Vercel CEO, the problem wasn’t Next.js at all, but the Vesselfinder embedded map taking a while to load (because everyone wanted to check the Ever Given’s status):

Twitter avatar for @rauchgGuillermo Rauch @rauchg
istheshipstillstuck.com is such a great example of a page in 2021. Let's look into the actual facts of this tweet, which is a great example of a tweet in 2021.

Zach Holman @holman

https://t.co/visIYS1kCu is such a great example of a page in 2021: capitalizes on current events, is a clear candidate to be a simple static site, loads the HTML immediately but spends the next minute running next.js before it loads anything on-page, and you can buy it as an NFT

I found this exchange very fun.

I also particularly liked ignoring this terrible suggestion:

I’m not bringing this up just to dunk on people. It’s worth pointing out that for all the criticism, the Next.js + Vercel combination meant that I didn’t have to worry about scaling the site at any point. There were millions of hits, and sometimes thousands per second, and it all just worked. The basic page continued to load in less than half a second under all that load. It was remarkable.

Finally, this Tweet gives me an excuse to point out that I discovered Simple Analytics. I couldn’t stand the idea of needing a cookie consent banner obscuring the page, but I did want to have some analytics to stare at slack-jawed. Not only was Simple Analytics incredibly quick to set up, didn’t require any cookie nonsense, it also had a very fun public dashboard so everyone else could also waste their weekend. My only wish was that I’d used it from the start.

Unrealised dreams

I did have a couple of ideas that I didn’t get time to finish implementing.

First was a Wacky Races style game of “drive your ship through the canal without crashing into the other boats”. Fortunately, CNN basically did that.

Second was a Cameo appearance. I wanted to see if I could pay a few minor celebrities to discuss how they would free the ship. For British readers, I really wanted Paul Chuckle to do a commentary on the whole operation.

Alas, events intervened.

The main event.

At 4:30am UK time, my phone started buzzing. Fortunately, I woke up. Someone had alerted me that the ship was “freed”. All the major news sites were reporting that the situation had been resolved. But it didn’t actually seem to be moving? I was frantically searching for more details of what had happened. Eventually, I settled on “Sort of?”:

This led to a series of ridiculous Twitter exchanges. People were responding to actual news accounts with “Are you sure? istheshipstillstuck.com doesn’t seem to agree”. Other actual journalists were tweeting out the website as some kind of semi-authoritative source. It was weird. And stressful. Eventually, in another ludicrous turn of events, the New York Times Cairo Head vindicated my decision:

Twitter avatar for @VivianHYeeVivian Yee @VivianHYee
Can confirm
istheshipstuck.com’s assessment: “Sort of?” The ship is now edging nearly parallel to the canal, and tugs will keep pulling it for the next 1.5 hours as the tide rises, until it can move north and get out of the other ships’ way

The rest of the day continued confusingly. The world’s newspapers caught onto the fact that the ship wasn’t really free and started describing it as “partially refloated”.

Things then got even stranger. The Egyptian President announced on Twitter that they had “ended the crisis of the stuck ship”. A fair few news sites again picked up the news. But it wasn’t free!

To try and get to the bottom of it, I found my way onto an obscure Egyptian news broadcast live stream. It was all in Arabic, but there was a nice guy called Ahmed translating everything in the comments section. The Egyptian President had obviously jumped the gun.

So the Suez Canal Authority started killing time. They were giving every presentation they could think of to distract from the fact the ship was still very much stuck. They talked about their rigourous ship-driver training school. They described how they would react to an oil spill, if there was one. They even started talking about their digital transformation and how they were soon going paperless. It was farcical. And hilarious.

But then the ship did actually move. And so with Reda from our team at Time to Spare, we had some fun…

A stealth Rickroll victory lap

Some people noticed pretty quickly what we’d done:

But after some digging, we found something far more fun. The Rickroll of no known origin:

All in all, well worth the effort.

What was I most pleased with?

It was pretty cool to run a massively popular viral website.

I’m pretty pleased with traffic stats.

Was delighted by real journalists using it as a source:

Quite pleased with rick-rolling ~250,000 people.

But let’s be honest, most proud of this:

Looking for one last hit

I’ve never really been that addicted to social media previously (if you exclude MSN messenger), but this was very different. I barely slept. It was addictive as hell. So in the vein of looking for one last hit:

  • Most people got Rickrolled, did anyone get the alternative?

  • Did people find the foghorn button?

  • Were the XKCD jokes too obscure?

  • Did anyone end up playing Transport Tycoon?

Loading more posts…