Virality works. It’s a fact. It’s the core business component of many modern startups. It’s their key to retention, growth and, thus, success. 15 years ago, it took Hotmail almost a year to grow to 3 million users. In the past year, startups like Kik and LiveProfile did it in weeks and days. How? The answer is simple – viriality.

For a while, I’ve thought of virality as a mythical term that douchey business guys threw around to get investors empty their pockets for a new cool Web 2.0 startup. However, as I got more interested in entrepreneurship , I started to finally understand what it means for a product to have a viral component. Nevertheless, it was still something I have never experienced myself. Yes, I’ve seen products created by friends spread on Internet faster than high school rumors, yet I have never been the one to spark the fire.

It all changed over the last few weeks. About a month ago, I was in NYC on a work trip and I was hanging out with my good friend Ian who I haven’t seen in a while. In the past, I worked with Ian on TalkMesh, and he is definitely one of my favorite people to pair-program with. Since we haven’t coded together in quite some time, we decided to take advantage of my week in NYC and hack together on a project. Given the time constraints, Ian suggested to write a Facebook app with some sort of a viral component. Ian has previously successfully launched My Friend Map – a popular Facebook app for showing your friends’ location on a map. With my interest in virality and my past experience with Facebook APIs, his idea seemed quite interesting to me and well scoped for a single week of work.

After some brainstorming we decided to create an app that would generate tag clouds based on what has been posted on your Facebook wall. We looked at the competition, and realized that most of the similar existing apps really sucked at generating good-looking compact clouds. This is bad for virality.

A viral product typically has two notable characteristics:

  1. The “cool” factor or the “viral component”
  2. Simple sharing channel

While the competition also leveraged Facebook for an easy sharing model, they simply failed on the “cool” side of things. Let’s face it, people love to share stuf when it looks good. And good often means beautiful. It’s as simple as that. When people look at something that blows them away from esthetic point of view, all they want to do is share it with others to validate their own excitement. That’s why in order to make a viral tag cloud app, the results needs to look stunning.

So, what does a stunning tag cloud look like?

After some more Googling around, we realized that the most beautiful clouds on the web are generated by Wordle. This tool is quite amazing. By taking advantage of a great set of fonts, well thought-through color combinations and a smart generation algorithm, it manages to output some beautiful results. Even when the tags themselves were meaningless to me, the generated clouds looked so good that I wanted to share them. That was exactly what we needed it. Add the elegance of the Wordle-type clouds to the personalized set of tags extractable from your Wall posts, and you got the “cool” factor.

With that in mind, we started hacking away. Luckily, we were able to dig up a paper by the author of Wordle that helped us get started. A week later we had an app at our hands: I’m not gonna lie – I was pretty happy with the outcome. The results were quite stunning. Here is a quick sample:

The app’s functionality was very straight-forward:

  1. Go to  apps.facebook.com/my_word_cloud/
  2. Customize your cloud by selecting a color scheme, a font and entering a caption for the image
  3. Generate the cloud and post it to your wall.

However, these 3 simple steps contained an important viral loop. The app added a caption to the image that included the URL to the app itself. Then, it posted the images to your wall for all your friends to see. Since the images looked really attractive, your friends would follow the link in captions to generate their own clouds. And so on..

We hoped that given the viral loop, the app would “explode” and spread like wild fire. And so it did.

Even though, we only seeded the app by asking a few close friends to try it out, two weeks later the app grew to over 200 hundred thousands users! The real growth happened over just a few days. Have a look at the graph below:

The most interested part of the growth was that the app somehow randomly exploded in Nederlands and Brazil. People there loved it:

What happened next? The app got shut down by Facebook. Apparently, we were violating some terms. They offered us an opportunity to fix things and relaunch the app. However, in my mind the project has accomplished its primary goal: it has proved me that virality is one of the primary drivers of product growth and adoption. If you are designing a product, you need to focus on the user. However, it’s often not enough. In order to succeed and succeed fast,  you need a good distribution channel. Viral growth is often the solution.

7 Comments    

Discovery Logo

Well, I had yet another launch at Google. This one is as geeky as it gets – the Google APIs Discovery Service. It’s essentially an API that lists and describes other Google APIs. You can read the launch announcement on Google’s Code Blog or a few other sites such as PC World and Programmable Web.

