Create Products for Users But Scale it for the Corporations
Now more than ever, consumers expect a first-rate experience for each and every purchase decision. From buying a concert ticket online to using mobile to pay for coffee in the morning, consumers interact with complex technology on a day-to-day basis, but slow or unresponsive systems can immediately damage the relationship and potential for future business.
Platform performance is a business imperative — as is the need to deliver an impeccable customer experience — yet many businesses struggle with combining the two.
So what’s the secret? There is no silver bullet when it comes to scalability, but there is a set of best practices that smart technology companies use to build scalable products with consumer value. Here are five of the most important factors:
Shorten your cycles so you can quickly respond to scaling challenges.
In our business, we don’t have time to wait two weeks between releases to address new scalability challenges. Continuous Deployment (CD) is the ability to release software in a steady stream rather than in big batches (as was traditional).
Since we’ve invested in automating our release process using technologies such as Capistrano, we’re able to spend our time writing great software and not use valuable resources pushing bits into production. IMVU, the online social entertainment community, is known for pioneering CD and using it strategically.
Everything breaks at scale, so make sure you know what’s breaking as soon as possible, and are equipped to fix it quickly.
It turns out that speed of development is one the most important variables a startup can affect when finding product market fit. Automated testing helps make sure everything we push is high-quality, but avoiding bugs altogether is almost impossible for any useful software.
Even if you aren’t changing your software, if you’re growing fast, the ground is shifting beneath you. Things that used to work often fail after a 10x increase in traffic.
Monitoring key customer metrics using tools like New Relic gives you insight into what parts of your system aren’t functioning properly and allows a refined focus on development efforts. Companies like Netflix and Etsy are clearly leading in this category by aggressively monitoring user behavior and updating quickly.
Using cores and memory well is key. Another way to talk about this is “concurrency.”
Even if you are hosting in the cloud, chances are that your underlying hardware has multiple CPUs, which each have multiple cores. Memory prices have dropped precipitously over the last 10 years and it’s not unusual for servers to have more than 20 gigabytes of RAM.
Not using those resources is a waste, but using them efficiently isn’t easy. The good news is that the industry is focused on solving concurrent programming problems through enhancements to languages like the ForkJoinPool in Java 7, the creation of entirely new languages with first-class concurrency support like Go, and frameworks on top of established languages like the Akka framework for Scala.
Design to scale by adding more boxes of the same role.
Boxes only get so big. Once you’ve figured out how to use all the cores and memory you have available on a single box, your next challenge is replicating that box, ideally using tools like Chef, Puppet, or Salt to procure.
This is called horizontal scaling, and has been key in growing some of the internet’s biggest companies. Horizontal scaling gives you the ability to add machines as your business grows.
Make things simple, and pick supporting software that is mature, straightforward, and popular.
Simplicity is underrated. Some code needs to be complex because the problem you’re solving is complex.
The other 80 percent of your code should be as straightforward and understandable as possible so that you can find and resolve problems faster.
Simple tools such as Redis and Memcached can be used to solve many problems. Simple is scalable on the people front, as well. Instagram and Pinterest have architectures serving huge audiences that can be maintained by small teams.