Over the last couple of years numerous big trends have been observed across all major industries. For example implementing cloud technology helps you move from your own hardware to using services like Amazon or Azure. Why do we do it? What's the appeal? The biggest appeal is speed to market. It presents a whole new level of capabilities, but it can also present new problems. Traditional IT teams have struggled to transition into cloud based technology because the problems they are used to solving are gradually changing. The ones able to adapt to the change are doing well, and those unable to adapt are not. Some people are resistant - they know how to solve problems on the old system, and don't on the new one.
“With containerization, the developer can build code in their container, move it to the test environment and then to production, without changing anything.”
One new technology I am very excited about is containerization. This is where the developer writes software in very small sections of services or micro-services. This isn’t particularly new, but containerization brings in the environment aspect for a standardized approach. Applications connect all the different services together in standard ways. The impact that it's having is huge. 20 years ago, if you wanted to set up shop, you bought 20 servers and put them in a data center, and then VMware came out. Suddenly you could run multiple servers on one box. That fundamentally changed how data centers operated. You could now get a lot more capacity in the same electrical and air conditioning and power space. Containerization is doing to the virtual machine world what the virtual machine world did to the hardware world. Developers can run applications, multiple copies of services, on a single, virtual machine. This has even dramatically reduced companies’ footprints in the cloud, while vastly increasing the capability they have.
Containerization helps solve a traditional problem in software development. A developer writes code on their machine and their machine is set up for a particular development environment. The development team moves the code into some sort of test environment and then into production. The test environment looks a lot more like production and a lot less like the developer's machine, but it's not exactly like production.
The point of putting things into testing is to fix the problems, however once the code is moved into production, other things start happening because it’s a slightly different environment which causes a different set of problems. How many times have we heard a developer say, “But it worked on my machine!” That is a traditional long term software problem. With containerization, the developer can build code in their container, move it to the test environment and then to production, without changing anything. It’s exactly the same, therefore eliminating the issue of moving within environments.
So now all at once we can start rethinking how software development is done. How exactly will differ for each company based on their business needs, but it's a fundamental change. It's the first time I've seen this level of impact be adopted this quickly. New languages come out and new concepts come in - they take a few years to take hold. However this new model has blown up within the last two years. It's not just because things are faster today, but it's because this technology so fundamentally changes how software is built.
As with all new technology, the speed at which companies embrace this change varies by industry. While there are benefits such as increased development speed and reduced cost, this technology is not without its problems. However, with containerization, a developer can get it wrong 3 or 4 times and have it fixed within the same timeframe it would’ve taken them to even start the same project with older processes.
From an oil and gas industry standpoint, people have built very specialized applications—whether it was client server or an enterprise product—that focused on building applications that did very specific things. They may adopt some of these new concepts within those applications, but they are very hesitant to make changes this fundamental. But what this change has really done is enable companies to look into building things like a platform.
For example, if we build a lot of specific services, we can have a product manager decide what they want. Eventually, they can then build it without writing any code, because the code already exists and is already tested. They're not interdependent on each other, so you can put them together in different ways. Our ability to react to a market change or to a customer's problem set is drastically accelerated. We tend to build these things as platforms of services that can be mixed and matched as needed. That has applicability in any industry.
One of the reasons it’s called containerization is because it’s modeled to behave like an actual shipping container. All the latches are the same and the hooks are in the same place, so a ship can stack it. You can take it off the ship and put it right onto a train or an 18-wheeler. Since the transportation industry has standardized specifications for what a container is. We can buy cheap items from China because it doesn't cost an arm and a leg to ship it. Now, it's the same way with the code. Now that we have containerization, if we know how this container talks to a database or talks to a web server, the developers don't even care anymore what that database is or what that web server is. They know it's going to work. As long as they understand what the inputs and outputs are, it's going to work the same way every time. There's a level of confidence that once you’ve tested a module, you don't need to spend resources testing it again.
Those are the types of things that have allowed companies to innovate and build important products within a much faster timeframe. The ability for a product manager to drive the actual development design of a product he knows his customers need is truly a game-changer.