On MVPs, Gluing Things Together, and $270 Flights to South Africa.
The Untold Story of an MVP.
This is the story and technical details of how I started Amazing Airfare, an email and text message notification service for ridiculous deals on airfare (50% or more off international flights leaving from North America).
“Eva… EVA! Wake up!”
It was 2am, last Christmas morning. My sister was passed out on the floor next to the couch, and I was on my laptop surfing the internet.
“Whaaaat?” She groaned, sleepily.
“Do you want to go to South Africa for spring break?”
“Howw muchhh?” She was barely awake.
“$270. Round trip.”
A moment of silence. Then:
“Uhhmmmm okayyy. Yeah. Leettt me get my laptop.”
This is not the first trip like this I’ve found. In the Fall, some friends and I went from New York City to Milan, had a week to get to Prague, then had a 20 hour layover in Paris on our way to Bangkok… all for $177.
You’re probably thinking “how does he keep finding these!?” That’s what my friends would ask every time I’d post/gloat about one of these trips on Facebook.
I find them by monitoring 6 sites and maybe about 10 twitter accounts. But because these deals come and go so fast, if you’re not checking all these sites a few times a day, you will miss them. Which is exactly what kept happening to my friends.
But after the Johannesburg post, there were so many comments saying “You gotta tell me next time you find one of these!” that the entrepreneur in me recognized an opportunity.
I messaged five people who commented.
“If you paypal me $8 right now, I’ll add you to a list of people I email and text.”
Within a few minutes, I had $40 in my Paypal account. No website, no technology, no marketing, nothing. Just an excel sheet with some names, email addresses, and phone numbers.
That is how you validate an idea, ladies and gentlemen.
It took me about 15–20 minutes of talking to each friend to sell them on my $8 a month service. My next step was to build a simple website, and see if I could get a few more customers by just sending them to the site.
In the spirit of MVPs and moving quickly, I used a site called Landerapp to build a landing page with some basic analytics in about an hour. It wasn’t pretty, but it worked. I didn’t want to be using Paypal anymore, so another hour in and I had a Formcrafts payment form hooked up to my new Stripe account.
MVP: Version 2. Complete. I had a website that could collect email addresses, phone numbers, and accept payments. This got me to about 25 paying subscribers.
Around subscriber 20, I got really tired of texting people by hand whenever I found a deal, so I decided it was time to set up Twilio. I had to dust off my php skills, but their documentation is so awesome it only took me an hour or two to set up. Now, I had a Twilio script that would read phone numbers from a csv. All I had to do was edit the script with the new text message alert and run it.
Up until this point, I was just sending plaintext emails from my personal gmail account and BCC’ing everyone. As I was setting up Twilio, my friend Kyle (one of the most amazing designers (and people) on the planet), sent me an email.
“Your email is ugly. Here, use this instead.”
It was a beautiful Mailchimp template. (This is, coincidentally, how you score free memberships for life).
I also started using Zapier to automatically unsubscribe people from Mailchimp when I cancelled their Stripe accounts. I now use it for three or four miscellaneous automated tasks.
MVP: Version 3. Complete. Mailchimp campaigns and automated texting via Twilio.
Next up, it was time for a new website. Landerapp was great for getting me started, but it was a little janky. I poked around Theme Forest and found an amazing $43 Wordpress template called Floyd. It won’t last forever (a redesign of my site is probably the next big project on my list), but it took me 4 hours to set up, and then about 8 hours of CSS tweaking to make it a bit more responsive, and then I had a fully functional, modern looking website.
MVP: Version 4. Complete. A non-embarrasing website.
I had a mini-relaunch of Amazing Airfare after I finished the site. I was happy and proud of it and wanted to show it off. My friend Andy hit me up.
“Hey, I love Amazing Airfare. Such an awesome idea. I posted it to ProductHunt for you!”
Shit. Shitshitshitshitshit. I was definitely not ready for that. Despite all my MVPing and moving fast, I didn’t feel like I was ready for an actual public launch.
But the gods had spoken, and it turns out they spoke pretty highly of me that day. Amazing Airfare fought and scratched and climbed up to #5 for the day, which drove about 3500 visitors in 3 days. ProductHunt also got me a few other pieces of press, like this awesome Geekwire post. These two sources got several hundred new subscribers over the course of three days.
Up to this point, it was a bit of a process to send out an alert. When I found a deal, I’d first confirm I could replicate it myself. Then I’d make a custom banner in Photoshop, then go into Mailchimp and create a new campaign from the template Kyle sent me. I’d fill out all the details, link to the site I found the deal on for more details, usually have several minor panic attacks and be convinced I screwed something up or forgot to update a field, and then I’d hit “Send!”
The little “do you want to send?” animation Mailchimp uses described my stress levels perfectly.
Then I’d export my Mailchimp list to a csv, save it to a specific directory on my laptop, edit the PHP Twilio script with the updated message and execute it.
The whole process took about 12 minutes, and could only done from my laptop. But now, with hundreds of paying subscribers… it was time to invest some serious time in improving the backend.
The first thing I wanted to do was create and send the Mailchimp campaign from my php script. If I didn’t have to use the web interface, it would cut a ton of time off. I read up on the Mailchimp API and started coding. It took a few days (I am a self-professed “shitty developer.” I love to code, I’m just not particularly great at it), but after figuring out how their templating system worked, I finally got it working.
I’d run send_Campaign.php from the terminal, and it would prompt me with a bunch of questions like:
> What is the subject line for this campaign?
> What percent off is this deal?
> What is the URL where people can learn more?
When I answer the last question, it programmatically populates the template with my answers and sends the campaign out.
How. Cool. Is. That.
MVP: Version 5. Complete. I can send an entire campaign just by answering a few questions from the terminal.
It only took an hour or two to merge this with my Twilio scripts. Then it would send the Mailchimp campaign and text everybody the alert.
MVP: Version 6. Complete. I can run the entire process from one script on the terminal. Honestly, this kind of felt like cheating. It was so anticlimactic. I answer some questions, it prints out some status messages, then it echos “Mission Complete. Shutting down now.”
There was ONE last feature I needed to add before I was completely done with Mailchimp’s web interface. My masterscript.php still read from a Mailchimp list export called memberlist.csv. Which meant every time I wanted to send an alert out, I needed to export the latest version of the Mailchimp subscriber list.
Not for long! Mailchimp has an Export API. So now, masterscript.php starts by pinging the Mailchimp List Export API, getting all current subscribers and their phone numbers, and then goes through the rest of the process. NOW I was completely, 100% terminal driven.
Fantastic! Except… I was still dependent on my laptop. Just last week I was on a trip to Chile. We landed, and as we were taxing into the terminal I saw an amazing deal (Philly to Frankfurt, Germany for $398 roundtrip).
I HAD to send this one out! But… there was no wifi in the airport. And my cell connection wasn’t strong enough to tether my laptop. And it ended up taking me 3 hours to get to the hotel with working wifi. I was stressing out the entire time.
This would never do.
One night of furious coding in Santiago, and I converted my application from one that requires input from the command line to one that lives on a web server and accepts input from textfields.
I pushed it. I tested it. It worked.
Product: Version 1. A comprehensive system that automatically pulls the latest list of subscribers, creates and sends an email campaign, and sends text message alerts. Accessible (behind a login) from any computer or phone in the world.
What used to take 12 minutes now takes, on average, 28 seconds.
I want this story to be an inspiration. An inspiration that you can move fast.
You can recognize an opportunity and validate it by seeing if people will pay for it THAT DAY. You don’t need a fancy site. You don’t need a complete backend (I still have to unsubscribe people manually!). You don’t even need to build it all yourself — there are services for pretty much everything. Just glue stuff together.
At this stage, there is absolutely no reason to roll your own anything except glue. I think the hip term for this these days is the “no stack startup.” That term sounds silly, because I have a stack (and I LOVE it). My stack is: Wordpress template, Formcrafts, Stripe, Mailchimp, Twilio, Zapier, and my php script.
That’s a whole lot of functionality I didn’t have to build. Some of it costs money, but it’s worth throwing $30 a month at Formcrafts so I can get payments up and running in an hour AND never have to touch someone’s credit card information.
Assemble your side project step by step, and each step should only take a few hours, or a few days at most.
Because I went step by step, I kept validating this was worth working on. At some point, I might have discovered I couldn’t get strangers to sign up. Or that there’s 100% churn after one month. But people kept signing up. And as months went by, people stayed subscribed.
You CAN do something like this. And you SHOULD do something like this. Take it from me, a shitty developer. You do NOT need a lot of technical skill to do what I did. Just a whole lot of Googling, some tutorials, and occasionally modifying an example from some documentation.
Working on Amazing Airfare is so much fun. The extra money is nice of course, but having a side project to go home to and hack away at, especially one that people enables people to go on crazy trips to Kenya, Brazil, or Indonesia that they’ll never forget, has brought me so much joy.
It will bring you joy too.