Adoption of the cloud is growing dramatically for hosting and deploying products. Building and hosting your product in the cloud has lots of well documented advantages, but there is another area where being on the cloud can be beneficial to your product. If you know upfront that you are going to host your product on the cloud and deliver it over the web to your users, you can design your product to take advantage of this fact, instead of just using the cloud as a hosting mechanism.
Here are 5 ways that you can use the cloud to better design your product.
1) Built-in metrics
It used to be the case that users would install your software on their desktops and you would then have no visibility into how they are actually using the product. But when your product is on the cloud, you can easily track how your users are interacting with your product. Using analytics tracking (like Google Analytics) is only the first step, but what you really want to track is what actions your users are performing, what events they are triggering, and how they are proceeding to a goal. A “goal” can be any action that you want your users to accomplish – Like buying something on your site, or leaving a comment, or uploading their profile etc…. Google Analytics itself has events tracking, or you can use a specialized product like MixPanel to track actions that your users perform and measure how they are proceeding to your “goals”.
This kind of detailed user actions tracking will generate a useful info – Like if you have an unnecessary step in a process or if users never want to use a particular feature. Using this data, you can quickly optimize your product.
2) Reverse Proxying
A reverse proxy is a piece of software that sits in your cloud (in your datacenter) that handles all incoming requests from end users, and decides which of your servers to send that request to. By having this additional layer between the user and your servers, you gain significant control over your deployment and over what your users see. One of the many advantages of having reverse proxying is that your webapp never needs to have downtime – If your app crashes, the reverse proxy can automatically re-direct traffic to a backup server. Or you can instruct your reverse proxy to stop sending traffic to a particular server, so you can gracefully shut it down and perform maintainance. Having zero downtime vastly improves percieved quality of your app. HAProxy is a simple and lightweight reverse proxy (among many many others) that you can use. These proxies can be used for far more than just load balancing and failover…
3) Percentage rollouts
One of the great advantages of using a reverse proxy is you can do what are called “Percentage Rollouts” of new versions of your software. Upgrading your product to the next version can expose bugs that may crash your whole app, so upgrading all servers at one go is a bad idea. What you can do is to install the next version of your software on one server, and ask the reverse proxy to send it only 1% of traffic. Once you are convinced that the new version is stable and working as expected, you can increase the percentage of traffic it receives gradually to 100%.
Doing this vastly reduces the risk of unexpected bugs and crashes on your app. And even if something does go wrong, you can immediately turn off the new version without affecting a vast majority of your users.
4) Experiment Quickly
The other fantastic thing you can do with cloud infrastructure is manage what your users see at a very fine level, which allows for great experimentation capabilities. For example, you can randomly select 1% of your users, and have them go to a different version of your software (most reverse proxies can do this easily), where you can test out new/experimental features that you are not sure of. So, you can figure out, for example, if removing the “Address” field during registration results in more signups? How much more signups? Is the trade-off (of losing the address but getting more people to sign up) worth it? Or maybe you want to experiment with a feature that may reduce the number of users coming to your site, but greatly improve the size of each sale.
You can measure these kinds of things by experimenting with a small set of users rather than put your whole product at risk. And the best part is that you can manage multiple experiments simultaneously, to try out lots of different things, measure how users react to these features, and keep only what works.
Google has perfected this way of working. Every day on the main search page, Google runs hundreds of experiments on its ranking algorithms to see what works. Experiments that work are turned on for all users, and experiments that don’t work are thrown out. This is the main reason Google Search has gotten so good over the years – with constant experimentation.
5) Be Reckless!
This is a philosophical point, but I think the way your software is tested and QA certified can also be tweaked to the cloud. No software is ever free of bugs, so instead of focusing on how to remove all bugs before releasing software, we should focus on what to do when bugs are discovered in production. And if you are on the cloud, you can quickly roll back to a previous, known version of the software. Deploying on the cloud means you can quickly spin up several servers with a previous version of the software in no time, if you discover the new version has problems.
Being ready for bugs in production and having a solid process for dealing with them will allow you to get your software out for more quickly and iterate and fix issues faster. A product never gets better if it is just sitting in a QA lab.Getting your software in front of users and customers should be the highest priority for a startup, so you can see how they are using it, whether they like it, and how you can fix it and make the product better.