Technology has changed a lot over the years. Back in the mainframe days we had very standard architectures that were driven by a few vendors and managed by a few people. Developers had few choices when it came to infrastructure and programming languages. When we moved to the client server era, infrastructure configurations became much more dynamic and many enterprises adopted a three tier architecture. Developers could now choose from a variety of programming languages and specialists emerged within each layer of the architecture (web, application, database, middleware, etc.). This increase in complexity came with trade-offs. We now had greater flexibility in the types of applications we could build and the ability to deliver software with more velocity and at a lower cost. However, managing these n-tier architectures created more operational overhead and required a diverse set of skills to support the various layers.
As we enter the cloud era, complexity is at an all-time high and our trade-offs are more extreme than ever before. We can build incredible solutions at amazing scale. Both the software and infrastructure components of our architectures can be highly automated. We live in the world where everything can be delivered as a service and is available online, all the time. In order to support the “always on” and auto scaling requirements that users have come to expect, the underlying architectures have become extremely complex.
At the same time our architectures are increasing in complexity, the business is demanding speed to market like never before. Large ecosystems around cloud computing, mobile computing, big data solutions and the Internet of Things allow us to connect highly abstracted building blocks together and build highly available and extremely robust solutions in a fraction of the time. The architectures of cloud, mobile, and big data are highly distributed and the underlying infrastructure is both virtual and immutable. That is a radical change from when previously large, inflexible, physical architectures supported the software we built.
Today’s distributed architectures are made up of many moving parts. These architectures are elastic, meaning that they scale up and down horizontally by adding and subtracting virtual resources automatically. Building architectures of this nature is much more involved than in the vertical scaling world of mainframes and client server architectures where scaling meant adding bigger physical machines and components. Many engineers within today’s enterprises have years of experience dealing with vertical architectures, but very little experience in building horizontal architectures. Enterprises are traditionally very good at managing back office applications and building n-tier software. But when it comes to architectures that require high scalability and massively parallel processing, very few enterprises have the experience required to build those types of applications.
This creates the following dilemma. The business sees an opportunity, whether it is a new revenue stream, a competitive advantage, or possibly a competitive threat, and requests that IT implements a new cloud, mobile, or big data solution. IT has very little expertise in this space yet still decides to build it themselves. They go through a long period of prototyping and learning. Many of these enterprises will fail to deliver or will deliver something subpar or very late. While IT is trying to wrap their arms around these new technologies, the business opportunity sits there idle and the opportunity costs start accumulating rapidly over time. To make matters worse, IT is spinning their wheels and consuming valuable time and money just to stand up clouds, mobile platforms, or big data databases before they can even begin to focus on building the applications and services that will provide the greatest value to the business. Much of the work that IT is trying to figure out is already a commodity that a whole host of vendors already provide out of the box as a service, or even as a completely managed service.
IT traditionally wants to be in control of everything. Developers frequently want to build many things that are not a core competency. The problem I see in IT is they prioritize things like control and manageability far more than things like speed to market, customer satisfaction, agility, etc. We live in an era where time to market is one of the most critical value propositions in business. Get something to market quick, acquire customers, learn from those customers, and advance the product or service based on customer feedback. Going dark for 12-18 months as IT ramps up its skillset for the new technologies is not a winning formula. IT needs to understand that they should focus on delivering business value instead of trying to control every technology under the sun.
The real value of IT is its deep understanding of the business and enabling business partners by providing them with cost effective technology solutions that can be delivered quickly and adjusted frequently. Building and managing commodity technologies adds time and costs to each project and ties up precious IT resources on tasks that add little to no value to the business. No wonder IT is often considered a cost center! My advice is to take a step back and build a business architecture diagram that lays out the core business services that your company offers. Then draw up a reference architecture that depicts all of the different IT services that are required to support those business services. Then, identify which of those IT services are core to your business and build those. Everything else should be outsourced to managed service providers or to various external services and products.
IT needs to stop being a control freak and figure out how to add value by quickly delivering on the company’s core services. IT should be focusing on being the best provider of the services that their customers demand. If that service happens to be providing data center services, then by all means focus on that. If not, don’t spend time building datacenters. The same goes for big data, mobile, and IoT. If the company’s core service is to be a provider of database services, mobile platforms, or sensor technology, then build those technologies. If not, find the vendors who deliver those services as a core competency and spend your time building your business services on top of it.