As I mentioned in my last post, this was the service that I talked about in my Google I/O talk titled “Building Custom Client Libraries for Google APIs“. Here is the video from the session:

Disclaimer: the opinions expressed in this blog post are not representative of those of my employer

1 Comment    

This is one of those years that you accomplish something that a few years ago you thought was not possible. For me, it’s speaking at Google I/O.

That’s right. I will be speaking at Google I/O 2011 on Wednesday this week. If you are coming to Bay Area for the event, make sure to stop by and check out my session: “Building Custom Client Libraries for Google APIs“. Here is is the snippet:

Although Google offers client libraries to access our APIs for a variety of languages, there are some languages out there that don’t yet have client library. In this session, we will demonstrate how you can easily build a client library for your favorite language using the new API Discovery service. Join us and learn how you can make it even easier to use Google APIs in your preferred programming environment.

The session will be recorded and posted on YouTube within 24 hours. I will make sure to post the video for those of you that are not attending.

2 Comments    

If you are a PHP developer, you often debug things by simply dumbing variable values to the screen using echo or print. A common solution for associative arrays and objects is another function - print_r – that prints human readable information about a variable. However, it’s still not an ideal solution since the output is not properly indented or “pretty-printed“.

Here is a quick function that will pretty-print an associate array or an object very nicely in PHP:

7 Comments    

About a year ago, when I was playing around a lot with Android push notifications, I was a looking for a good hosting solution that would give me lots of flexibility of running random servers at custom ports. I quickly came to a realization that a virtual private server (VPS) is probably the best way go. VPS is a virtual machine that has the features and the privacy of a separate physical computer with its own operating system that can be independently rebooted. VPS hosting has many advantages of a dedicated server, but it’s a much cheaper alternative as in reality a single physical server can host many VPS instances.

I looked around for some companies that offered VPS solutions and came across A2hosting that was suggested to me by a friend. They offer some nice VPS plans starting at 10$/month. I’ve been using A2hosting for over a year now, and it perfectly suits my needs.

The VPSs provided by A2hosting come with HyperVM virtualization manager and Kloxo hosting control panel built by LxCenter. These tools make it very easy to manage your instance, configure servers, set up domains and mail accounts. However, they come with a price – a steep learning curve and the necessity of a proper setup.

A2hosting does a pretty good job of providing a relatively simple set of instructions of how to set up Hyper VM and Kloxo that you can find here and here. However, having gone through the setup process multiple times now, I’ve realized that there are a few things that you absolutely must do in addition to the aforementioned instructions in order to properly set up your VPS instance. Here a quick list for your reference.

Reconfigure Apache and MySQL to use a reasonable amount of resources

Once deployed, your HyperVM will likely be configured to use the lighttpd webserver. You will probably want to switch it to Apache as described here. The problem with Apache and MySQL is that out-of-the-box they use way too much resources, which will cause your VPS to lag and eventually become unresponsive (I learned it the hard way).

The A2hosting’s customer wiki has a quick tutorial how to reconfigure both servers to reduce the memory load. If that’s not enough for you, also have a look at these pages for Apache and MySQL optimizations.

Disable the collection of Processed Stats

There is a common problem with LxServer VPS is that by default it saves all the log files in the __processed_stats folder in the home directory. The amount of hard disk space that the logs can take up is unbounded, and eventually the logs might fill up all the available space of your VPS (multiple gigabytes). Once the available space is gone, the VPS will be disabled by A2hosting due to over-quota errors. Once again, I’ve learned about this problem the hard way :( . Once day, my VPS was simply turned off.

The solution to this problem is actually quite simple (as I realized after lots of Googling):

  • Go to the Kloxo control panel for your VPS
  • Go to the domain management of any domain
  • Navigate to “Stats Configuration
  • Check “Remove Processed Logs
  • Click the “Update All” button to make sure all domains logs are deleted after processing.

That’s it! I’d really wish this feature would be enabled by default, but it isn’t. Remember, if you add new domains, you would need to repeat these steps.

Those are the two things that you should put on your TODO list after signing up for VPS hosting that uses Kloxo. I hope it’s helpful, and it saves you some hours of wondering “what the hell is going on?”. Happy VPSing!

As a side note, I definitely recommend using A2hosting for all of your VPS needs. It’s a great value for a great price. Moreover, they have really amazing 24/7 support.

5 Comments