I think it's fair to say that we've gotten to the point where we can't get through any kind of significant global event without putting a huge strain on at least one social media site. These days, it's as though the significance of any event is measured by the strain it puts on Twitter or Youtube. Think about it: International sporting event? Check. Devastating natural disaster? Check. Man jumping from space? Double check!
And now we can add "presidential inauguration" to that list of events.
Not surprisingly, Twitter was once again put under extreme load on Monday during the second inauguration of President Obama. Twitter reported more than 1.1 million tweets about the event (many containing #Inaug2013) during Monday's ceremony. That amounts to roughly 18,712 tweets per minute as the president was being sworn in.
Anyone want to guess how that went?
But this isn't going to be a "shame on Twitter for not being perfect" article. More than any other company, Twitter's APIs are expected to handle massive traffic spikes at the drop of a hat. So, rather than scoff at them for having some down time amidst a barrage of nearly 320 tweets per second, we should be applauding them for not recreating the Hindenburg disaster. Seriously, could your app or website handle that kind of traffic all at once? For most, the honest answer is a resounding, "Hell no!"
Instead of scrutinizing the biggest software companies in the world (Google, Facebook, Twitter, etc.) every time they go down, why not use those instances as a chance to learn from them? Even though your application may never have to handle that kind of traffic, it's still important to recognize issues that are plaguing the giants of the industry and be able to acknowledge whether or not you're making the same mistakes on a smaller scale.
For instance, how successful are your load tests (assuming you perform load tests)? There are a few typical reasons that cause load tests not to work, regardless of scale:
- Your load predictions were inaccurate. Where did you get your estimates?
- You didn’t chase down the Mad Girlfriend bugs.
- Your test environment didn’t match your production environment closely enough.
- You omitted the third party APIs that are integral to your application
With increased traffic comes increased strain on your application - duh, right? Well, that strain isn't only going to be affecting the software that your team wrote and tested, it's going to be impacting all of the APIs that are integrated within your code. That’s why, in addition to fully testing your code, it's critical to write comprehensive API tests that anticipate the real-world scenario of thousands, if not millions, of Web users beating a path to your door.
With so much on the line, are you really willing to just cross your fingers and pray that the other guys are testing their own APIs? Go ahead and ask Netflix how confident they are in Amazon these days. I'm not saying that you shouldn't be integrating with 3rd party APIs, I'm just urging you to run the necessary tests to make you confident that your app can rely on them to handle the traffic when the marketing intern screams, "We've gone viral!"
So maybe there is more than one lesson to learn from #inaug2013 - through all of the fanfare and media attention that surrounds the inauguration, the main purpose of the event itself is for the president to take an oath to, "preserve, protect and defend" the country and the US Constitution to the best of his ability.
Can we, as software professionals, say that we're that dedicated to our software? This isn't a rhetorical question. How dedicated are you to a standard of quality? Could your code handle 1 million users simultaneously calling on your API? Twitter was close, and that fact alone should push all of us to reach for the next level and raise our own standards for software quality.