The glorious DevOps shift for savvy developers
October 7, 2019
DevOps is a big trend now and I guess most developers and IT people, in general, know about it. But I will try to provide an overview in this article so you can know for sure what DevOps is.
DevOps - Development and Operations
DevOps is a set of software development practices that combine software development (Dev) and information-technology operations (Ops) to shorten the systems development life cycle while delivering features, fixes, and updates frequently in close alignment with business objectives.
Lately, I have gotten my eyes up for the value that a strong DevOps culture can bring to organizations. The big focus is that it will be more important in getting software into production and there is a move away from separating building and deploying software.
"DevOps is a re-org, not a new team to hire." - Adrian Cockcroft
Transforming an organization using DevOps principles is not a trivial one as it requires a culture change so we have to acknowledge the challenges and risks involved.
- Bottlenecks and blocking tasks
- Inconsistent environments
- Manual and/or custom builds
- Poor quality
- Little, to no structured testing
- No communication
This sure doesn't sound good so how does a great DevOps organization look and how does it operate to overcome these challenges? Well, let's dive deeper.
Lack of automation
DevOps without automation doesn't make any sense since the advantage of it can be so exceptional. If your tests are not automated, I encourage you to automate them right now or else there is close to zero value for those tests.
Lack of trust
Management that lacks a deeper understanding of the technical landscape we are seeing now will not see the point of changing something that is working. Focus on the long term growth and not short term gains and the time, sweat and tears spent will be trivial in the bigger picture.
Major and growing technical debth
Technical debt is a creeper and can be a major blocking element for any change in an organization. If you don't have any tests and the code is spaghetti deluxe, then it will be a difficult transformation.
Culture doesn't accept risk
To any change, there will always be risks involved. If your organization doesn't accept and tolerate risk, it won't last long as the times are changing. There will always be risks involved in every change. The important thing to remember is that there lies a higher risk to do the same thing over and over.
You should never be content with the current state of things, push forward and apply micro improvements often. If you work hard, you will survive in the fierce, global business world we are facing.
Core DevOps values
- Continuous improvement
- Data-driven decision
- Customer empathy
Alter team structure
The team structure will need some alterations and it should operate in a more agile way. If the team members barely have any interest in their craft, it will be difficult to do any changes at all. So it is a premise that every team member is highly dedicated and they have a shared vision.
When it comes to planning, the top dogs cannot do it in secret behind closed doors. The whole planning operation has to be transparent and the goals of the project need to be communicated to every team member.
The organization will be vulnerable and people dependent if your team consists of specialists. So remember, generalists is better than specialists.
There are so many blocking elements in a non-DevOps organization that needs to be eliminated to streamline the whole process of creating and delivering software to the end-user.
You can remove all policies around production access and excess approvals by applying automation. Logging can be helpful when someone make mistakes. Delivering quality is what we all should be striving for and if you deploy code often, it means that any bug or vulnerability can be patched fast.
I do think a carpenter needs a good hammer to bang in the nail. Oliver Reed
Developers are the finest craftsmen and it's our responsibility to have reliable tools.
Collaboration is a key component in a DevOps organization. Its about chatting as well as knowledge sharing and documentation.
Planning and organizing
Keeping up the flow of the developer is a key component to remove friction. A kanban board or a backlog of detailed user stories and tasks prioritized is vital for the flow. There are a lot of options to choose from so here is a shortlist of some familiar tools and less familiar tools.
Think about this scenario: a user or tester sends an email to a team member that passes it on to another developer, then the developer adds it to the backlog.
This is quite common in a lot of companies but how can we do it better? Can we automate it or how can we simplify it? A good tool will, either way, make the job of prioritizing bugs and squashing them easier.
Monitoring and logging
Bugs and other errors are going to happen no matter what. Murphy's law will bite you in the a** sooner or later so you need to have logging and monitoring in place. There are a lot of tools in this category so I'll just list a few of them.
Monitoring and logging
Configuration and infrastructure
To reduce annoying and time-consuming troubleshooting, you can use tools to keep configurations and infrastructure consistent.
If you apply IaC (Infrastructure as code) you can spin up an identical staging server setup and at the same time manage versions by keeping it in Git.
Continuous integration is the practice of integrating code into a shared repository frequently. Each integration will trigger an automated build pipeline that builds the project and runs the tests. Continuous deployment refers to keeping your application deployable at any CI build.
It is common to release it to a development environment automatically if the CI build runs successfully. Continuous delivery is about bringing it all together and releasing software in small bits often.
Continuous Integration, Deployment and Delivery
Transforming your organization using DevOps principles is nothing to wait with. Start to implement it and I'm sure you will see the advantage it gives you. There are tons of resources online for you to study it further but the tools provided here should give you a quickstart.
Happy developing software reliably.