Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Fight Code Rot Using Continuous Improvement
Search
garyfleming
August 22, 2019
Programming
0
810
Fight Code Rot Using Continuous Improvement
garyfleming
August 22, 2019
Tweet
Share
More Decks by garyfleming
See All by garyfleming
User Story Mapping Workshop
garyfleming
1
45
TDD for Testers
garyfleming
1
110
TDD Is My Shame
garyfleming
0
300
Continuous Testing
garyfleming
0
85
Better User Stories Through Example Mapping
garyfleming
0
99
Fighting Continuous Entropy
garyfleming
0
93
beyond-frameworks.pdf
garyfleming
1
42
The Board Whisperer
garyfleming
0
1.1k
APIs on the Scale of Decades
garyfleming
0
120
Other Decks in Programming
See All in Programming
「コードは上から下へ読むのが一番」と思った時に、思い出してほしい話
panda728
PRO
38
26k
tsgolintはいかにしてtypescript-goの非公開APIを呼び出しているのか
syumai
6
2.2k
Github Copilotのチャット履歴ビューワーを作りました~WPF、dotnet10もあるよ~ #clrh111
katsuyuzu
0
110
React Native New Architecture 移行実践報告
taminif
1
150
AIコードレビューがチームの"文脈"を 読めるようになるまで
marutaku
0
350
Rediscover the Console - SymfonyCon Amsterdam 2025
chalasr
2
160
AWS CDKの推しポイントN選
akihisaikeda
1
240
【Streamlit x Snowflake】データ基盤からアプリ開発・AI活用まで、すべてをSnowflake内で実現
ayumu_yamaguchi
1
120
ゲームの物理 剛体編
fadis
0
350
DSPy Meetup Tokyo #1 - はじめてのDSPy
masahiro_nishimi
1
170
認証・認可の基本を学ぼう前編
kouyuume
0
200
これだけで丸わかり!LangChain v1.0 アップデートまとめ
os1ma
6
1.8k
Featured
See All Featured
Building Adaptive Systems
keathley
44
2.9k
[RailsConf 2023] Rails as a piece of cake
palkan
58
6.2k
Music & Morning Musume
bryan
46
7k
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Invisible Side of Design
smashingmag
302
51k
GraphQLとの向き合い方2022年版
quramy
50
14k
Six Lessons from altMBA
skipperchong
29
4.1k
The Straight Up "How To Draw Better" Workshop
denniskardys
239
140k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
141
34k
StorybookのUI Testing Handbookを読んだ
zakiyama
31
6.4k
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.2k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
61k
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