On November 6th 2013, I got an email from my friend Ryan, asking if I wanted to contribute links to his new email list thingy called Product Hunt:
To be honest, I didn’t think much of it at first. I posted a product and checked out a few things other people posted, but didn’t find any of them particularly life-changing. Still, something definitely compelled me to keep coming back. Even if I wasn’t adopting most of these products, I wanted to know what was out there. I became a fan.
A couple weeks later, Ryan reached out again. This time asking for my advice on turning the email list into something more:
I love to jump in and make things without planning too much in advance. Ever since college I’ve done on average probably 4 side projects a year. It’s how I’ve learned everything I know. So jumping into a new project like this was pretty par-for-the-course in Nathan-land. Plus, Thanksgiving break was coming up, so I knew I’d have a lot of downtime with the family where I could spend a few solid days coding.
Ryan sent me a google doc outlining his thinking on how the product should work, and a few mockups of how it might look:
You can see a lot of the key ideas here that make Product Hunt different. Posts are grouped by day. Titles are product names. The body in most cases was the product tagline, but as you can see in the “Tablo” example at the bottom, it was not strictly enforced, and acted more like an initial comment (similar to how Instagram handles comments / captions).
One of the more unique features of Product Hunt that people notice is the fact that posts are grouped by day. This was actually borrowed from Linkydink, the platform that Ryan used for the initial email list (see the screenshot above). They did it that way because at the end of the day all the posts get emailed to you in a big batch (“Today’s links”). We liked it because it emphasizes the timeliness of the links, and to encourages people to check the site every day, so we kept it.
After reviewing Ryan’s notes and thinking on it for a bit, I took another stab at the design:
I tightened it up a bit to make the list of products more scannable. I also thought it would be interesting to standardize the posts into a formal “Name / tagline” system, so it’s easier to know what you are about to click on. We decided to change the “heart” metaphor into an “upvote” metaphor because we wanted to bring it a little closer to the “crowd-curated homepage” genre of sites like Hacker News and Reddit, and position it further from social networks like Facebook or Instagram.
One idea in this mockup that we abandoned was to display the number of clicks a product received. It felt like a less pure measure of interesting-ness than votes, and might lead people to think twice before clicking, which was the last thing we wanted.
When I showed my mockup to Ryan, he had some awesome feedback:
Of course, he was spot on about all of this. I flew home to Arkansas for Thanksgiving and spent the next couple days hanging out with family and coding the initial version of the rails app that now runs Product Hunt. It was a one-man hackathon ☺.
I tried to keep the structure of the app as simple as possible. Users can login with Twitter — the primary place our target audience hangs out. Users can make Posts. Posts have a name, tagline, and URL. Users can comment on and vote for posts. You needed an invite to sign up. That was about it.
Of course, you can’t keep a product that simple for very long. It needs to grow in order to support it’s users. There were a lot of rough parts and obvious holes (pagination, notifications, search, profiles). You’ve got to fix those things right after you ship. But it’s usually best to just get it out there as soon as you can.
In that sense, it actually helps that I’m not a very good engineer. I don’t fully grasp all the corners I’m cutting. I have no trouble leaving things out like unit tests. I’m fine with writing a N+1 query to get an MVP out of the door. It honestly doesn’t bother me, but good engineers would never do those things.
Instead, what I cared about was the design and user experience. I spent a lot of time thinking about the best way to display comments, especially. There was very little discussion in the original Linkydink group. I figured not many people would want to view a discussion (let alone contribute to it) if you had to totally shift contexts. A full page-load felt like too much, but putting comments inline the way facebook does it felt like too little (and too derivative).
So I came up with the idea to slide the comments in from the side, like this:
The last major thing we added was the main call to action: put in your email address. There are few marketing assets more valuable than an active, growing email list. So we put this little thing at the top of the site for not-logged-in users:
Ryan did an amazing job inviting an awesome group of early users to test out the site. I won’t speak at length on this, because I frankly was mostly focused on the design / product stuff, but I will share a one big thing I noticed Ryan doing that helped make it a success: we started out with a network that was big enough to be interesting, but small enough to be comfortable.
A lot of times you see big products publicly launch from well-known internet people, and everyone uses it and then leaves because there is no authentic community. You need a certain level of intimacy for the social environment to really work. On the flip side, the group of beta users Ryan invited was bigger than any one person’s social network. Once people joined, Ryan asked them if they knew anyone who might be good for the site and manually recruited new users. It helped a lot that we had an invite-only model, because people love hooking their friends up with exclusive access to new things. By creating artificial scarcity, we had something at least semi-valuable to offer: an invite.
Those manual recruiting efforts made it possible for there to be enough new content on the site every day to keep users coming back. Ryan personally emailed and tweeted at hundreds (possibly thousands) of people to make this work, and it would have been a lot harder if he didn’t put in a lot of work over the previous year building his online network through his blog.
After we got a good number of our friends and acquaintances on the site, and they seemed to like it and stick around after a few weeks, it was time to “launch”.
I put this in scare quotes because people generally make way too big a deal about launches. The goal is to generate sustainable, compounding growth by making sure the site is full of interesting new content every day. If people don’t stick around, you’re toast.
So why did we launch at all? Honestly, it was never something we talked about as a big goal. It was completely serendipitous. Ryan has a good relationship with Carmel at Pando Daily, and she agreed to write a post about us, so we called it a “Launch”. Although we did get a nice bump in traffic, “launching” was more about showing our existing users that Product Hunt was a real thing than about acquiring a ton of new users.
What happened next was something very different from most other launches I’ve been a part of: the traffic stuck around! Sure, a lot of people churned, but a lot less than usual. Why did that happen?
Because of Ryan’s early manual recruiting efforts, every time you check Product Hunt you are guaranteed to find an interesting and somewhat random variety of cool new things that might make your life better, and at the very least might teach you something. New product releases are the mile-markers of progress in our industry. It is the type of news that excites us most. Yet there was no place to just see a list of things that launched recently, ordered by interesting-ness. Tech blogs, social media sites, hacker news — they all had a piece of it, but none went all-in like Product Hunt.
Furthermore, we had a nice built-in user acquisition strategy. Almost every time a product got posted, the people who created it would notice. Sometimes they participate in the discussion. Often, they would subscribe to the email list. Many became users, coming back daily, commenting, and posting. A tiny network effect started to kick in.
The last thing that helped a lot with retention was our focus on building a ton of channels that would bring people back to the site. Ryan kept the twitter feed stocked with new product posts. The daily email includes the top products from the day before, with an interesting blurb from Ryan at the top. You get an email notification when someone mentions you in a comment. All these together help keep Product Hunt top of mind.
The early days of this were really exciting. I’ll never forget the night Ryan and I were sitting around after work chatting, and digging through the list of recent signups. As we scanned the usernames, one in particular jumped out at us: aplusk. Holy shit. We both jumped out of our chairs and started swearing and pacing around the room. Clearly something interesting was happening here.
As the community kept growing, it eventually become clear that Product Hunt needed to become a real company, which put me in an awkward situation: I already had a job at General Assembly that I liked a lot, and wasn’t planning on leaving anytime soon. The way I saw it, I had three choices:
- Leave GA and work on Product Hunt full time
- Try to keep working on Product Hunt while still at GA
- Step back from active management of Product Hunt entirely
A younger version of myself would have been very attracted to the first option. Product Hunt is probably going to be huge, and I helped build it. Who wouldn’t want to be a cofounder of a successful startup? It’s not easy to walk away from something like that.
But I’d already tried and failed at starting a company before I joined GA, so my mental checklist for “right time to start a company” is a lot longer now. Plus, I had only worked at GA for about 10 months. My first project, Dash, shipped in October and was a big win, but I know I have a lot more work to do, and I want to stick around and help GA shape the future of education globally.
I also know this weakness about myself: I have a tendency to get distracted and work on a bunch of different things, but to accomplish anything meaningful you have to stick with one thing for a very long time. No matter what you’re doing, there will always be shiny distractions. I wanted to use this as an opportunity to build the habit of persistence that will serve me well over the long run of my career.
So my real choice with Product Hunt was whether to try and stay involved on the side or step back entirely from active management. When we first started working on I thought I could just hack on it on the weekends, while remaining focused on my work at GA. Given our current trajectory it was clear that was no longer a viable option. So I knew what I had to do.
Product Hunt is one of the most successful things I’ve ever helped create. I will always be proud of the small role I played at the beginning, and always be there for Ryan and be a part of the community. I am incredibly excited to watch Ryan grow it and keep telling the Product Hunt story, now that my chapter there has come to a close.
Happy Hunting ☺