#techdebt @raquelpau
Git Workflow Strategies for
Technical Debt Management
Raquel Pau
@raquelpau
http://walkmod.com
#techdebt @raquelpau
About me…
• EngProd Team member at Schibsted
• WalkMod Founder
• Almost 10 years of experience in Java
• Speaker at several occasions
• Legacy Code Rocks BCN organizer
#techdebt @raquelpau
SOFTWARE IS EATING THE WORLD
#techdebt @raquelpau
TECHNICAL DEBT GENERATES
THE FEAR OF CHANGE
#techdebt @raquelpau
IF IT WORKS, DO NOT CHANGE IT
#techdebt @raquelpau
Category Best Practise
Knowledge Debt Continuous Inspection (Code Review)
Testing Debt Continuous Integration
Infrastructure Debt Continuous Delivery
TECHNICAL DEBT CATEGORIES
#techdebt @raquelpau
FEATURE BRANCH WORKFLOW
#techdebt @raquelpau
SMALL AND VERIFIED PATCHES
#techdebt @raquelpau
FASTER
SOONER
BETTER
#techdebt @raquelpau
ORCHESTRATING
THE RELEASE PROCESS
#techdebt @raquelpau
CONTINUOUS DELIVERY
#techdebt @raquelpau
MEASURE BUSINESS VALUE
MORE FREQUENTLY
#techdebt @raquelpau
#techdebt @raquelpau
#techdebt @raquelpau
#techdebt @raquelpau
MICROSERVICES
AND
CONTINUOUS DELIVERY
#techdebt @raquelpau
#techdebt @raquelpau
NO MORE
JOBS PLEASE
#techdebt @raquelpau
PIPELINES
AS CODE
#techdebt @raquelpau
Features of Pipeline Ecosystem
• Configurations in Source Repositories
• Less click-and-type, more code
• From simple to complex
• Survives Jenkins restarts & connection losses
• Reusable definitions
• Build history/trend segregated per branches
#techdebt @raquelpau
Jenkins Pipeline Example
#techdebt @raquelpau
Jenkins Pipeline Example
#techdebt @raquelpau
Jenkins Pipeline Example
#techdebt @raquelpau
#techdebt @raquelpau
TWO PIZZA TEAMS
#techdebt @raquelpau
#techdebt @raquelpau
Fabric 8: Integrated Development Platform
Create Wizards to create micro-services
Build Packaging into multiple container images
Release Rolling upgrades across teams environments
Runtime Service discovery, scaling, failover, load balancing
Manage Centralise logs, metrics, alerts, tracing, circuit
breaker
Feedback Dashboards and Metrics to get feedback
Platform On premise, public or hybrid cloud
#techdebt @raquelpau
DIVERSIFIED TEAMS
#techdebt @raquelpau
AND ONE DAY
TECHNICAL DEBT STARTED
#techdebt @raquelpau
TO REDUCE DEBT
WE NEED
METRICS AND TOOLS
#techdebt @raquelpau
#techdebt @raquelpau
feature#1234
feature#1354
CONTINUOUS INSPECTION
#techdebt @raquelpau
@SupressWarnings(“PMD”)
#techdebt @raquelpau
#techdebt @raquelpau
MANY
CODING STYLE RULES ARE
AUTOMATICALLY FIXEABLE
#techdebt @raquelpau
mvn walkmod:patch
gradle walkmodPatch
#techdebt @raquelpau
#techdebt @raquelpau
public void visit(ImportDeclaration n, VisitorContext vc) {
if (n.getUsages().isEmpty()) {
n.remove();
}
}
It is all about code transformations
#techdebt @raquelpau
* KILLER FEATURE *
FORMAT PRESERVATION
#techdebt @raquelpau
TRUST TOOLS
OR
ENSURE TEST COVERAGE
#techdebt @raquelpau
mvn walkmod:patch
git apply walkmod.patch
mvn test
git commit –a –fixup HEAD
git pull –rebase origin $branch
git push origin HEAD:$branch
Fix-Up Recipe
#techdebt @raquelpau
CONTINUOUS FIXINGS
feature#1354
git commit -a --fixup HEAD
#techdebt @raquelpau
#!groovy
@Library(‘github.com/walkmod/jenkins-pipeline-shared@maven’)
…
stage(‘Fixing Release’) {
steps {
walkmodApply(
validatePatch: false,
branch: ${branch},
alwaysApply: true,
alwaysFail: true )
}
}
Pipeline Library
#techdebt @raquelpau
walkmodApply: fixes your build
hasWalkmodPatch: checks if there are fixings
applyWalkModPatch: applies the patch
pushWalkModPatch: pushes the patch
WalkMod Pipeline API
#techdebt @raquelpau
#techdebt @raquelpau
Incremental Execution
Microservices - Start it now
Legacy Code - apply them incrementally
#techdebt @raquelpau
WalkModHub
#techdebt @raquelpau
• Fear of Changing
• Release each commit!
• Pipelines in Git
• Microservices management
• Continuous Fixing
• Legacy Code Management
#techdebt @raquelpau

Git Workflow Strategies for Technical Debt Management