As we’re growing our development team in InvoiceFair I’ve gone through a process of budget approval for hiring people. The process is pretty lightweight, but in an effort to be as thorough as possible, I put together an org chart, some lightweight role descriptions and so on.
To be honest it was all going well, until we got to the DevOps role…
What is this thing? What’s it going to do for us and most importantly, do we need it right now?
Hmmm. Good questions.
What Is DevOps?
DevOps is a set of practices that combines software development (Dev) and IT operations (Ops). It aims to shorten the systems development life cycle and provide continuous delivery with high software quality. DevOps is complementary with Agile software development; several DevOps aspects came from the Agile methodology.Wikipedia
Excellent – all clear now.
Every word there is entirely correct, and accurate, but there is a problem: it manages to tell a business user almost nothing.
Think about this from the finance perspective (apologies to our CFO).
We’re already hiring developers, so Dev is covered, we outsource Ops, so that’s covered, we’re hiring SDET for testing, so quality is covered and we’re also looking for an Agile Coach so the ‘agile’ thing is also covered. Explain to me again what this DevOps thing is doing.
Wow, checkmate in 4 moves.
Getting A Budget for DevOps
What story is this picture telling us? Well, its a feedback loop, a cycle if you will for continuous improvement through continuous feedback. It’s an adaptation of the agile cycle that should at some level be familiar to most technical people at this point.
But that doesn’t really progress our discussion with the business. In my case, to help the business understand what DevOps is going to achieve, I made a number of points:
- We’re in the process of developing the next generation of our platform. We’re focused on building a platform that embraces automation because we recognise that our road to growth cannot be driven to the levels we want with people alone. We need to offload work to the platform to support our growth.
We, like every other technology company, are in a hiring crunch. There are simply many many more roles than there are people. It’s not enough for us to automate our platform to increase the scalability and effectiveness of the business, we must also automate the processes that we use to develop our platform to support the scalability of our development efforts.
DevOps builds that automation.
- We’re building a cloud native platform with a relatively small, but highly effective team. As discussed in one of my other posts (see The High Performance Team), one of the ways I believe we can build a high performance team is by limiting the choices that they make. This extends to the services on the cloud that the team can consume, and by extension how the teams consume them.
Building a standardised mechanism for provisioning and consuming services, particularly on the cloud, will increase (over time) the speed and agility of the development team.
DevOps builds those mechanisms.
- Our development to date has been supported by AWS credits, which has made our use of services on the cloud largely free. That moment has now passed, which means that we are now heading for a potentially very expensive world as the business grows. Keeping control of those costs requires not just the efficient use of those services, but building the tools that allow us to observe where we are using services and at what level. It is only with this level of transparency that we can continuously monitor our actual and projected costs.
DevOps implements the systems that support that transparency and by extension provides the means to control our costs.
So that’s it, DevOps will make us more efficient in our use of our development skills, will make us more effective in our delivery and will help us manage costs. Everything a finance person could possibly want.
Development Nirvana if its done right.
There is one remaining question – do we need it now?
Well there’s two points to be made here:
- When working with a small, agile team. Everyone on the team should be focused on using their particular skills to progress the development of the platform. If we accept the benefits listed above as the outcome of establishing a DevOps capability, then we must recognise the effort involved in building that capability.
That effort requires time.
Should we find that time by sacrificing progress on business capabilities by using one of our developers? Or do we hire a dedicated person with specific skills who can focus on DevOps? We decided that a dedicated professional was the more effective path.
- Building a DevOps capability is an ongoing process. Each step in that process will bring immediate benefits and also get us closer to the longer term benefits described above.
The sooner we start, the sooner we can start to realise those benefits. We decided that we needed to start down that road as soon as we can.
What Will DevOps Do?
Through a combination of logic, wit, charm and a smattering of good sense, you get the budget and then you get the right person (or people) to fill the role.
What is it that they should be doing to achieve these lofty DevOps goals?
If the development team is building a software platform to deliver a highly automated, next generation solution for our customers, and the operations team are building a hosting platform to deliver a reliable and scalable service for our customers, then DevOps is concerned with building a Development Platform to deliver a highly automated bridge between Development and Operations.
Here’s how I think about it (apologies for the artwork, it’s my own work).
First, lets consider the development side of the bridge, working diligently in our software factory churning out features and business capabilities at a furious rate. This code needs to be run through a workflow that will build it, test it a and send it off to our big cloud in the sky for deployment.
That workflow is typically a Continuous Integration / Continuous Deployment pipeline that needs to be installed and configured.
There’s many CI/CD platforms out there – please don’t build your own. There are so many out there that are rich in features and more than suitable for whatever needs you may have.
That CI/CD platform is the means through which we move capabilities from our software factory to our customers. But the pipeline should be structured to support many more functions. It is typical for CI/CD pipelines to manage the execution of unit and integration testing of the code, to undertake security analysis and to participate in a larger governance and compliance process.
On the other side of the bridge is operations who have responsibility for ensuring that our platform is always running and performing as expected. They manage the hosting platform that will be a home for the software produced in the factory and which is the delivery mechanism for our product to our customers.
To achieve these goals, operations teams manage storage, computing resources, networking infrastructure, database and queueing systems along with security resources and internal administrative tools.
That’s a lot of moving parts.
For the business to progress, we need to shorten the amount of time it takes to get product from the software factory onto our hosting platform, and equally shorten the time to get feedback and monitoring of the performance of the hosting platform back to the software factory allowing improvements and optimisations to be made.
The Development Platform, is the realm where DevOps owns and operates the CI/CD platform, working with the development teams to establish their specific build pipelines. In building those pipelines, the development side is brought closer to the operations side by providing mechanisms to get the software to the hosting platform efficiently.
The Development Platform also controls and manages the specific tools that offer Configuration, Observability, Diagnostics (Traceability) and the other Software Infrastructure elements that connect the software platform to the hosting platform. It also controls the APIs, SDKs and other components that are used in the software factory to make those connections. In this way the operations side is brought closer to the development side without bringing the full complexity of the hosting platform.
Would You Like to Know More?
As with any technology or innovation at the peak of its hype cycle, there’s an ocean of material that could be consumed. I would suggest that there are two levels needed to approach the problem: the conceptual and then the practical.
On the conceptual side, The DevOps Handbook by Gene Kim et al. is a great book on the entire world of DevOps but forewarned is forearmed, it’s not a handbook as advertised, and it won’t really help in the more practical aspects of bringing a DevOps function to life. Think of it as a philosophers guide.
Much more useful, although arguably ageing in a rapidly developing field is Continuous Delivery by Jez Humble and David Farley (Jez is a co-author on the DevOps Handbook). It’s grounded in a particular approach to delivering software, but has many useful ideas and concepts that are worth considering.
Armed with that conceptual knowledge, you will find multiple paths that could be followed to implement your Development Platform, too many to make a specific recommendation. You’ll find plenty to read for your specific cloud platform, development language and CI/CD platform of choice.
The Short Version
The summary then is this: DevOps is the automation of the development process to make us faster, more efficient and more effective in what we’re delivering to our customers. It will do for our development team what our platform is doing for our customers.
It does this by bridging the two distinct disciplines of Development and Operations that allows both to be better at how they deliver their services to each other and by extension to our customers.
The invasion of Ukraine is an act of aggression that we should all oppose and speak out against. I will continue to Stand with Ukraine and its people until peace is restored.