The Hustle’s best Sunday stories of 2020

A roundup of our readers’ favorite longform features this year — and a few that didn’t make the cut.


January 2, 2021

At The Hustle, we generally like to stay out of our stories and let the characters do the talking. 

But this week, I’m going to break the 4th wall.

I launched our Sunday email back in April of 2018 with a deceivingly simple goal: To send out one long-ish business/tech feature per week.

Since then, our team has put out 139 Sunday stories. 

We’ve gone deep on some pretty odd stuff: an economist who won the lottery 14 times, trust funds for pets, drunk shopping, the fake Amazon review economy, free car giveaways at malls, and even a yodeler who sued Yahoo.

For a typical Sunday story, I’ll conduct 5-10+ interviews, run surveys, comb through datasets and newspaper archives, and make visuals (animations, illustrations, charts, graphs, comics).

I get help from an incredibly smart editor (Brad Wolverton), a back-end coding wizard (Kaylee Jenzen), the maestro of our Monday-Friday email (Trung Phan), and a growing stable of talented freelancers.

Our typical Sunday email has a 47% open rate and is read by 600k+ people. The web versions often attract hundreds of thousands of views.

For this email, I wanted to focus on some of our favorite work from 2020, along with some stories that didn’t make the cut.

Our favorite Sunday stories of 2020

In 2020, our team wrote 52 Sunday stories that collectively totaled 93,887 words. Some highlights:

Enjoying this article?

Get the Hustle’s 5-minute weekday roundup that keeps you hip to happenings in tech, business, and internet… things.

  • 16 stories made the front page of Hacker News
  • 5 articles received option inquiries for film and TV
  • Our reporting helped raise $75k+ to assist small business owners and rideshare drivers
  • Our stories led to dozens of podcast & radio features, including interviews with Slate Money, NPR, and Radio New Zealand
  • We received citations and pick-ups in CNN, The Washington Post, The Today Show, and many other outlets

We wrote about everything from Warren Buffett’s chocolate obsession to the sleaziness of the cruise ship industry.

But 5 stories in particular stood out.

1. The man feeding a remote Alaska town with a Costco card and a ship (May 3, 2020)

Summary: When Gustavus, Alaska, was cut off from its grocery supply chain, one resident decided to take matters into his own hands.

Why I like it: Sometimes, the hardest (and most important) part of the Sunday process is finding a story worth telling. This was a completely original piece of reporting, sourced through virtual town hall meetings in remote Alaska and conversations with the town’s 446 residents.

It’s a story about ingenuity in the face of insane logistical and geographical barriers. But it’s also an ode to the camaraderie of isolated communities.

It was our most widely read story of 2020 and was picked up by nearly every major news outlet in the country.

2. The economics of all-you-can-eat buffets (January 26, 2020)

Summary: How does an industry that encourages its customers to maximize consumption stay in business? We looked at the dollars and cents behind these strange culinary institutions.

Why I like it: I’m obsessed with digging into the economics of ridiculous everyday things. This one was particularly enjoyable. 

I had a lot of fun doing the math on precisely how much food you have to eat to “beat” the buffet. It was also a treat to learn about all the tricks buffet owners use to maximize revenue, from front-loading carb-heavy dishes to using smaller plates.

3. The economics of vending machines (October 4, 2020)

Summary: The pandemic has boosted interest in vending machine ownership. But just how lucrative is the business? We spoke to 20+ operators to find out.

Why I like it: I talked to more than 20 vending machine owners all over the US for this story, joined multiple private vending machine Facebook groups, and collected a dataset that shed some light on the per-unit economics of these weird machines.

I’d always wondered who (if anyone) was making money on these things. The answer turned out to be a bit more complex than I thought.

4. Why it only costs $10k to ‘own’ a Chick-fil-A franchise (January 19, 2020)

Summary: The chicken chain is known for having the lowest entry cost of any major fast-food franchise — but there’s a catch.

Why I like it: This was one of the more ambitious stories I’ve tackled in one week, as it called for a dozen interviews with franchise owners and an analysis of 20+ financial disclosure documents.

It was also a heavy lift on the visual side, involving Excel, Photoshop, Illustrator, and a lot of custom formatting. 

5. Amid a pandemic, Uber drivers choose between health and livelihood (March 22, 2020)

Summary: We surveyed and interviewed more than 50 full-time rideshare drivers via phone, email, Facebook Messenger, and text, piecing together a sampling of how the pandemic affected earnings.

Why I like it: This wasn’t our most popular story, but it was one of our most important, chronicling the day-to-day experiences of “essential” independent contractors during the pandemic. 

To this day, I’m still in touch with a few of the folks I surveyed or talked to in the course of my reporting. And our readers came through big time, donating more than $25k to the drivers featured in the story.

Honorable mentions

You can read through the archive of all our 2020 Sunday stories here.

A few Sunday story rejects

For every Sunday story we publish, there are 10-15 that don’t make the cut for various reasons.

These rejected story leads go into a cold, dark place I like to call the story graveyard. It’s basically a Google Doc full of hundreds of “rabbit holes” I’ve gone down — kind of like a reporter’s equivalent to R&D.

