If you’re new around here DomainPolish is an MVP I built over the course of a few days in August. It’s an MTurk arbitrage that helps companies get on-demand feedback on their websites. Because I think it’s a successful example of the mythical minimum-viable product I’m going to use this post to break down what I did right and what I did horribly wrong during the process of building this product.
We’ll cover everything from pricing to exit negotiations replete with lots of interesting (and sometimes stomach-churning) statistics.
Warning: this post is really long. It’s also really detailed. If you’re not up for it you might want to follow the discussion for this article on Hacker News, check me out on Twitter, or maybe even read some James Altucher.
Still here? Let’s get started.
What I Did Right
The MVP itself
Before I decided to sit down to build DomainPolish a few things happened.
First, I knew the product was valuable because I had used MTurk to get feedback on my own websites. DomainPolish as a product was just a service to automate what I was already doing by hand.
Second I went out and cold emailed a bunch of random people who I thought were potential customers. Based on their feedback I knew I shouldn’t target the site at freelance web developers (who I thought were going to be my target market) and instead at people developing their own websites.
Third I literally built the absolute minimum barebones app I possibly could. All it had was a landing page, a pricing page and a checkout page. That was it. When orders came in I would go to Mechanical Turk, create a survey by hand, publish it and then email the results to each customer individually.
That sucked. But what would have sucked a lot more was building a product that fully automated the process and finding out later that no one wanted to use it.
After about 70 orders I finally automated the whole thing and built an online dashboard to view your survey results. And it was worth it.
Connecting with customers
The two things about DomainPolish that contributed most to my bottom line were Twitter alerts and SnapEngage. They added exactly $4500 to my pocket.
I can tell you this because I met the guy who eventually bought DomainPolish through the SnapEngage widget on my website. He started out as a customer and because we were chatting he got interested in the business. If that widget wasn’t there it’s much less likely he would have ever gotten in touch and it’s much less likely that the sale would have ever taken place.
SnapEngage alone added $3,000 to the business. The other $1,500 came from Twitter alerts. Which brings me to the next thing I did right:
Licensing the codebase
Whenever anyone tweets anything with the word DomainPolish in it I get an email. One day I saw a tweet that said something along the lines of: “Looking for a freelancer to make a site similar to DomainPolish.”
At first I was a little pissed. I thought the guy was trying to rip off the idea. But I got over that pretty quickly and shot him an email. It turned out he wanted to build a site built on MTurk that didn’t get your website reviewed, it got your dating profile reviewed.
Cool! So instead of having a freelancer build it in a few weeks I told him I would license him the codebase. I kept the IP and he got to build his website.
It was a great experience and something that I highly recommend to anyone that has an app built on top of an API. If you’re making money with it, someone else is going to want your code. And you don’t always have to give up your IP to sell it to them.
Doing things that don’t scale
I really wanted the customer experience for DomainPolish to be awesome. In many ways it wasn’t: the app was clearly MVP, it had rough edges and there were a few bugs. But for every customer that bought I plan, I recorded a 30-second custom thank you video and sent it to them. I did about 40 videos before I finally ran out of steam.
But the response was awesome. People really seemed to respond to that level of gratitude and (although I can’t prove it) I suspect it had a lot to do with the amount of sales we got even after ceasing all forms of marketing.
What I Did Wrong
Everything. Let’s dive into a few specifics.
A big problem with software is that it’s so difficult to price. DomainPolish was no exception. I don’t have all of the answers but I can tell you to make sure to make sure your pricing model can’t be arbitraged. About a month after launch I tried a pricing model like this:
Basic: $5 – 5 reviews
Professional: $20 – 15 reviews
Max: $50 – 40 reviews
For some reason I thought that would drive more people to pay for the product because the cheapest plan was the best value. You might even think that people would just sign up for 10 Basic plans instead of the Max plan.
If your pricing doesn’t make sense, even if it means your customers are getting a better deal, no one will sign up. I didn’t make any sales for the month or so that my pricing was like that. And as soon as I pulled myself away from the other stuff I was working on to change it back, the sales started trickling in again.
Metrics and Testing
I gathered no metrics. I can’t tell you what percentage of my customers were on the Basic plan vs the Max plan. I couldn’t tell you what the conversion rate was until about 10 minutes ago when I calculated it for this blog post.
I actually set up A/B testing with A/Bingo. I ran two experiments. One was the headline on the homepage and the other was the Pay Now button on the pricing page. Neither experiment produced statistically significant results.
Looking back on it, this was such a huge mistake because DomainPolish provided me with an opportunity to do learn how to optimize a site. I had a sales funnel ready to be tinkered with. It was such an awesome problem to solve – and a rare opportunity that just sort of dropped into my lap. But I basically ignored the opportunity to learn those lessons in favor of working on other newer projects. I really regret that.
I usually host my projects on Heroku. For DomainPolish I decided I wanted to learn EC2. I set up 3 instances (two production and one staging) and thought I was a boss. Wrong. If I had used Heroku to host DomainPolish my hosting fees would be exactly zero dollars. On EC2 my bill fluctuated between $100-$200 a month. I ended up paying $1078.26 in hosting.
That’s A THOUSAND DOLLARS in hosting fees. For a small project like this that’s absolutely killer.
Lesson learned: don’t use anything but Heroku until you have to.
For 4 of the 6 months that I was running DomainPolish it was a second class citizen to me. It was a nice low-maintenance income stream but that was it. Until I received this:
“Just out of curiosity, you have any interest in selling DomainPolish since you are not actively working on it?”
It’s funny how one sentence can completely change your perspective on a product. Suddenly I really cared what happened to it. I was so nervous. I really really wanted the sale to happen. Even though I really had nothing to lose – somehow it didn’t feel that way.
And so I made a fatal mistake: I played not to lose instead of playing to win. After a brief discussion about profit margin, traffic and customers he made an offer.
I’m going to be honest: I completely froze. Rationally I knew I should have made a counter offer. But I really DID NOT want to fuck the deal up.
So I accepted the first offer he made.
It’s so dumb in retrospect. But I look at it as a learning experience: hopefully I have being such a pansy out of my system now.
Plans Sold: 140
Total Unique Visitors: 9,357
Conversion Rate: 1.49%
Total Expenses: $1,775.26 – this includes hosting and fees paid to MTurk workers
Total Sales: $2,355.90
Fee to License: $1,500
Sale Price: $3,500
Total Take Home Profit: $5080.64
Use metrics. Don’t use EC2 unless you have to. Reach out to your customers on Twitter and with SnapEngage.
Play to win. Don’t play not to lose.
It’s not bad for something that I built in a weekend and basically threw into maintenance mode shortly afterward.
But the biggest lesson: the MVP model works.
DomainPolish will be officially transferred over to its new buyer in the next week or so. He’s a really awesome guy and during the process has become a good friend. I highly recommend checking it out once he has finished transforming it into a new product.