Tuesday, October 23, 2012

Plenty of Fish - Lessons Learned Meetup

Today, I had the fantastic opportunity of going to a retrospective by Plenty of Fish. As you may know, Plenty of Fish is the largest online dating site and it was all started by a local BCIT graduate named Markus Frind.

Below are notes that were taken on my iPhone. I do apologize as I am continually editing this blogpost.

What is Plenty of Fish?

An online dating site.

Why enter the dating market?

Back in 2003, it was the only thing that was interesting to build. Markus already knew ASP but wanted to learn more about building web applications with ASP.NET and improve his skills on his resume. 

How do you deal with the network effects problem?

In the early days, Plenty of Fish gained traction through Vancouver and Toronto.  There wasn't any silver bullet or magic around it -- Plenty of Fish heavily relied on organic user growth and SEO. The focus was to retain users more than go out and acquire new ones.

What are some early challenges you faced?

Markus actually ended up doing everything for the first 5 years. Some problems in growth involve asking "how do I get bigger in UK? or the US?". Additionally, the site grew so fast that they hit scaling issues.

What is your revenue model?

Plenty of Fish had lots of visitors. Google AdSense helped with bringing in revenue. If you have tons of users on the site, making money off users is the creative part.

Your startup began in the basement -- what made you move into your new office at (25th floor) Harbour Centre with a beautiful view?

Customer service.  Had 15 million users and peaking at 2 billion page views.  Markus needed help with supporting a growing user base.

Has Plenty of Fish changed much?

A year ago, it was 5% mobile traffic.  Now, Plenty of Fish has significant mobile traffic (I heard 70% but this is unconfirmed as I was taking notes pretty fast). 

What are the biggest challenges you face today?

Predict how users will interact with the site. Growth hacking is the process of finding out what will be important in a month from now.  Additionally, scaling has been a huge problem because of the fast user growth. 

Did you ever want to move from Vancouver?

No. Vancouver is home.  

5 years from now.  What will online dating look like?

No idea. Mobile is where everything is going now.

Advice to startups?

Release all the time.  Fix things.  Just get it out the door. It's okay if you break things, just fix them and move on. Additionally, always have growth hacking in mind (what can you do now to increase growth?).

Don't care about the competition -- they have their own fish to fry -- focus on the problems you're trying to solve and do it well.

Do lots of predictability modelling to improve how users will interact with each other. The endgame is to try to make the platform more valuable to the users. 

Mobile is a massive land grab right now. There's no mobile revenue just yet but there will be.

SEO and word-of-mouth is a great way for user acquisition. Try to figure out your retention rate for your users.

Did you ever have funding problems?


Site is simple.  What stopped you from adding new features? 

The prettier we make the site the more men sign up.  POF tries to be very simple and neutral so that users from different countries won't react too differently. For example, one of the top dating sites in the United Kingdom has a guy wearing a turtleneck -- that won't fly too well with users in the United States.

What's the company culture like?

Culture is like Facebook. Get shit done.  Within a week, you can affect millions of people in a day. If you're an engineer, there are tons of scaling problems to look into.  In regards to the original technology stack, there is still a lot of it around. POF isn't a place where a person can sit in the back of the room and hope that nobody notices -- everyone hustles because it affects everyone's productivity and work ethic.

How do you fix male female ratio? 

If there is too many men on the platform, they just drop off. Whatever you do you won't lose too many people.  Know what will drive growth.  

How do you get people to come back to Plenty of Fish?

Email has become a place for spam, instead, send push notifications to really get the user back.

What information do you find interesting about your user base?

Money is made from the 40 plus year olds. There is significant growth (blowing up) in the younger segments (18-25) using mobile.  At the end of the day, Plenty of Fish is making online dating culturally accepted.


It was a great experience hearing lessons learned from Markus Frind -- it has been an amazing journey for him to grow a business from 0 to 50+ million users with a revenue of 10+ million a year.