Here are a few stories that didn’t quite pan out in 2020:

Why an investor bought $1m in nickels

Back in 2011, a Dallas-based hedge fund manager named Kyle Bass made an unorthodox investment: He bought 20m nickels (a total of $1m) from the Federal Reserve.

Why?

Back then, the raw scrap value of the metals in one nickel was 6.8 cents — more than the face value of the coin itself.

Unfortunately for Bass, melting coins has been illegal in the US since 2007, so scrapping nickels for a profit wasn’t in the cards. And neither was our story. 

What makes a Stradivarius worth $1m+?

Combing through newspaper archives is one of my favorite ways to find a story. Sometimes, a truly bizarre clip inspires an idea.

Earlier this year, I came across an article from 1999 detailing an incident in which the famed musician Yo-Yo Ma forgot his cello in the trunk of an NYC cab. The instrument — a 1733 Stradivari creation worth $2.5m — sparked a city-wide manhunt.

Ma’s cello was actually worth small potatoes compared to some other legendary stringed instruments:

  • The Lady Blunt violin, considered to be one of the best-preserved Stradivari violins on Earth, fetched $15.9m at auction in 2011.
  • The Vieuxtemps Guarneri violin, built in 1741, went for $16m in 2012.

In the course of my research, I found a study that showed violists couldn’t tell the difference between a $1m+ violin and a cheaper new one in a blind sound sample test.

I set out to trace how Strads became so highly coveted. This included phone Skype calls with a Kentucky-based auctioneer and a rare instrument appraiser from Italy.

Ultimately though, I decided the story didn’t have a wide enough appeal.

The business of extremely expensive fish

The Asian arowana fish is often called the “Lamborghini of the sea” — and with good reason.

The fish is an endangered species but also a highly desirable status symbol in China, where collectors pay upwards of $10k — and as much as $300k — for certain species.

Asian arowana are a $200m/year global industry, and owners go to great lengths to protect and supercharge their fish:

  • They buy 400+ gallon tanks with high-security fences.
  • They hire arowana bodyguards and private motorcades when the fish are transported.
  • They give their fish plastic surgery, shelling out $60 for eye lifts and $90 for chin tucks.

I scrapped this one after failing to secure an interview with an arowana dealer. (If you know anyone, shoot me an email!)

Get the 5-minute roundup you’ll actually read in your inbox

Business and tech news in 5 minutes or less

100% free. We don’t spam. Unsubscribe whenever.

Psst

How'd Bezos build a billion dollar empire?

In 1994, Jeff Bezos discovered a shocking stat: Internet usage grew 2,300% per year.

Data shows where markets are headed.

And that’s why we built Trends — to show you up-and-coming market opportunities about to explode. Interested?

We’re shooting our shot…

Start your mornings with The Daily.

Get the freshly baked 5-minute newsletter every day except Saturdays.

It’s filled with the most interesting stories on business, tech, and the internet.

And written for innovators of every industry. Sign up for the news that slaps.

If you don’t like it, unsubscribe any time. Privacy policy.

