layout: true name: titleslide class: center, middle
.footnote[ ###
@schmonz
####
#hackerkegeln
[schmonz.com/talk
/2018-nuernberg](https://schmonz.com/talk/2018-nuernberg/) ] --- layout: true name: footnotelinks .left-column[
] .footnote[ ###
@schmonz
####
#hackerkegeln
[schmonz.com/talk
/2018-nuernberg](https://schmonz.com/talk/2018-nuernberg/) ] --- template: titleslide # Strangle Your Legacy Code
## Amitai Schleier ### 2018/07/12 ??? 1. Press 'C' to clone and move it to projector 2. Press 'P' to show these here presenter notes ### 75 minutes When you're mired in an ancient codebase that makes refactoring risky and expensive, how do you clear a path to continued delivery? According to the old saw, the best time to plant a tree is 20 years ago, and the next best time is today. But if you already have a gnarled old source tree, an old saw is the wrong tool. Instead, plant a Strangler: a pattern for preserving your software investment by arranging for new functionality to grow in a new codebase. As a mob, we'll take a quick look at a Strangler, then test-drive new features into it. Don't know what to try next? Take the keyboard. Got an idea? Step away and talk someone else through it. You'll leave with a powerful strategy for extending the useful life of working, valuable software -- *especially* when it's hard to change. We'll also send you home with a free bonus development practice to accelerate your team's learning. For a limited time only! ### How to introduce the problem - Responsible for production email service - Keep having to extend it (business, regulatory requirements) - Look at ofmipd code - On my 20% time, I had an idea for how to make development easier, cheaper, safer - Run ofmipd - Run ofmipd behind env AUTHUP_USER=tim fixsmtpio - Note the differences? - We're going to do the same kind of thing, in Python - Let's run it and say "WORD UP" to the server - See how that works - Okay, let's make a new test pass --- layout: false template: footnotelinks .right-column[ # Goals For This Session ## 1. Introduction to Strangler ## 2. Develop in a real Strangler ## 3. Collect learnings ] --- .right-column[ # 0. Code of Conduct ## [softwerkskammer.org/wiki
/diversity/index](https://www.softwerkskammer.org/wiki/diversity/index) ## Remind ourselves how we want to behave ## Like TDD, declaring our intentions helps us live up to them ] --- .right-column[ # 1. Introduction to Strangler (1/2) > "One of the natural wonders of [the Queensland coast] are the huge > strangler vines. They seed in the upper branches of a fig tree and > gradually work their way down the tree until they root in the soil. > Over many years they grow into fantastic and beautiful shapes, > meanwhile strangling and killing the tree that was their host." > --[Martin Fowler](https://www.martinfowler.com/bliki/StranglerFigApplication.html) ] --- .right-column[ # 1. Introduction to Strangler (2/2) ## Alternative to Big Rewrite ## Mitigates risk to business ## Likely reduces cost to business ] --- .right-column[ # 2. Develop in a real Strangler ## We're responsible for AcmeCo's email service ## C code from 1998 ## We like it, and have invested a lot in it ## But each new feature is expensive to build ## Say goodbye to these slides! [github.com/schmonz/smtp-strangler](https://github.com/schmonz/smtp-strangler) ] --- .right-column[ # 3. Collect learnings - SMTP is old and strange - Having a living cheat sheet around helps a lot - Challenging to focus on projector, navigator, mob, laptop at the same time - Strangler is a pattern that can help a lot with legacy problems - How do we control the risk of the initial Strangler deployment? - How do we apply this to a large codebase with many architectures? - How would we change complex behavior of SMTP verbs that already exist? - Another application of Strangler: instrument usage, delete dead code - Looks like a big Decorator (or the world's largest Adapter, or...) - Another application: failover - This wasn't exactly mobbing, with Amitai as permanent Navigator ] --- .right-column[ # References - [SMTP Strangler](https://github.com/schmonz/smtp-strangler) (github.com) - [Strangler Application](https://www.martinfowler.com/bliki/StranglerApplication.html) (martinfowler.com) - [Mob Programming Guidebook](https://leanpub.com/mobprogrammingguidebook) (leanpub.com) - [Mob Programming RPG](https://github.com/willemlarsen/mobprogrammingrpg) (github.com) - [Coding Tour Summer 2018](https://schmonz.com/talk/2018-tour/) (schmonz.com) ] --- .right-column[ # Agile in 3 Minutes ##
agilein3minut.es
> "Before Agile in 3 Minutes, I couldn't get my team to have a > conversation about important topics. Now I have to timebox it."
-
8: Care
-
32: Mob
] --- .right-column[ # Agile in 3 Minutes: The Book ## [leanpub.com/agilein3minutes
/c/hackerkegeln18](https://leanpub.com/agilein3minutes/c/hackerkegeln18) The simplest _essays_ that could possibly work. Lowest allowable price on Leanpub, today! ] --- .right-column[ # Let's Keep Going ## [announce-subscribe@schmonz.com](mailto:announce-subscribe@schmonz.com) Amitai's mailing list: these slides, future talks, podcasts, blog posts. ## [latentagility.com](https://latentagility.com) Does your company deliver valuable software? Maybe Amitai can help. ] --- template: titleslide # Strangle Your Legacy Code
## Amitai Schleier ## [latentagility.com](https://latentagility.com)