--- config: fontFamily: "IBM Plex Sans" gitGraph: showCommitLabel: false --- gitGraph commit commit branch feature/001 commit
Theory, practice and demo
Devops is foundational to modernization.
Modernization of Devops is no longer a voyage of exploration.
No single tool or approach covers the entire journey to the destination.
We have a Guide… yes, it would be better if it were a map!
Developer Experience | Old | New |
---|---|---|
Source Code Storage | PDS Members | UNIX/Linux Filesystem |
Editing | ISPF | IDEs: IDZ, VSCode |
Versioning | Package IDs | Git branches/commits |
Process | Old | New |
---|---|---|
Building | JCL | Automated Pipeline scripts |
Approval | Proprietary | Pull Requests |
Deployment | JCL | IBM Wazi Deploy, IBM Urban Code Deploy |
Some aims and assumptions that guide our recommendations…
Well… travel light perhaps!
Planning and design activities as well as code development aim to align to a regular release cadence.
The cadence of the next planned release is defined by the application team.
Planning assumptions should aim as much as possible to complete changes quickly, ideally within one release cycle.
Every change starts in a branch.
--- config: fontFamily: "IBM Plex Sans" gitGraph: showCommitLabel: false --- gitGraph commit commit branch feature/001 commit
Developers work in the branch to make changes, perform user builds and unit tests.
A branch holds multiple commits (changes to multiple files).
Every change starts in a branch.
--- config: fontFamily: "IBM Plex Sans" gitGraph: showCommitLabel: false --- gitGraph commit commit branch feature/001 commit commit
These changes on these branches are
main
.main
Feature Team/Developers will:
--- config: fontFamily: "IBM Plex Sans" gitGraph: showCommitLabel: false --- gitGraph commit commit branch feature/001 commit commit checkout main merge feature/001
main
Create a Pull Request (PR) to signal to Team Leaders/Release Controllers to:
main
--- config: fontFamily: "IBM Plex Sans" gitGraph: showCommitLabel: false --- gitGraph commit commit branch feature/001 commit commit checkout main merge feature/001
main
and other long-lived branches are protected (not everyone can push
or merge
to them).
CI/CD decouples the building and deploying to test environments and production.
We have no branches named prod
(or test
or QA
)
Any point in the history of main
can be declared a release candidate.
--- config: fontFamily: "IBM Plex Sans" gitGraph: mainBranchOrder: 2 showCommitLabel: false --- gitGraph commit commit branch feature/001 order: 3 commit commit checkout main merge feature/001 commit tag: "RC1" branch maintenance/release1.1 commit tag: "Build, deploy, test"
Tag the commit (point in main
’s history) with a release name.
When…
the release package can be deployed to production…
--- config: fontFamily: "IBM Plex Sans" gitGraph: mainBranchOrder: 4 showCommitLabel: false --- gitGraph commit commit branch feature/001 order: 4 commit commit checkout main merge feature/001 commit tag: "RC1" branch maintenance/release2.2-RC1 order: 3 commit tag: "Build, deploy, test" checkout main branch feature/002 order: 4 commit checkout main merge feature/002 commit tag: "RC2" branch maintenance/release2.2.0-RC2 order: 2 commit tag: "Build, deploy, test" checkout main commit tag: "Rel2.2" branch maintenance/release2.2.0 order: 1 commit tag: "Build, deploy, test, release"
A release maintenance branch will be used if hot-fixes must be developed and delivered.
--- config: fontFamily: "IBM Plex Sans" gitGraph: mainBranchOrder: 2 showCommitLabel: false --- gitGraph commit commit tag: "rel2.1.0" branch maintenance/rel2.1.x order: 1 commit checkout main commit branch feature/001 order: 2 commit checkout main commit branch feature/002 order: 1 commit checkout main merge feature/001 checkout maintenance/rel2.1.x branch hotfix/001 order: 0 commit checkout maintenance/rel2.1.x merge hotfix/001 commit tag: "rel2.1.1" checkout main merge feature/002
Concurrent feature branches scale very well, but assume short cycle times.
Epic branches can collect multiple features
main
(Epic branches are a form of integration branch.)
--- config: fontFamily: "IBM Plex Sans" gitGraph: mainBranchOrder: 2 showCommitLabel: false --- gitGraph commit checkout main commit branch epic/proj001/001 order: 3 commit branch feature/proj001/004 order: 4 commit checkout epic/proj001/001 branch feature/proj001/005 order: 5 commit checkout feature/proj001/004 commit checkout main commit branch feature/001 order: 2 commit checkout main branch feature/002 order: 1 commit checkout epic/proj001/001 merge feature/proj001/004 checkout main merge feature/001 checkout epic/proj001/001 merge feature/proj001/005 checkout feature/002 commit checkout main merge feature/002 branch feature/003 order: 2 commit checkout main merge feature/003 commit tag: "rel2.2.0" checkout epic/proj001/001 commit tag: "continue-epic"
The principles are more important that the tools and names.
Naming conventions - making purpose obvious:
main
: single source of truth. The only long-living branch.release/rel-2.0.1
: explicit versioning numbering to identify releases maintenance branch.epic/47-ai-fraud-detection
: development initiative identified by epic id and description.Changes are implemented on feature branches:
feature/<jira-id|servicenow-id>-new-mortgage-calculation
: references to other planning tools for new features for the next planned release.feature/47-ai-fraud-detection/refactor-mortgage-calculation
: feature implemented for development initiativehotfix/rel-2.0.1/fix-mortgage-calc
: fix implemented for release rel-2.0.1Names of branches and tags flow through to builds and deployments.
How do teams work with and benefit from the branch strategy?
Work and focus on the next planned release via the main
branch. After planning the work items for the next release, the development team is adding changes to the main branch.
Resolution of a production problem in the currently-released version of the application by leveraging a release maintenance branch that is used for maintenance purposes,
concurrent development activities for significant development initiatives, which include multiple planned work items for a later delivery (including starting development of a future release) by creating an epic branch from a commit point in the history of main.
The following narratives complement the structure.
Developer activities:
Release control activities:
main
and buildPipeline templates for the various pipeline orchestrators + common set of services that implement the recommended workflow.
zDevOps adoption enablement website - Git branching for mainframe development
A no-baggage approach to new Mainframe development practices
Pipeline templates - IBM DBB Community Repository
Videos
Check out this presentation in Github!
Submit your feedback at:
https://conferences.gse.org.uk/2025V/feedback/AG
(Make sure you are signed into MyGSE)
Copyright © 2025 IBM Corporation