But the truth today is that in the world of modern software, "two out of three" is no longer an acceptable outcome. In fact, even three out of three — cheaper, better, and faster — is no longer enough. Today’s customers demand high-quality software, updated frequently, at a competitive price. But that’s only the beginning! To succeed building modern software today, you need to deliver much, much more.
How much more? Software developers now must deliver products and services that simultaneously combine no less than a dozen different attributes. And there's no room for trade-offs or compromises here; increasingly, this is a contest where the only acceptable score is a perfect score.
Let’s take a quick look at how we got here, and lay out all 12 of the key attributes modern software must deliver.
Better technology, tools, methodologies raise the bar
As the cost of technology infrastructure continues to drop, generations of cheaper and more capable storage, memory, and computing systems have placed immensely powerful capabilities at every developer's fingertips. At the same time, software development tools and methods have also evolved in interesting and exciting ways. Cloud-native applications — leveraging independent and autonomous microservices, packaged in containers, and developed using ever-more-capable programming languages and frameworks — allow developers to rethink basic assumptions about cost, complexity, and risk in our application architectures.
Meanwhile, software development methodologies, organizational models, and workplace cultures have transformed to take advantage of these innovations. Agile and DevOps methodologies, more efficient application lifecycle management, and ubiquitous automation allow developers to ship software faster, more consistently and at higher quality levels than ever before.
Today, a single engineer can spin up an auto-scaling web app, using a message queue and a database, in minutes — duplicating work that used to take an entire team days or even weeks. The cost of hosting that app, using a massively scalable and highly available infrastructure in the cloud, is negligible compared to even a decade ago. In a very real sense, modern software developers really can have their cake, and eat it, too.
But costs and capabilities aren’t all that have changed. This revolution didn't just affect software developers — it also reshaped our customers' expectations and experiences. They have come to demand and rely on applications that deliver a consistent, high-quality user experience — and that constantly continue to raise the bar with new capabilities delivered at a minimal cost.
The result of these two revolutions is that cheaper, better, and faster are now merely table stakes. Success requires moving beyond these legacy attributes by adding greater capabilities and improved sustainability, maintenance, and monitoring.
Here’s the checklist – how do you rate?
Here is your modern software success checklist — can you deliver all twelve?
- Speed. Can you deliver value to customers more quickly than your competitors — and stay ahead of your customers' rising expectations?
- Cost. Even as you build and deliver software at lower cost than ever before, can you continue to deliver product at a predictable and acceptable cost??
- Quality. In a world where customers take quality for granted — and where a single mistake can undo a brand image that may have taken years to build — can you continue to raise the bar on your product standards and meet constantly growing customer expectations??
- Resiliency. When your software has problems, can it recover gracefully, restore lost functionality quickly, prevent data loss, and make sure it doesn’t negatively impact your customer’s business and experience?
- Reliability. When you deliver software, is it available around the clock, 365 days a year? Modern software companies must work towards eliminating downtime — planned or otherwise — from their production environments.
- Scalability. Is your software architected to scale gracefully, and with minimal cost or risk? Can you achieve truly open-ended scalability — from 20 users to 20,000 to 20 million — without re-architecting your software or putting your customers through the pain of a "rip and replace" scenario? And scalability is not just the number of users. It’s the size of the dataset, the complexity of your application, and the number of developers working on it.
- Portability. Is your software ready for a world defined by heterogeneous and constantly evolving endpoints? Can you deploy locally on laptops, in staging environments, and across multiple production environments, based entirely upon your customers' preferences, geographic, and business needs?
- Observability. When you deliver software, does it expose key metrics, connected traces, and business outcomes that your DevOps, operations, site reliability engineering, and business teams can use to drive performance improvements and business success?
- Maintainability. Technology innovation still hasn't conquered an unpleasant truth — 75% of the cost of software is due to long-term maintenance and management. Is your software designed to simplify and streamline maintenance processes?
- Automatability. When you build software, is the build and deployment process designed to take full advantage of modern automation tools and methods? Are there chokepoints in these processes that still rely upon manual toil?
- Disposability. When you deliver software, does the delivery process minimize startup time, shut down gracefully, and measure lifecycles in milliseconds rather than minutes?
- Continuity. Do your production releases happen on an hourly, or even minute-by-minute, basis? Have you evolved beyond a cadence that may involve weeks or even months between releases?
The bottom line is that you don't get to choose six of these you want to deliver — or eight, or ten, or even 11 out of 12. You must achieve all 12 — because if you can't run the table, your competitors will.
There's no denying that the adage — "choose two out of three" — sounds a lot easier than "choose 12." But while the new recipe for success may be more challenging and complex, remember the flip side — there’s never been a more exciting time to build software. With the enormous improvements in the software tools and infrastructure, some are calling this a golden age of software development. Just as important, as every business becomes a software business, the opportunities — as well as the rewards — have never been greater.