Developing custom software or configurations in a modern software version control system
Developing custom software or configurations in a modern software version control system
The key to modern software development is the ability to track WIP and make iterative progress. This progress should demonstrate business value--no margin, no mission. In the past, one issue that was a problem was that new features would require multiple teams to be in-sync at the same time. Before the improvements mentioned below, there was no way to gradually add new features to a specific set of services or clients without a significant rollout, which was error-prone, expensive, and challenging to coordinate.
To support continuous delivery with multiple downstream clients running at different release cadences, we implemented microservices, feature flags, service mesh, and application gateways. These tools and techniques enabled employing canary builds and green/blue deploys.
Targeting new versions of services with new releases of clients (web, Android, iOS, other services) allowed us to develop new features yet control the rollout to specific clients with certain feature flags enabled. This segmentation allowed us to minimize the footprint and blast radius of new feature development. And this makes new features less of a major rollout, which allowed us to iterate faster and pivot while showing constant progress.
Another critical issue with the previous methods was many long-lived git branches. Long-lived software branches make it hard to integrate as final integration gets pushed to near the end of the project. To combat this, we adopted trunk-based development with automated security checks (DevSecOps, shift left), container scans, code scans, code coverage, unit testing, etc. as gates that needed to pass before feature branches pushed to trunk/master. Before a developer could mark a task as done, the feature or fix had to merge to master/trunk, which means it had to pass the checks.
Feature flags, Microservices, CI/CD automation, service mesh, canary deploys, and segmented deploys allowed us to continually deliver business value while generating and surfacing all WIP via KPIs.
We were able to adopt many of these DevOps best practices and then spoke about them to a broader audience for adoption at the client site as well as other venues, including CTO Forum. These practices allowed us to deliver more often, and to iterate faster. These ideas and features we have been enhancing over the years at many client sites. We have employed Microservices, streaming, etc. with a lot of success. These techniques have allowed us to replace services that were 100x more expensive to run with cost-efficient, reliable, and supportable software services.
Senior Business Systems Analyst at the Judicial Council of California
4 年This is a nice overview of modern software development methodologies and techniques, done subtly as a sort of thinking-out-loud or stream-of-consciousness session from someone pondering things bigger than those usually in my head at-any-given-moment. It is nice to reflect like this so we do not forget where we came from. I also just learned the testing term Shift Left to describe the testing methods we strive for; I need Rick Hightower to smack me every-once-in-a-while :) Enjoyed it, keep em coming!