This is it – this is the big day you've been waiting for. You've received that big celebrity endorsement. They've sent the tweet out – you're ecstatic! The orders are flooding in; all is well.
Your system floods with requests, and right at the peak of traffic, your application starts slowing down. Then it slows down some more. Then it becomes unusable.
Now all that extra business – the business generated by the celebrity endorsement – is gone. The biggest day in your company's life has passed you by. Your big break, is over. You've failed.
All because your storefront application failed at the wrong time.
How did that happen? Why did your application choose that particular day, that particular time, to fail?
Application availability is critical to all modern digital applications. But how do you avoid availability problems? You can do so by avoiding those traps that cause poor availability.
There are five main causes of poor availability that impact modern digital applications.
1 – Resource exhaustion
Often, the main driver of application failure is success. The more successful your company is, the more traffic your application will receive. The more traffic it receives, the more likely you will run out of some vital resource that your application requires.
Typically, resource exhaustion doesn't happen all at once. Running low on a critical resource can cause your application to begin to slow down, backlogging requests. Backlogged requests generate more traffic, and ultimately a domino effect drives your application to fail.
But even if it doesn't fail completely, it can slow down enough that your customers leave. Shopping carts are abandoned, purchases left uncompleted. Browsers go browsing elsewhere.
Increase the number of users or increase the amount of data in use in a system and your application may fall victim to resource exhaustion, resulting in a slower and unresponsive application.
2 – Unplanned changes caused by success
When traffic increases, sometimes assumptions you've made in your code on how your application can scale are proven to be incorrect. You need to make adjustments and optimizations. You need to change your assumptions on what is critical and what is not.
Often, the realization of the need for these optimizations comes at inopportune times. You need the optimizations now or your application will fall over. You don't have time to architect, design, prioritize, and schedule the work — you need changes now to keep your application afloat.
These changes, implemented quickly and at the last minute with little or no forethought or planning, are a common cause of bad deploys and introduction of defects into your production environment. The fact that you need to make changes to maintain availability, will itself threaten your availability.
3 – Increased number of moving parts
When an application becomes popular, your business usually demands that your application expand and add additional features and capabilities. This makes your application more complicated and requires more developers to manage all of the moving parts. Whether they are working on new features, updated features, or bug fixes and general maintenance, the more individuals that are working on the application, the more moving parts that exist, the greater the chance of a problem occurring that brings your application down.
The more your application is enhanced, the more likely there is for a problem to occur.
4 – Outside dependencies
Highly successful applications usually aren't islands unto themselves. Highly successful applications often interact with other applications – either applications that are part of your application suite, or outside vendors or partners, SaaS services, or customer systems. The more dependencies you have, the more exposed you are to problems introduced by those other external systems. Your availability will ultimately become tied to the availability and quality of those external applications.
5 – Technical debt
As your application grows in complexity, the amount of technical debt your application has naturally increases. Technical debt is the accumulation of desired software changes and pending bug fixes that typically build up over time as an application grows and matures. Technical debt, as it builds up, increases the likelihood of a problem occurring.
All fast-growing applications have one or more of these problems, and those problems increase the risk of having a problem with availability. Potential availability problems can begin occurring in applications that previously performed flawlessly. The problems can quietly creep up on you, or the problems may start suddenly without warning.
But most applications, growing or not, will eventually have availability problems.
Availability problems cost you money, they cost your customer's money, and they cost you your customer's trust and loyalty. Your company cannot survive for long if you constantly have availability problems.
Building applications designed to scale means building applications designed for high availability.