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