CVP’s Modernization Framework: Make the Shift to Continuous Everything (Pt. 1 of 3)
CVP’s Modernization Framework
As time marches on, IT systems are becoming more and more critical to the daily operations of businesses and governments. Many organizations would cease to exist, or be financially viable, if their systems were removed. Unfortunately for the operators of these systems, the rate of change in technology is accelerating, leading to a situation where these systems must not only be extremely reliable but also very flexible.
With the complexity and criticality increasing, the traditional way of supporting and enhancing a large, monolithic system is extraordinarily difficult. Here at CVP we have seen that many of our customers have had to re-architect or modernize their monolithic software applications so that they can meet new business needs.
CVP helps our customers establish and maintain a modernization program to overcome these challenges, as well as lay the foundation to prepare for the future: an autonomous computing environment (e.g., self-healing systems) with scalable adaption (e.g., instantly available servers in the cloud), and an API-first, open arrangement. Our modernization framework has been refined over the years to help our customers adopt quality DevOps practices, including Agile development, modularize systems, consolidate infrastructure, and migrate to cloud computing.
Our framework uses a three-prong approach, which we will be discussing over a three-part series:
- Make the Shift to Continuous Everything
- Slay or Split the Monolith
- Build an Adaptable Infrastructure
Make the Shift to “Continuous Everything”
What is “continuous everything”? First, we see two factors primarily driving the requirement:
Change Acceleration – Recent inventions like smartphones and the world wide web are becoming ubiquitous much faster than in the past. Whereas an organization might have previously been able to deal in multi-year roadmaps, that level of predictability can no longer be assumed.
Advancements in processes and technology – Ten years ago, the typical software development project used computer code to automate a business process, but the process of software development was still very manual. For example, I might change one feature in my code and create a new build of the software, but I would have no idea how it was going to work without manual, expensive testing. After testing, I needed to figure out how to install it on a production system that wasn’t necessarily configured to the same specifications.
These two factors lead us to a series of must-have continuous processes like:
- Continuous Integration – As programmers complete a piece of work, their product should go into a version control system where automation takes over and does tasks like automated testing and static code analysis. This not only enforces good practices of code version control, but also automates some of the quality assurance work.
- Continuous Delivery (and eventually deployment) – When a build passes testing, it should automatically be prepared for environments downstream like test, and even production. This removes the delay of doing manual releases, and also reduces risk associated with any release planning. In teams that get comfortable with this arrangement, you can configure the automatic deployment to production (“continuous deployment”) and even automatic rollback of a failed build.
- Continuous Monitoring – In order to handle alerting of problems before they become worse, system monitoring software should be put in place. Allowing IT personnel to view the current state of a system, reduces risk of downtime, as well as increases confidence in system performance long-term. For example, most systems should have automated monitoring of CPU for high utilization and disk space for potential exhaustion. Similarly, business users likely want to know the number of users online and the average response rate to gauge overall user experience.
- Continuous Testing – Automated testing doesn’t only have to be for the development process! Once your development team has created tests for conditions that should never exist, identify a subset of them that would be valuable to run against production to proactively check for problems. For example, if you have a system that should load new data every morning from an external feed, have an automated test run at the beginning of each business day to verify this happened. Any time a problem happens in production and it is fixed, try to come up with a way to proactively test the user experience. To really shine in this area, you can automate the feedback loop from your testing process, such that it triggers a rebuild of a problematic component. For more information, see part three of this blog series where we discuss “pets vs. cattle” and immutable infrastructure.
- Continuous Pulsing – Similar to monitoring of systems, monitoring of processes is instrumental in their success. As part of our Assess, Define, Act, Pulse, and Transform (ADAPT) methodology, we recommend all team members have routine check-ins to see how their work is going, what should be improved upon, and identify how the improvements can be injected back into the process. All of this is done within a continuous loop of improving the process. We do this both for our project teams, but also in general for all CVP employees to ensure all facets of an employee’s role is going well.
by Raj Hegde, Cal Zemelman, and Shamaa Ahmad