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.
Munger often says that, for a white guy with a math brain, there wasn’t a better time or place to be born than in 1920’s Nebraska.
I strongly disagree.
No doubt, Munger had impeccable timing. The concept of putting money into a 401k and expecting to buy a beachfront mansion in Florida at the age of 63 is long gone. The rate of return over the next 80 years isn’t going to match America’s post-war industrial boom. See’s Candy can’t be bought for $20 million anymore.
But Munger isn’t giving himself enough credit. He wouldn’t be buying companies if he were starting over today. The number of ways to make money has increased exponentially.
The mom-and-pop-hardware-store world of yesteryear is vastly overrated.
The reality of the 20th Century is that if you didn’t have a cushy corporate executive job, you didn’t have it that good. Ho-hum, 9-to-5, go to work, sock a little away, hope you’re able to enjoy retirement “some day.”
Engineers had to wear white button-downs and spend their entire careers with IBM, musicians had to convince labels to distribute their music, authors had to find publishers, marketers were men who lived near 5th Avenue, Wall Street was the only place an Ivy League grad could make a fortune.
Now, anybody can publish software and charge for it. Anybody can record their own talk show. YouTube stars have bigger audiences than A-list actors on TV. Engineers at Facebook make more than analysts at Goldman Sachs.
Opportunity has always been distributed, it just didn’t used to be discoverable.
The challenge in 1920’s America was being matched with the opportunities that did exist. Munger was lucky to have worked for Warren Buffett’s grandfather at the Buffett & Son grocery store. Without that stroke of geographical luck at birth, he may have never partnered with Warren.
Nowadays, opportunities are both distributed and discoverable.
You can talk to Richard Dawkins on Twitter. You can find partners and customers and coworkers and jobs by publishing articles. You can distribute software and books and music without a suit’s blessing.
As the odds of discovering opportunities increase, skills become more important than time or geography in determining success.
I’d choose being born today over 1924 every single time.