Monday, October 22, 2012

Running MongoDB on Windows Azure

It has been an exciting journey so far in trying to grow the Vancouver Windows Azure meetup with my business partner Jef King. Our mission has always been to inspire the community to build solutions on top of Windows Azure -- Since the release of many different SDKs, developers are now able to bring value to their users easily with common technologies. These technologies include Python, NodeJS, PHP, and Java. We are now at over 130 members with 10+ meetups that average 30 people coming out.

Check out the video! John Woakes, lead software developer from iQmetrix done a brilliant retrospective on running MongoDB on Windows Azure for the past few years. It's been an exciting ride for him and his team!


Saturday, October 13, 2012

Inspiring talk by Kyle Vogt, co-founder of Justin.TV/Twitch.TV

Truly inspiring talk -- especially where he dives into the trough of sorrow. Here are the notes I took in regards to the 16 lessons learned:

  1. Buy catered lunch -- employees would be waiting at long lineups or walking far just to get lunch -- Keep them at the office so they can socialize.
  2. Use Google Apps -- Simplifies email, calendars, and document sharing.
  3. Use data-driven development -- metrics on new features / AB Test
  4. Use hiring screeners
  5. Keep your job interviews short
  6. Don't hire a PR firm -- Marketing associate instead, leveraged his own connections..full time thinking about the product
  7. Put one guy on fund-raising -- This should be a focused initiative
  8. Work from home -- You don't need an office nowadays, keep costs down... need one room for a separate phonecall
  9. Use the cloud while you're small -- don't buy actual hardware unless you're a hardware company.
  10. Listen to your users the right way -- Users can tell you what's wrong..not what they want, observe the pain points
  11. Use a .com -- .tv was a marketing failure because people would go to justintv.com.
  12. Be transparent with employees: how much longer can the company survive with current funding?
  13. Don't outsource your core components
  14. Hire specialists when needed (if no one has domain knowledge, build or buy decision)
  15. Hire people smarter than yourself
  16. Have a plan for actually making money

Why I wrote node-twitchtv, a NodeJS client for TwitchTV API

I use twitch.tv daily -- some of the main gamers I follow are nl_kripp, kungentv, kingkongor, and reckful. They're really . The mission is simple for Twitch: connect gamers with their audiences, anywhere and anytime. It is open sourced on Github and can easily be integrated into your existing NodeJS solutions by using "npm install node-twitchtv".

After searching on npm for a TwitchTV / NodeJS client, it seemed like no one has attempted this. I decided to take the deep dive and give it a shot. In part of the design for this module,

Round 1: Retrieving basic data like games, channel streams, users

Round 2: Authentication with OAuth2 (server-side workflow)

Round 3: Video streaming as easy as "npm install node-twitchtv" (once the APIs are open)

Where I was going with this: NodeJS runs on all platforms now, it even runs flawlessly on Microsoft's new Windows 8 operating system (which uses the same tools for Tablets and PCs). My heroic vision was, If you wanted to build a streaming client, it would be as simple as, "npm install node-twitchtv", write a UI over top of it, plugin your Oauth2 credentials and off you go (use the Windows 8 APIs like screen recording and pipe it into the client's listener).

As an example, it would be amazing to be able to easily stream your "Pirates and Daisies" (a very popular tablet/pc Windows 8 game) gameplay by simply enabling the permission for the node-twitchtv client emitter. The idea behind this is to empower the Gamer -- Gamers will change games over time and it's important to keep their loyal followers connected to them because it isn't so much the game that is bringing the value, it's the persona and level of expertise they bring to the game.

As part of moving this forward, I wanted to ensure that there was 100% engineering transparency. That means, taking in feedback from the community who were passionate about Twitch's mission and willing to move forward with its streaming APIs.

Monday, October 8, 2012

Lessons Learned from Titanium SDK

