Inventory

Inventory and Building Cloud Services

It is just vapor without it 

I regularly encounter delivery teams that are excited about turning everything as a cloud service, and then watch them create an unmanageable mess of everything. Most are at a complete loss as to what has happened. They have delivered everything in nearly the same way as they always have, with the only changes being that they are deploying their code as a service rather than as something installable.

What they have overlooked in the process is the importance of  maintaining situational awareness. The problems start with the management of the inventory of their cloud service.

cloud delivery is like logistics

Imagine you run a logistics business, complete with warehouses, lorries, ships and cargo aircraft. Your customers are completely up in arms. They are saying that it seems to take absolutely forever for deliveries, and even when they eventually are made they often are delivered to the wrong place or are the wrong items.

When you take a look at what is going on, you can see that your staff are delivering everything as quickly as they can, yet the warehouses are so full that packages are spilling into the parking lot. You realize that not only do you not know where the inventory is, but aren’t even sure where the vehicles to transport it are, or how much capacity each of those vehicles can hold. Just as you start to devise a plan, a critical order from your most important client hits.

There can be no argument that this is an extremely ineffective way to run a logistics business. Logistics requires knowing where everything is at any given time, whether it is product, capacity or capability. 

Similarly, to be successful IT delivery organizations need to know what they have, where it is, what state it is in, its current and potential capabilities and limitations. Unlike a logistics company, the need to have this information immediately at hand with a high level of efficacy is even more important to ensure success.

How do we get here

The problems begins with the fact that traditional IT organizations rarely have such urgent needs. Most only have a small pile of applications on a few dozen servers being run by a small team of people who all know each other. Just like any mom-and-pop operation, the number of moving parts and dependencies to track are small enough to manage mentally in an informal way. You know that if you do not know exactly the information you need, you are only one quick chat away from someone who will.

The scale and dynamism of delivering Cloud services causes the number of dependencies to not only explode, but also becomes impossible for anyone to track the entire constantly changing dependency map in their head. 

The need to Capture & Track your inventory

Much like a logistics company, what is required are means for managing and tracking all forms of inventory as they flow and change throughout the service lifecycle.

Physical inventory

The first form of inventory is the physical sort. You need to understand the locations, capabilities, capacities, and load levels of your delivery service. Even if you rely upon a cloud provider for infrastructure services, you need to understand their capabilities, their physical location, and the latency and friction involved in deployment and service responsiveness. Location also becomes important when maintaining any legal and regulatory compliance, such as those around data protection and taxation.

The people in the delivery team are also important. Knowing how many you have, where they are, what abilities they have, and their familiarity with the code base and service can tell you a lot about how much friction and risk there is in your delivery ecosystem. 

Capability Health Inventory

The second form of inventory are the capabilities and health of your code and the underlying components you rely upon to run it. In logistics this would be the lorries, ships and aircraft. The capabilities, configurations and locations of these assets must be constantly tracked to allow the business to know how best to service their customers, both when the capabilities are available as well as when they are carrying customer product. Missing a truck with refrigeration capabilities in a particular location could mean the difference between whether or not a product is delivered fresh. If a ship rather than an aircraft is available, delivery speed is compromised in exchange for bulk.

Besides the code itself, for a cloud service this second form of inventory would be the servers, virtual machines, networks, and storage. Without understanding and constantly tracking of their health and suitability for the tasks they are meant to handle can create hazards that reduce the delivery effectiveness of the organization, or worse lead to service failure.

Package & Configuration Inventory

The third form of inventory are your software packages, external libraries, and their configurations. Whether this is a physical package as in logistics, or a software package and its configuration in the Cloud, these are both in fact little more than mechanisms that are dynamically configured to handle the actual items that the customer cares about. The contents of a single package can be meaningful in itself, or only useful when bundled with other packages of relevant components.

What so many delivery organizations miss is the importance of keeping track of the contents of the libraries and packages they depend upon, the provenance of them (do they know where they came from, how reliable and secure they are, etc), as well as the knowledge of what combination of libraries, packages, and configurations in what version ranges in their delivery stack. The quality of this knowledge, and ensuring the correct alignment in production, can play a major role in the stability, security, and supportability of the service stack. 

Data

The fourth form of inventory is the data. Knowing what data you have, where it is stored and in what form, where it came from, who owns it, how accessible it is, what can access it, what can change it, as well as how accurate and reproducible it is can tell you a lot. It helps you understand  what protections you need to put in place and what you must consider to ensure you do not spoil any important data. It also helps you understand relationships between data elements, your services, and your customer that can be used to build and maintain important context. This improves your situational awareness, and ultimately your ability to deliver services that behave as expected.

Service Inventory

The final form of inventory are the services themselves. Surprisingly few delivery organizations keep track of the full inventory of services that their services rely upon. This is why it is not uncommon to see services fall over or degrade when someone messes around with a seemingly unimportant configuration in the delivery ecosystem. Your knowledge of what services your services are comprised and depend upon, their versions, where they live, how they are configured,  how they scale, and what happens when they fail is an important factor in your own ability to deliver, manage, and scale your delivery ecosystem.

Summing it up

All this might sound like a bit of a stretched metaphor., but thinking that your service delivery ecosystem consists of an interdependent web of inventories of assets that must pull together, power, and deliver other sorts of interrelated assets in a clean and predictable way can be useful. It brings into focus how the ability to track, manage, and optimize the handling of inventory throughout the system is absolutely key for success for both industries.