The right algorithm might make your application work smoothly and the wrong algorithm might make your users have a poor experience. Performance is achieved by design-first of all, choose the right set of collections and the right set of algorithms and frameworks. However, performance needs to be measured and tuned eventually. The practice you should do in your application with regard of performance is stress testing. The best stress testing tools in the Scala ecosystem is Gatling. Gatling (http://gatling.io/#/) allows you to code in Scala using a very simple yet powerful DSL. Gatling focuses on HTTP and latency percentiles and distributions, which is the right thing to do nowadays. Latency is not only used for the sake of performance and scalability, but it is also heavily related to user experience as everything is online.
Scalability is one of the main reasons why we do software architecture, because an architecture that does not scale does not have business value. We will continue talking about Scalability principles during this chapter. Resiliency is about how much the system can resist and keep operating under the most adverse situations, such as hardware failure or infrastructure failure. Resiliency is an old term. Currently, there is a new and more modern and accurate principle called antifragility. This principle was well developed and used in practice by Netflix. Antifragility is about systems and architecture that can adapt and fail over to other systems and other operational modes to keep working no matter what. If you want to know more about antifragility, you can visit
http://diego-pacheco.blogspot.com.br/2015/09/devops-is-about-anti-fragility-not -only.html and