What We Wish Our Clients Knew About DevOps
This article originally appeared in THE NEW STACK
Enterprise companies routinely fall into a cycle of relying on engineers to build a user-facing product only to become frustrated when the end users are unhappy with the product and refuse to use it.
By prioritizing DevOps and infrastructure at the very beginning of the product cycle, your team can ensure that as more and more users adopt the solution, it will function as intended. By taking into account a few key considerations, you can develop a product that is stable, scalable and yes, even useful.
Step 1: Understand what DevOps is and isn’t
DevOps captures the 360-degree view of building, iterating, delivering, supporting and improving a digital solution. A holistic view point ensures that there is unity on new features, product rollout and captures the authentic needs of the business. At Umbrage, we routinely see products that don’t succeed because they are too engineering focused.
Our initial discovery process almost always shows that when the product was initially built, it was built solely by developers. When developing an app, you need more than just developers. As a developer, I know I’m neither a champion of design nor product; and I cannot be successful without the people that are champions of those crafts.
But there’s another important aspect of successful product development — DevOps.
DevOps focuses on the process for building a successful solution. It is not designed to mine for business problems or manage the rollout to new users. It is a strong methodology to build a solution to a core business problem and by utilizing a DevOps mindset, you can set your product, and your users, up for success.
Step 2: Prepare for success
When your team makes DevOps a priority, it enables everyone to prepare for success. Your global teams adopt the solution and it scales across the infrastructure you’ve created. But since the product process routinely falls to the IT team, the preparations for success don’t happen. Here’s a scenario we see all to often:
A developer is asked to build a tool. So the developer spins up a database instance, puts a light UI over the top of it. If they’re told it’s a priority, they’ll put a mobile app together as well. Everything looks to be running smoothly as the headquarters team uses only one of the features. But it falls apart when the global team tries to deploy it. The code does not scale, the cloud services weren’t configured to support offline functionality and fixing the code means a total re-write so the product is shelved and back to the old system you go.
We’ve found it's important to take the necessary time to understand the constraints on number of users, the conditions those users are using the application, where in the world they are using it, etc. These factors should inform both the infrastructure and how developers build the application.
Step 3: Build your DevOps foundation
We’ve also had a lot of success using infrastructure as code (IaC). This typically means using Terraform to deploy our infrastructure to the cloud service we’re using. Without IaC, the IT team needs to manually adjust configuration for your infrastructure in whatever cloud console you are using.
This creates issues with scalability, speed and accountability. By using IaC, all your configurations are contained in a code repository that is potentially accessible by DevOps and developers. This also bridges the gap between the two fields helping both sides work more in unison.
Another thing Umbrage has found success with is containerization. We’ve used Docker and Kubernetes to separate concerns in different containers that can be scaled up and down. This allows us to scale each container as opposed to the entire code base. This is what’s known as horizontal scaling. Instead of scaling your entire server that’s running your code, you can scale the individual containers that contain bits of your code. If one container isn’t seeing a huge load, there is no need to scale it. You only pay to scale the areas that are being used the most.
Step 4: Measuring DevOps lessons
Building, delivering and scaling a digital solution is a tough ask. Identifying the key features that the users truly need, building an app that teams readily use and supporting it as it evolves and rolls out are all reliant on understanding what success is.
With a DevOps-first mindset, having the ability to collect KPIs specific to the development process such as deployment time, failed deployment rate and unplanned work. Additionally, you can track data once an app is deployed such as usage stats, server performance or bug tracking. And business group KPIs/OKRs can also be taken into account.Aligning the team around delivering a digital solution that the entire company can get excited over is a tough task. But by utilizing a solid DevOps approach, you can have satisfied users and development teams.
Check out our case study with Cold Bore.