It’s July 4th and I just bought a 24 pack of Coronas with my roommates, and the three of us are hanging out in the living room. Two beers in, Rahul says, “let’s have a hackathon.” The thought of competition spikes my adrenaline. Let’s do it.
But what to build?
I opened up my ideas notepad. The last entry I wrote:
- rate peoples twitters by grade level. justin bieber
Sounds good to me. The motivation for this was a vague passing thought one day about the effect of Twitter on communication. Twitter was never useful for me because there was so much noise. Maybe a simple tool could get people to think twice before tweeting.
But I needed a name.
“Hey Mason, give me a name. Something cool.”
“Uh, I’m gonna need something more specific than that.”
“Something bird related.” — I didn’t want to reveal my idea yet. Surprises are awesome.
“Hmm…” he clicked around on his Macbook, “How about Beak?”
Opened up a text document, quickly jotted down the specs:
COMPONENTS are technicals unique to this project.
FEATURES are the bare minimum for launch. Focus like a laser on these. With limited time, this list had to be specific and short.
LATER is all the features you think of that are not the bare minimum. This also includes crazy moonshot visions in case of ridiculous success (“A smarter internet”).
Beak, as I visualized it, would be simple:
- Click “Log In with Twitter”
- Enter a Twitter ID
- [Magical Grade Level Formula on the Tweets]
- “You’re a 3rd Grade Tweeter! Your smartest tweet: woof. Your dumbest tweet: meow. Your followed accounts’ average grade level: 5th grade.”
Seemed very doable. I fired up a local development server. Ready to tackle the meat of the product.
Time Elapsed: 30 minutes
“Hey Johnny, whatcha working on?” Rahul asks, sipping from a Corona.
“I’ll tell you after you’ve finished five beers.”
“Okay, well I’m already at four, so… you better hurry up.”— another sip.
Crap, already behind schedule. It was time to pull out the big guns.
It was then that I applied the most valuable skill I learned from my 4 year degree in Computer Science and 2 years working at a big tech company: looking things up on Google.
Google: “wiki grade level algorithm”
First result was a jargon-laden Wiki entry called “Flesch-Kincaid readability tests”. I skipped the jargon to get to the only sentence that mattered right now:
These readability tests are used extensively in the field of education. The “Flesch–Kincaid Grade Level Formula” translates […] to a U.S. grade level […]
If it’s good enough for most educators, then it’s good enough for me. There was no way I was going to code this formula on my own in such limited time, so I looked for a plugin (“gem”) that would do the calculation:
Google: “rails flesch-kincaid gem”
The second result was a gem called Odyssey:
Perfect. Let’s make sure it works as advertised. Plugged it in, put in some random dumb sentence.
“Blah blah yay meow” returned a grade level of -2.2. What the bagel?
I’m sure there’s some technobabble reason why Flesch-Kincaid can have a negative result, but I needed a number from 1 to 12+. Luckily there were other options in the same plugin, and after some trial and error, I settled on using the SMOG index.
“Blah blah yay meow” was now a 1.8, while “Cosmic ray spallation is a form of naturally occurring nuclear fission and nucleosynthesis” was an 11.8. Good enough.
I added Twitter login to grab all of a user’s tweets, and ran each tweet through SMOG and averaged the results to get their average grade level. @justinbieber had an average grade level of 3.9. @elonmusk had an average grade level of 8.4. Hmm. I might actually be onto something here.
Time Elapsed: 1 hour
“That’s five beers. Whacha workin’ on?” Rahul set down an empty bottle, next to four others.
“I said five MORE beers. You must have heard me wrong.”
“No you didn’t! Mason, what’d he say?” The obvious protest.
“I’m pretty sure he said five more beers,” Mason said with a grin. Thanks, Mason.
I had some functionality now, but it was plain and ugly. Having no design training, I began crafting buttons and text using a patented technique called Design Whack-A-Mole (DWAM™):
- “this text should be bigger” → increase font size
- “now it’s too low” → move up 20 pixels
- “too high, and the font sucks” → move down 10 pixels, change font
- “crap, this font is shorter than the old one” → increase font size
- “too low…”
An hour later, it was still ugly…
…but it was good enough. Next task.
Time Elapsed: 2 hours
“Hey, we’re gonna go see the fireworks at the pier, so finish it up later,” Mason nudged.
“Okay, give me 30 minutes.” I’m so close. I can’t leave this unfinished now.
There were two FEATURES remaining and only enough time for one: 1) the grade level of your newsfeed, and 2) your smartest/dumbest tweet. I chose the second, because it was more user-relevant. I also decided to go with “un-smartest” instead of “dumbest” — less offensive.
“Our Uber is here, let’s go!” Mason announced, literally as I typed in my own Twitter handle to test— IT WORKED! I threw my arms up in victory—
“DONE!” I exclaimed. I texted the link to their phones. And waited eagerly.
I love going from a sloppily jotted thought, being scrappy as hell and piecing together the bare minimums for a functioning product. For a geek like me, this was just as exciting as the NBA finals, and finishing right as the Uber arrived felt like shooting a 3-pointer with .6 seconds left.
Mason commented first: “Log in with Twitter? I don’t remember my Twitter password.” WHAT?! WHO DOESN’T REMEMBER THEIR F***ING PASSWORD??!? IUSHDFIUHSDUOFH.
I turned to Rahul’s phone as he clicked on “Log In with Twitter”:
DAMN IT. Frustration set in. What went wrong?? My mind raced through a dozen possibilities, but it was too late to check what went wrong. We were already in the cab, five blocks away from home.
“What’s it supposed to do?” Rahul asked, “Is this a joke? Did you just steal all my Twitter information?”
“No, Rahul,” I was annoyed. “Why would I do that? I— just… ugh… I’ll fix it. I’ll fix it.”
The buzzer-beater bounced off the rim.
Time Elapsed: 2.5 hours
The next morning, armed with a fresh mind, I easily spotted the bug: a mistake in my code for Twitter login. But instead of fixing it, I removed it entirely, realizing most tweets are public and don’t require login anyway. This also meant one less step for the user. I killed two birds (pun!) with one stone!
My roommates gave it another shot. This time, it worked.
“I’m a fifth grade tweeter— HA!” Mason said, “This is pretty cool. Rahul, what’s your score?”
“Fourth grade? Aw man, I’m a stupid tweeter!” Rahul complained, tongue-in-cheek.
“Not stupid,” I corrected him, “un-smart.”
Seeing our own scores generated curiosity about friends and celebrities. Their results ranged from amusing (@BoredElonMusk was a “smarter” tweeter than the actual @ElonMusk) to eerily accurate (@BarackObama beat out @SenJohnMcCain, @HillaryClinton, and @SarahPalinUSA).
I was satisfied with it, so I shot Product Hunt a quick email, but there was something missing…
Time Elapsed: 3.5 hours
I had to create a high scores list. Who were the smartest Tweeters in the world? Who were the un-smartest? I already saved grade levels for users that have been scored, so it was easy to list those. I also added a list for “Latest Scored”.
I pushed the feature into production. It worked well but looked boring, so it was back to playing Design Whack-a-Mole.
This time around, though, I began seeing random accounts show up on the “Latest Scored” list. Weird — my roommates weren’t on the site anymore.
“Is @natalie81 anyone’s friend?”
I refreshed the page again. Six more accounts that nobody recognized. Refresh. Twenty more. What was going on? Who were these people?
“C’mon, you guys, who’s doing this?”
Right then I got an email:
Beak was at the top of Product Hunt. Sweet.
Time Elapsed: 4 hours
Next: Product Hunt’s incredible impact and how it led to being copied by TIME Magazine. To keep up with the Beak saga, click “Follow”.
In the meantime, your smartest tweet is waiting for you at beakscore.com. (Update June 13th, 2017: Beak has been retired — thank you all for your interest. I hope you enjoyed the story and the stories to come!)
P.S. If you enjoyed this read, please click “Recommend” below— it’ll help spread the story to more people.