Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Fight Code Rot Using Continuous Improvement
Search
Sponsored
·
Your Podcast. Everywhere. Effortlessly.
Share. Educate. Inspire. Entertain. You do you. We'll handle the rest.
→
garyfleming
August 22, 2019
Programming
910
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Fight Code Rot Using Continuous Improvement
garyfleming
August 22, 2019
More Decks by garyfleming
See All by garyfleming
User Story Mapping Workshop
garyfleming
1
49
TDD for Testers
garyfleming
1
120
TDD Is My Shame
garyfleming
0
330
Continuous Testing
garyfleming
0
90
Better User Stories Through Example Mapping
garyfleming
0
110
Fighting Continuous Entropy
garyfleming
0
110
beyond-frameworks.pdf
garyfleming
1
52
The Board Whisperer
garyfleming
0
1.2k
APIs on the Scale of Decades
garyfleming
0
140
Other Decks in Programming
See All in Programming
Jindong: Introducing Declarative Haptics in Compose Multiplatform
l2hyunwoo
0
130
Cloudflare is Agents
chimame
0
180
「寝てても仕事が進む」Claude Codeで組む第二の脳
tomoyafujita2016
0
350
typoなんかねぇよ
raspython3
0
350
【デモ】Kiroで体験する仕様駆動開発|設計からコーディングまでAIと進める開発フロー
cmkudo
0
330
Gmail/Google DriveをトリガーにAIエージェントを動かそう! / Run AI agents with Gmail/Google Drive as triggers!
har1101
2
400
人間の目はかわらない、だからJPEGは30年もつ
yuzneri
12
19k
Webエンジニアなのにブラウザの仕組みがわからないので、Pythonで自作してみた
tatsuki12
4
970
FDEが実現するAI駆動経営の現在地
gonta
2
290
運用ダッシュボードの設計を誰も教えてくれないのだけどみなさんどうしてるんですか? - チームに監視するという文化を根付かせるための第一歩を踏みたい -
satoshi256kbyte
1
140
テーブルをDELETEした
yuzneri
0
150
生成AIで帳票OCRが「簡単に」作れる時代になった?
kon_shou
0
1.1k
Featured
See All Featured
Into the Great Unknown - MozCon
thekraken
41
2.7k
Building the Perfect Custom Keyboard
takai
2
850
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
47
8.3k
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
490
We Are The Robots
honzajavorek
0
300
Docker and Python
trallard
47
4.1k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
260
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
660
Music & Morning Musume
bryan
47
7.3k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Transcript
FIGHTING CODE ROT USING CONTINUOUS IMPROVEMENT 1995 @garyfleming
1995 @garyfleming
1995 @garyfleming
1995 @garyfleming
1995 @garyfleming
! @garyfleming
NOVEMBER FIFTEEN, NINETEEN NINETY-FIVE @garyfleming
SIXTEEN => SOXTEEN @garyfleming
SIXTEEN => SOXTEEN @garyfleming
TWO THOUSAND SOXTEEN @garyfleming
▸ No source code (written in an older language) ▸
Runs in a green screen terminal, ▸ Has to be emulated. @garyfleming
FIGHT CODE ROT USING CONTINUOUS IMPROVEMENT @GARYFLEMING @garyfleming
WHAT IS CODE ROT? @garyfleming
SYSTEM EXPERIMENT: @garyfleming
SYSTEM EXPERIMENT: FISHES AND TIME ▸ 10 minutes? ▸ 10
hours? ▸ 10 days? ▸ 10000 years? @garyfleming
ROT IN SOFTWARE @garyfleming
! @garyfleming
MULTI-FACETED @garyfleming
Problem KNOWING WHETHER YOUR SOFTWARE IS DEPLOYABLE @garyfleming
BRIEF INTRO TO CI/CD @garyfleming
CONTINUOUS INTEGRATION All developers/testers merge their code to a shared
mainline at least once a day. @garyfleming
CONTINUOUS INTEGRATION Related: ▸ Trunk-Based Development ▸ Feature Toggles @garyfleming
IF IT HURTS, DO IT MORE OFTEN. @garyfleming
CONTINUOUS DEPLOYMENT All changes go to production; safely, quickly, and
sustainably. @garyfleming
CONTINUOUS DEPLOYMENT Related: Blue-Green releases. @garyfleming
@garyfleming
Problem DEPENDENCY UPDATES @garyfleming
IF IT HURTS, DO IT MORE OFTEN. @garyfleming
IDEA UPDATE DEPENDENCIES DAILY @garyfleming
CONTINUOUS REGENERATION @garyfleming
CONTINUOUS REJUVENATION @garyfleming
EXPERIMENT: DEPENDENCY UPDATE DAILY ▸ Update ▸ Build and test
▸ Commit/Revert ▸ Commit causes CD to happen @garyfleming
OUTCOME: DEPENDENCY UPDATE DAILY Mostly success! ▸ Some Major Version
upgrades would need intervention, ▸ Temporary exclusions are important, @garyfleming
DEPENDENCY UPDATES: OTHER LANGUAGES ▸ Single versioned: Maven, Gradle, packages.config
e.g 5.4.1 3.0-ALPHA 1.3.2 @garyfleming
DEPENDENCY UPDATES: OTHER LANGUAGES ▸ Ranges and Lock files: gem/bundler,
most JS frameworks. >=5.4.1 3.* [3.7.1) @garyfleming
DEPENDENCY UPDATES: OTHER LANGUAGES ▸ Possibly open: pip, some JS
frameworks, gem some-dep a-different-dep @garyfleming
ALWAYS USE A LOCK FILE! Avoid "It works on my
machine" @garyfleming
RECENT DEVELOPMENTS ▸ Dependabot ▸ Atomist @garyfleming
GOOD TESTS ARE ESSENTIAL! @garyfleming
Problem RUNTIME ROT @garyfleming
ROT WILL SET IN ▸ JVM ▸ .NET ▸ NPM
version @garyfleming
THE CONTINUOUS NOW @garyfleming
INTERMEDIARY TOOLING ▸ Java -> Jabba ▸ Ruby -> RVM
▸ Node -> NVM ▸ Python -> Virtualenv (to some degree) @garyfleming
Problem STANDING SERVERS @garyfleming
Problem STANDING SERVERS @garyfleming
AVOID SNOWFLAKE SERVERS ▸ Hard to Reproduce ▸ Hard to
Modify ▸ Require manual processes, auditing, and docs. @garyfleming
IF IT HURTS, DO IT MORE OFTEN. @garyfleming
INFRASTRUCTURE AS CODE ▸ Chef/Puppet/Ansible ▸ Terraform ▸ Containerisation ▸
Various cloud toolkits @garyfleming
ENGINEERING PRACTICE ▸ Daily Deletion ▸ Chaos Engineering ▸ Dev
Laptop Wipes @garyfleming
CAUTION: TAKE THE UPDATES @garyfleming
Problem LANGUISHING LANGUAGES @garyfleming
Problem LANGUISHING LANGUAGES @garyfleming
@garyfleming
AVOIDING OBSOLESCENCE ▸ Move to new versions, ▸ Cautiously embrace
new languages, ▸ Design language agnostic APIs @garyfleming
DESTROY YOUR MICROSERVICES @garyfleming
Problem PEOPLE COME AND GO. @garyfleming
Problem PEOPLE COME AND GO. @garyfleming
IF IT HURTS, DO IT MORE OFTEN. @garyfleming
People Prepping RETROS @garyfleming
People Prepping DOMAIN KNOWLEDGE ▸ User Story Maps ▸ Example
mapping @garyfleming
People Prepping STAFF LIQUIDITY MATRICES @garyfleming
@garyfleming
People Prepping BIGGER CHANGES @garyfleming
EVERYTHING IS ROTTING... @garyfleming
...YOU CAN GET BETTER @garyfleming
THANK YOU @GARYFLEMING @garyfleming