Software Containers - the New Unit of Work

iStock-container.jpgThe widespread use of open source container technology has enabled many development shops to quickly bring about the adoption of DevOps, hybrid cloud and microservices. Unlike virtual machines, containers allow you to apply “minimalism” by paring down to only the necessary parts need to run whatever the container was designed to do. Containers eliminate the packing in of non-essential functions into the same VM or physical machine.

Think of containers in two parts. At the base level, they are an OS kernel technology that can run anywhere, whether on premise in a virtual host or in the public cloud. They provide the access support for resources like networking, security and storage. Containers are the instances that run on virtualized operating systems. The second part is the payload containing the application code and its dependences optimized by DevOps teams as a unit of work. The payload itself can be anything whether an isolated package of legacy code or modern code based on microservices. The real value of containerized infrastructure is it allows enterprises to quickly introduce “born-in-the-cloud” microservices running in the building block environment containers enable.

Now Microservices is a modular software architecture where the application components are designed and advanced both independently of each other and of their surrounding environment. They are fully agile and built with small teams creating discrete modules with published API interfaces. As long as these APIs are managed effectively you can develop at a much faster pace using a team of teams building, testing and publishing the many parts making up a large application. All functionality is decomposed and separated at an architectural level allowing every team to develop and experiment without the need to coordinate every change. You don’t have to worry about breaking something outside of your own code stack. The culture supports better creativity and innovation that is then amplified using CI/CD (Continuous Integration / Continuous Delivery) automation tools. This sounds so wonderful however there is one important thing to remember. You have to spend the extra time and effort up front on API integration, design principles and architecture to make sure all the services can talk to each other. You have to resist the temptation to just sit down and start writing code. There are many tech companies using these approaches such as Amazon, Facebook, Google and others with complex application platforms. I see the combination of containers and microservices becoming the force multiplier many organizations are looking for to deliver working code faster with the highest business value.