Growing up, I remember “Save Public Radio” stickers all over the place. Beanie-wearing hipsters would sip lattes and bemoan the iPod’s war on radio. There were petitions for grants to keep WBHM’s lights on.
But radio is a tiny blip in the history of music. Ancient Rome had lyres and tubas and bagpipes. Everywhere we discover ruins, we discover instruments. For tens of thousands of years, we had to gather together in order to hear each other strum and hum.
Then, less than 150 years ago, we figured out how to mechanically record sounds. A few decades later, we started transmitting speeches over radio waves.
Radio was a century-long stopgap, a bandaid in-between the invention of recorded music and the invention of the Internet.
Radio’s reign was a four-generation blip.
We complain about losing lots of things as if they’re a part of civilization’s natural order. “People don’t get coffee with friends anymore.” “When’s the last time you called a friend to catch up?” “The dinner party is dead.” But coffee shops, long-distance phone networks, telephones, and McMansions are all recent inventions. 19th Century humans found happiness without them.
Similar to radio, the “death” of San Francisco is being widely reported. Who knows, maybe it’ll continue to be the heartbeat of software. Maybe it won’t.
But what bugs me is when people talk about SF as if it has always existed as some oasis, as if it has always been the center of the technology industry.
San Francisco did not exist as a city until 1850.1 In the 1960’s, San Francisco was a hippie town. Silicon Valley was exactly that - a valley - until Hewlett-Packard and Fairchild Semiconductor sprung up around Stanford. VC’s and entrepreneurs have migrated north to SF in only the past two decades.
SF’s reign has been a one-generation blip.
San Francisco could easily remain as the burning core of the software industry, but crazier things have happened. London is no longer the world’s biggest financial center. Milan is no longer the heartbeat of fashion.
The world keeps changing, yet we keep holding onto things that “once were” and onto how things “should be.”
Cities evolve. People move. We discover new physics equations.
Movies replaced live shows. Now binging habits on Netflix are destroying the movie as a medium.
Talk radio replaced Lincoln-Douglas debates. Now podcasts are replacing talk radio.
Office spaces, cities, cars, suburbs, drive-thrus, jet engines, restaurants, cheeseburgers, hotels, Airbnbs, trains, Zoom, colleges. All of these are cultural stopgaps, blips enjoyed by some number of generations until they’re replaced.
These things are not the natural state of civilization. I’m looking forward to what comes next.
Bloodhounds can smell whether or not a human has merely touched a Coke bottle.
When Richard Feynman discovered this fact in a Science article, he decided to try it himself. He handed his wife a six-pack and told her to handle one of the bottles for a couple minutes while he was out of the room.
When he came back in, he immediately picked the bottle she’d touched. “As soon as you put it up near your face, you could smell it was dampish.”1
He repeated the experiment with coworkers by telling them to take books off a shelf, open them, and put them back. He then proceeded to correctly guess which books they had touched based on smell alone. They were so surprised that they thought he was pulling a “confederate” magic trick.
Bloodhounds, of course, have a much better sense of smell than humans. They can easily follow the path a human has traveled across a carpet. When Feynman got down on all fours and tried to sniff his friend’s trail, he failed.
But bloodhounds having a good sense of smell doesn’t mean humans have a bad sense of smell.
My entire life I’ve been amazed whenever a dog has smelled my hand and then started barking because they knew I’d been cheating on them.2 But not once have I thought to hold my hands up to my nose to see if I, too, could smell the difference.
But I usually don’t get down on all fours and press my nose to the carpet. Maybe I should more often.
I started programming a decade ago. I’ve gone through four distinct coding phases.
In high school, I had an idea for a group texting app. I wanted to assign phone numbers to groups of friends, and then whenever anybody in the group texted the number, everybody else would get the text. “Twitter for friends,” I tried to explain.
Only one person in my high school - Robert - knew how to code. He put together a Twilio script and after a few weeks we could text each other via a shared number. Magic.
Then we went off to college.
I kept searching for somebody to work on the idea. One day, a friend added me to a GroupMe text thread. GroupMe? I googled the company. They’d launched just four months earlier. Fuck.
In 370 days, GroupMe went from launched to scaled to sold to Microsoft for $80 million.
The next time I have an idea, I’m going to build it myself, I thought.
I walked to Barnes & Noble and bought PHP for the World Wide Web. PHP is what Robert had used for our little texting script. And it’s what Zuckerberg built Facebook with. So it must be good!
My introduction to programming was lonely. I’d take my book to Central Library and work through the chapters. Learning how to assign values to $variables was a breakthrough. But how do I get the values to save permanently? I wondered.
The library closed at 1am. I’d walk back to my dorm, grab a Coke from the vending machine, plug my laptop in to my Cinema Display, and keep struggling.
I loved the ifs/thens. I loved the logic games. I loved the idea of building something from nothing. I was hooked.
My roommate was less hooked. “Dude, your monitor is so bright, you gotta turn it down.”
I launched at least a dozen websites and apps with PHP, including RageChill. All of them were spaghetti code. But I didn’t care. I felt powerful.
Senior year, instead of going to class, I’d put on a button-down and drive downtown to the Nashville Entrepreneur Center to work on Stadium Stock Exchange.
My love for programming was reaching fever pitch just as I discovered the Hartl Rails tutorial. I’d always heard about Object-Oriented Software, but I’d never seen it until I saw Rails.
Don’t worry, my Rails code was still spaghetti. But at least now I had Model spaghetti, View spaghetti, and Controller spaghetti.
The volume of spaghetti I cooked up was terrifying. Between February and August of 2013, I rebuilt RageChill, built an iPad app (Objective-C! Pre-ARC!) as a freelancer, and shipped both a Rails app and iOS app for Stadium Stock Exchange.
I didn’t mind spending hours tracking down bugs that pushed UILabels off the edges of UITableViewCells. I had lots of patience for refreshing Chrome over and over again, testing sign-up flows and fake stock trades.
CSS didn’t scare me. Nor did learning Swift or keeping up with Rails or dealing with App Store Submission Hell.
It was new territory. It was fun.
I’ve always loved the self-reliance ethos of the Rails community. The monolith really is majestic. Server-rendered HTML is zen-like. What Basecamp has done with HEY is genuinely inspirational.
But over the past two years, I’ve started to feel stuck.
I must be doing it all wrong because the idea of making even a few images move around a page in Rails stresses me out. I know there’s Stimulus and Turbolinks and remote calls and it’s probably easy to do it with some fancy new CSS animation. But my Rails views always end up as cluttered junk. I’m storing all sorts of crazy variables as attributes in the DOM.
Meanwhile, React and Vue feel like they’re one bridge too far. I’ve got to maintain another whole app? Setup authentication? Separate calls for every snippet of data I want to bring in? And I need to manage state? Like another database?
After nearly a decade of launching products, I could feel my creativity being drained. In an era of Heroku and Repl.it and AWS and Stack Overflow and Rails and React and Vue - the golden days of programming! - why did it feel so hard to launch anything online?
It’s because frontend development was sapping my energy. I was building web apps with Bootstrap. CSS gave me nightmares. The thought of building everything with JSON endpoints felt overwhelmingly heavy.
I cannot stress this enough: Tailwind has single-handedly returned my web creativity back to what it was in 2012.
When I started going through the Tailwind tutorials, I realized the painstakingly slow CSS iteration loop was what had been breaking my back.
Before, I’d create a div, invent a name, move over to a CSS file, paste the name, Google for CSS attributes, trial-and-error getting flex boxes to work in IE, hope the asset pipeline regenerates the CSS files properly each time.
Then, with Tailwind, I stopped inventing class names2 and stopped Googling obscure CSS rules.
Swapping from manually-crafted CSS in separate files to simple class-level styles has felt like being released from prehistoric amber. Building frontends feels fast again. And since it feels fast, it feels fun.
With CSS anxiety quelled, picking up Vue and React has been pleasant.
Thank you, Tailwind.3
Mt. Bierstadt is the closest 14’er to Denver. It’s also one of the easiest to climb.
The parking lot was full at 9am. Cars were spilling out, parked on both sides of the road for a quarter mile in each direction.
The trailhead sits at 11,600 feet. From there, it’s four miles and 2,460 feet of elevation to the top.
We passed college kids, retirees, babies in backpacks, and lots of dogs along the wide and busy trail. There’s only a little bit of rock scrambling at the very end.
As we drank water at the top, I decided to join Elizabeth in her goal to climb all 53 Colorado 14’ers. I’ve got 51 to go.
The best part about the hike was that I didn’t get hungry.
I’ve been intermittent fasting for three weeks. After I eat dinner, I wait until noon the next day to eat again.
When I wake up, I chug water and drink black coffee. Sometimes I start prepping my muesli bowl at 11am in eager anticipation, but usually I don’t notice any hunger.
An empty stomach keeps me focused while writing and programming. It also gives me more energy. Back in high school, during debate tournaments, I’d go full days without eating. I knew if I ate, I’d struggle to focus during the next round’s speeches.
It never occurred to me to make intermittent fasting part of my daily life. I used to roll my eyes when life-hack-salespeople talked about optimizing their eating schedules. But Elizabeth just finished reading The Obesity Code. The science behind insulin and digestion makes sense.1 So I decided to give it a go.
Since I started fasting, I’ve avoided running in the morning. I didn’t think I’d be able to wait until noon to eat. But I also thought hiking up to 14,060 on an empty stomach might cause me to feel faint or dizzy or light-headed or empty.
Elon gets credit for creating huge, new markets. But all of his companies started with existing markets.
Start: Put satellites in orbit
Someday: Colonize Mars
Start: Make an electric McLaren for people with private jets
Someday: Electrify transportation
The Boring Company
Start: Move people across big convention centers1
Someday: End traffic
Start: Make Parkinson’s more manageable
Someday: Blend with AI
After Neuralink’s recent demo, pundits focused on clickbait “Elon wants to put chips in our brains” articles. They ignored the most interesting part: there’s an existing market of people with Parkinson’s and other degenerative disorders who already embed electronics in their skulls.2 Can Neuralink improve those implants first, before they drill holes in all of our skulls?
I can’t think of another entrepreneur who’s been so consistently good at applying new technologies to existing markets. His companies’ massive missions merely linger in the background.
Zuckerberg and Oculus are taking the opposite approach. They’re building a new market for immersive VR. MKBHD pressed him on why he wasn’t addressing existing problems first. “We’re focused on connecting people,” he said.3 He’s not interested in other use cases.
Would it not be smarter to start with existing problems for VR? Perhaps surgeons or medical device reps virtually visiting operating rooms? Why jump straight to a non-existent market?
I often say, “You need $100 in revenue before you get $10,000,000 in revenue.”
This is the same class of problem.
Elon’s visions are in the clouds - literally. But his implementations always start small.
If I do any of these things, I have a bad day:
The easiest way to have a good day is to avoid a bad day.
Today I had a good day.