Containers are a big deal because they are a key ingredient in a microservices architecture, which helps companies speed software development by moving toward a “continuous delivery” process. But few companies have reached fully continuous delivery.
Recognizing that continuous delivery requires more than simply adopting containers is important, because the conversation surrounding containers, microservices and DevOps tends to be oversimplified. Many companies have migrated parts of their operations to a microservices architecture, but they are not agile in other ways.
As a result, it’s best to think of microservices and continuous delivery not as something you either have or don’t have, but as a spectrum defined by varying degrees of agility. Roughly, that spectrum looks something like this:
- Waterfall development. This is the most un-agile type of development process. It is characterized by the siloing off of programming, testing and deployment teams from one another. It also involves slow, static software releases. It’s the old way of doing things.
- Fast waterfall. Companies that have adopted some DevOps practices or microservices tools can be said to be in a fast waterfall stage. For example, they might be using a software-defined storage system to make their data storage more agile. But if the rest of their development and deployment process is based on legacy technology, they’re hardly agile from an all-around perspective.
- Really fast waterall. Organizations on the cusp of a fully agile development process fall into this category. They’ve adopted containers, removed barriers between different teams and made their infrastructure as scalable as possible. But they are probably still hung up on a handful of items that limit agility. For instance, they might still rely on manual testing before they release code, or they may lack networking that is completely software-defined.
- Continuous delivery/continuous integration. This is the stage at which an organization is completely agile. Its infrastructure design is entirely based on microservices. That maximizes scalability and interoperability. Software is updated, tested and released on a virtually continuous basis, rather than according to a staccato rhythm. Storage and networking are defined completely in software, making it easy to migrate to new frameworks and upgrade hardware.
Many organizations would like to think of themselves as being at the stage of complete continuous delivery already. But few truly are. To move forward on the continuous delivery spectrum, companies need to step back and identify the bottlenecks that currently exist in their development and deployment process, then work to address them.
In other words, they need to be constantly on the lookout for ways to take new steps toward further agility, rather than assuming that adopting a certain tool or mindset is all it takes.