It's been fun hacking together projects that integrate with Facebook's Graph API. In a matter of a few minutes, I was able to get login working, fetching friends, relationships, and profile information. Titanium team has been doing an amazing job at providing examples and documentation.

Don't trust the comments in Q&A section

Sifting through pages and pages of questions and answers that seem somewhat relevant to your issue will take an exhausting amount of time. Adding to that, some answers are 3 years old! I don't even know why they keep that sort of information around -- it is incredibly misleading. I really wish they would move to StackExchange.

Dig into the Objective C libraries

When I couldn't understand why I wasn't able to set http headers using the out-of-the-box HTTP Client in JavaScript, I figured out that there are only specific times you can set HTTP headers. Thankfully, I built a Service Locator and Service class that poly-filled everything for me. It is used internally within the HTTP Client 

Use the right source of documentation

When you google, "Titanium ui view", you'll most likely land here: http://developer.appcelerator.com/apidoc/mobile/1.7.2/Titanium.UI.View-object. This page is actually part of version 1.7.2 -- Some of the methods may still exist in 2.1.3 (latest), but you're sure going to hit a wall soon if you're working with "soon to be" deprecated methods. The right source is here: http://docs.appcelerator.com/titanium/2.1/index.html.

Use an MVC framework 

The examples in the Titanium documentation write UI components in a way that is reminscent of Java Swing. This is fine but really, developers should be encouraged to use the right pattern for UI development. This would be Model View Controller. Here is the frmaework that is suggested: https://github.com/appcelerator/alloy.

Use keybinds to increase productivity

I'm a gamer -- I used to play World of Warcraft where I had every single ability bound to a key even if it was something as useless as targeting a specific mob. Anything you can do to shave off seconds will help you enjoy development more. Below are screenshots of my Eclipse keybinds.

Capture metrics and behaviours

Titanium has an API for tracking navigation events and feature events. If you come from Google Analytics or Omniture, we can easily describe these events as page views and custom events. Adding analytics will give you the insights you need to optimize certain views to increase XYZ action. For example, if you're creating an application with shareable data, you basically want to increase sharing throughout the network. Adding metrics around determining if users are seeing the Share button can be done to optimize this feature's value.

Loving it

I've really enjoyed working with Titanium. I definitely will be using it other hacks. At first, it seems daunting but that's only because the documentation and SEO can lead you down a dark path. Look for the real sources and you'll find yourself being productive! 


Sunday, October 7, 2012

Using PHP and Git-based Deployment on Heroku without Facebook Apps

Getting PHP up and running on Heroku is easy. Although you can easily deploy PHP applications on your own traditional web hosting provider (Monster Hosting, 1&1 Hosting), PHPFog, or Windows Azure, in this blogpost, we quickly go through how to get up and running on Heroku.

Just before going into it, a while ago, there was a partnership announced between Facebook and Heroku. As an application developer, if you wanted a place (for free) to deploy your social application, you could use Heroku -- and you would have a lot of automation behind setting up your canvas/tab configuration. This was back in the day when they had Page Tabs!

Traditionally, developers would use web hosting companies like 1and1 where you needed to pay a small amount per month and you would have a web site; however, the question was, "will it scale?". Being on a platform like Heroku, Windows Azure, PHPFog gives you the options you need to scale accordingly based on your social application's virality. We all know how it feels when you launch and your site goes down with the increase traffic. 

Below is a snippet of my shell that I used to get up and running within a matter of seconds. This workflow assumes you already have the Heroku Toolbelt or Gem installed (gem install heroku).

Let's walk through what I did!

  1. Created a heroku application and named it "hello-php-jbueza"
  2. Initialized the current folder as a git repository (git init)
  3. Create a file "index.php" with phpinfo(); 
  4. Added the file and committed changes to my local repository
  5. Pushed to heroku remote (master)
Hope that helps! I understand there are other great platforms to deploy to like PHPFog and Windows Azure, but if you're using Heroku at your next hackathon (and you want to use PHP), this should get you up and running quickly.