Jim Meyer is a VP of Engineering at HP Cloud, Helion OpenStack distribution. His mantra for engineering is three words: Velocity beats everything. Velocity gives your engineering teams the ability to do more in unit time while giving them the power of context and control. He recently visited us at ElasticBox where he shared interesting insights on this engineering approach. We think ElasticBox complements this vision quite well. Here are some of his insights on CI/CD and how it leads to engineering velocity.
One litmus test for good engineering is how long it takes a newly hired developer to be independently effective. If the answer is 3-6 months, you have a problem with cognitive burden. Cognitive burden means that developers have to carry some (usually large) amount of context and history of the codebase in their head, whether they’re long-time team members or brand new. Add to that the context from coding in long release cycles, and this load depletes productive time and energy. It slows down the time to market and innovate.
Release versus delivery
A release is a business activity, not a development one. While developers work to deliver features and functionality, when to release them is a business decision about when there’s enough new value in the work since the last release to make it worth packaging and shipping to customers. This singular difference requires a different way of working. You need to empower developers to deliver a feature completely and move on without a strong, frequent need to engage in release activities weeks (or months) later. How can developers deliver to a continuous delivery endpoint? And let operations take over releasing at a suitable time in the most stable way?
Enterprises don’t have the luxury to build automation tools fast enough as they’re held back by mature processes. But startups do. This symbiotic relationship between them allows enterprises to pull in their DevOps tools and CI/CD workflows.
The question is how to automate CI/CD to remove the developer cognitive burden and give them the power to engineer at velocity. Velocity allows developers to write code, fix code, and test code rapidly and at scale.
For most enterprises, automating presents similar challenges:
- It’s a high cost to maintain an existing homegrown solution.
- Workflows are personal to the business. But the business of delivering code doesn’t fit the same workflows.
- It’s difficult to manage application component states across several distributed systems.
- Developers need to do lots of integration testing in lots of different environments. And none of the environments match the high fidelity of production.
A CI/CD solution must give developers confidence that they can go fast and move on to the next thing. These are some must-haves:
- Automation provides smooth rollback even if you deploy bad code.
- Packaging software is not a pain for developers.
- Developers operate via APIs or command line as well as GUIs.
- Developers get fast quality feedback so they can fix code while it’s fresh in their minds.
- Developers run unit tests on their laptop very quickly. They can write a unit of functionality and immediately check for unintended consequences.
- Code on its way through the continuous integration pipeline gets tested, packaged, and readied to ship.
- Development and production environments have clearly understood dimensions of fidelity across them. As you add new environments, understand the different kinds of bugs you expect to find here versus your existing ones.
- Every bug is documented and run as a test case in the earliest possible environment you can reasonably expect to find, preferably the developer’s day-to-day environment.
The ultimate CI/CD solution gives developers full autonomy. The power to not only consume repeatable processes, but reusable ones. The power to let developers take the cruft out of their engineering workflow.