[email-submission-form redirect-to-home="true" button-text="Join Free" include-trends-opt-in="true" id="main-signup-form" fail-url="" success-url="https://thehustle.co/signup" default-source="thehustleco" default-campaign="home"]
<script type="text/javascript"> var onloadCallback = function() { grecaptcha.render('verify-your-humanity', { 'sitekey' : '6LdddrcZAAAAALyttpvOqiwQGwq5BNhgDz4tMQGE' }); }; function getCookieValue(a) { var b = document.cookie.match('(^|[^;]+)\\s*' + a + '\\s*=\\s*([^;]+)'); return b ? atob(decodeURIComponent(b.pop())) : ''; } function setHiddenFieldValue(wrappingDiv, searchParams, className, utmName, cookieName, defaultValue) { var el = wrappingDiv.getElementsByClassName(className)[0]; var existingVal = el.getAttribute('value'); var newVal = searchParams.get(utmName) || getCookieValue(cookieName); if ((existingVal == null || existingVal == '' || existingVal == defaultValue) && (newVal != null && newVal != '')) { el.setAttribute('value', newVal); } } function setHiddenFieldValueFromUtm( wrappingDiv, searchParams, className, utmName, defaultValue ) { var el = wrappingDiv.getElementsByClassName(className)[0]; if (el != null) { var existingVal = el.getAttribute("value"); var newVal = searchParams.get(utmName); if (newVal != null && newVal != "") { el.setAttribute("value", newVal); } } } function initForm() { var wrappingDivs = document.getElementsByClassName('email-submission'); wrappingDivs.forEach(wrappingDiv => { var sp = new URLSearchParams(window.location.search); setHiddenFieldValue(wrappingDiv, sp, 'funnel-source', 'utm_source', 'funnel_source', 'thehustleco'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-campaign', 'utm_campaign', 'funnel_campaign', 'home'); setHiddenFieldValue(wrappingDiv, sp, 'funnel-medium', 'utm_medium', 'funnel_medium', ''); setHiddenFieldValue(wrappingDiv, sp, 'funnel-referral', 'ref', 'funnel_referral', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-a', 'a', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-c', 'c', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-o', 'o', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-oc', 'oc', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-e', 'e', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-f', 'f', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-r', 'r', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-t', 't', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s1', 's1', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s2', 's2', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s3', 's3', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s4', 's4', ''); setHiddenFieldValueFromUtm(wrappingDiv, sp, 'funnel-s5', 's5', ''); var error_message = getCookieValue('funnel_error_message'); if (error_message && error_message.trim() != '') { var error = wrappingDiv.getElementsByClassName('funnel-error')[0]; var prev_email = getCookieValue('funnel_email'); error_message = prev_email + " is not valid. Please try again"; error.innerHTML = error_message; error.style = ''; } }); if (false) { initCaptchaFormV2(); } } function initCaptchaFormV2() { var v3RecaptchaResponseEl = document.getElementById('recaptcha-response-v3'); v3RecaptchaResponseEl.parentNode.removeChild(v3RecaptchaResponseEl); var wrappingDiv = document.getElementById('main-signup-form'); var subForm = wrappingDiv.getElementsByClassName('email-submission')[0]; var captchaVersion = document.createElement('input'); captchaVersion.class = 'g-recaptcha hidden-input'; captchaVersion.type = 'hidden'; captchaVersion.name = 'g-recaptcha-response-v2'; captchaVersion.value = 'true'; subForm.appendChild(captchaVersion); var captchaEl = document.createElement('div'); captchaEl.id = 'verify-your-humanity'; subForm.appendChild(captchaEl); var captchaApiScriptEl = document.createElement('script'); captchaApiScriptEl.src = 'https://www.google.com/recaptcha/api.js?onload=onloadCallback&render=explicit'; captchaApiScriptEl.async = true; captchaApiScriptEl.defer = true; document.head.appendChild(captchaApiScriptEl); } function appendCheckboxes() { var optInDivs = document.querySelectorAll('.trends-opt-in'); optInDivs.forEach(el => { if (el.getElementsByClassName('trends-opt-in-checkbox').length < 1) { var checkbox = document.createElement('input'); checkbox.setAttribute('class', 'trends-opt-in-checkbox'); checkbox.setAttribute('type', 'checkbox'); checkbox.setAttribute('name', 'trends_opt_in'); var label = document.createElement('label'); label.setAttribute('class', 'trends-opt-in-text'); label.textContent = "Yes, I'd like to receive updates on market opportunities before they explode from Trends by The Hustle"; el.appendChild(checkbox); el.appendChild(label); checkbox.click(); } }) } window.addEventListener('DOMContentLoaded', (event) => { var funnel_email_cookie = getCookieValue('funnel_email'); if ( (true) && (funnel_email_cookie != null && funnel_email_cookie != '') ) { window.location.replace('/home'); } initForm(); if (true) { appendCheckboxes(); } }); </script> <div class="email-signup" id=main-signup-form> <div class="funnel-error" style="display:none;"></div> <form class="email-submission" action="https://cms.thehustle.co/api/v1/contacts/wordpress_create" method="post"> <div class="email-form-wrap"> <input class="funnel-source hidden-input" type="hidden" name="source" value="thehustleco"> <input class="funnel-campaign hidden-input" type="hidden" name="campaign" value="home"> <input class="funnel-medium hidden-input" type="hidden" name="medium"> <input class="funnel-referral hidden-input" type="hidden" name="referral_code"> <input class="funnel-fail-url hidden-input" type="hidden" name="fail_url" value=""> <input class="funnel-a hidden-input" type="hidden" name="a" value=""> <input class="funnel-c hidden-input" type="hidden" name="c" value=""> <input class="funnel-o hidden-input" type="hidden" name="o" value=""> <input class="funnel-oc hidden-input" type="hidden" name="oc" value=""> <input class="funnel-e hidden-input" type="hidden" name="e" value=""> <input class="funnel-f hidden-input" type="hidden" name="f" value=""> <input class="funnel-r hidden-input" type="hidden" name="r" value=""> <input class="funnel-t hidden-input" type="hidden" name="t" value=""> <input class="funnel-s1 hidden-input" type="hidden" name="s1" value=""> <input class="funnel-s2 hidden-input" type="hidden" name="s2" value=""> <input class="funnel-s3 hidden-input" type="hidden" name="s3" value=""> <input class="funnel-s4 hidden-input" type="hidden" name="s4" value=""> <input class="funnel-s5 hidden-input" type="hidden" name="s5" value=""> <input class="funnel-success-url hidden-input" type="hidden" name="success_url" value="https://thehustle.co/signup"> <input id="recaptcha-response-v3" class="g-recaptcha hidden-input" type="hidden" name="g-recaptcha-response" value=""> <input class="signup-email" type="email" name="email" placeholder="Your email address" required> <input class="email-submit" type="submit" value="Join Free"> </div> <div class="trends-opt-in"></div> <div submit-success> <template type="amp-mustache"> <p class="c-message c-message--success">Thank you for subscribing.</p> </template> </div> <div submit-error> <template type="amp-mustache"> <p class="c-message c-message--failed">Your submission failed. Please try again!</p> </template> </div> </form> </div>