DevOps is often credited for a digital transformation in an organization. Below is a case study where we used devops to transform product development lifecycle for one of our customers.
Our customer offers web based tools to visualize data about globally available oil wells and alongside allow multiple visualization operations on this data. Using these tools, customers can take advantage of publicly available oil wells data and build their research on top of it.
While the application code is robust and developers are expert as well as efficient, over a period of time, customer felt that one factor was slowing things down once they started on-boarding more team members in their development team, this factor was manual build and deploy. Alongside, they also discovered that there were no testing in place, that means, we were deploying even without doing basic verification.
Customer wanted to ensure that pace of deployment shouldn’t be affected by pace of development of new features, deployment should be efficient, continuous and most importantly, automated. Moreover, all the features that are pushed to production should be reliable, with all the due diligence done before features are pushed to production.
We used best practices of devops to implement a continuous integration and continuous deployment pipeline for our customer. Moreover, we also converted customer’s infrastructure into code and setup end to end real time monitoring and notifications for their entire product, including software and infrastructure. We took following steps to achieve our goal:
- Implemented Continuous Integration and Continuous Deployment (CI/CD) pipeline with Jenkins
- Persuaded Developers to write tests — Integration tests and Unit tests alongside their code
- Persuaded developers to integrate frequently to take advantage of Continuous Integration
- Integrated tests as part of CI/CD Pipeline to ensure that a code change is deployed only if all tests are passed
- Integrated Jenkins with Slack to send notifications to developers when tests fail, build fails or build cannot be deployed
- Implemented Slack based notification so that developers are notified when tests are failing or change can’t be build or deployed
- Created multiple lower/tests environments to ensure that every change go through an end to end life cycle before it is deployed to production
- Created AWS Cloudwatch based alarms to send notification to Slack whenever any code or server error is encountered
- Converted entire application infrastructure as code with Terraform so that new environments can be created and existing ones can be updated from command line
- Used Jenkins Pipeline and converted Jenkins job to Groovy code thereby giving flexibility to have our Jenkins as a Code/Pipeline as a Code (JaC/PaC) as well
- Created Bitbucket Organization in Jenkins to enable auto Continuous Integration of all target branches in Git. This ensures all jobs in Jenkins are created automatically.
- We ensured that everything is documented in a central repository that is accessible to all stakeholders for further reference
In a matter of 3 months, we were able to turn around things, with very visible and positive changes. These changes ensured that developers are focused on developing great features and deployment, operations et al were taking least amount of their time.
Following are some of the direct and major results of this digital transformation:
- Exponential reduction in deployment time. Entire commit to deployment cycle gets completed in less than 10 minutes.
- Multiple (7 to 10) stable deployments to lower as well demo environments on any given day
- Testing included in CI workflow, thereby ensuring more confidence in stability of each build
- Predictable deployments; if tests are failing, nothing gets deployed
- Slack integration notifies everybody whenever a build is broken
- More developer productivity due to continuous integration and failure notifications
Infrastructure as Code means, it now easy to make Infrastructure changes, such as:
- Automation is now the preferred way to solve any application, data or infrastructure related problems
- Dashboard, log monitoring and alerts to Slack now gives us insight on how application is performing once it is deployed to AWS
DevOps is less about applying a voodoo spell that will ensure your problems disappear in thin air, rather it is about having a agile mindset and a setup of processes, backed by set of right tools to ensure business continuity and development efficiency. This mindset, processes and tools should be used and embraced by your stakeholders. if devops is well embodied and accepted by everyone as the usual way of doing thing (not a special thing that few elite do), then only your organization can succeed in the DevOps journey.
I will be writing another post detailing how we automated some of the steps as mentioned above in next few weeks. Please share your thoughts and stories on devops and digital transformation. Reach out to me if you want to know more about devops and digital transformation. I am reachable at firstname.lastname@example.org.