layout: true name: titleslide class: center, middle
.footnote[ ###
@schmonz
####
#OOPdigital
[schmonz.com/talk
/2021-oop](https://schmonz.com/talk/2021-oop/) ] --- layout: true name: footnotelinks .left-column[
] .footnote[ ###
@schmonz
####
#OOPdigital
[schmonz.com/talk
/2021-oop](https://schmonz.com/talk/2021-oop/) ] --- template: titleslide # Strangle Your Legacy Code
## Amitai Schleier ??? 1. Press 'C' to clone and move it to projector 2. Press 'P' to show these here presenter notes #### 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 StranglerFig ## 2. Develop in a real StranglerFig ## 3. Collect learnings ] --- .right-column[ # 0. Code of Conduct ## [oop-konferenz.de/oop2021
/english
/service
/code-of-conduct.html](https://www.oop-konferenz.de/oop2021/english/service/code-of-conduct.html) ## Remind ourselves how we want to behave ## Like TDD, declaring our intentions helps us live up to them ] --- .right-column[ # 1. Introduction to StranglerFig (1/2) > "One of the natural wonders of [the Queensland coast] are the huge > strangler figs. 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 StranglerFig (2/2) ## Alternative to Big Rewrite ## Mitigates risk to business ## Likely reduces cost to business ] --- .right-column[ # 2. Develop in a real StranglerFig (1/2) ## 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 ] --- .right-column[ # 2. Develop in a real StranglerFig (2/2) ## Mob/Ensemble Programming: 1. Whole team, same problem, same computer 2. Think out loud, together 3. Driver, Navigator, rotate ] --- .right-column[ # 3. Collect learnings - What a mess! We don't know what the _new_ code does - An extra layer of onion - Use cases: - Could intend to eventually replace legacy, or just make most work easier - HTTP reverse proxy - Techniques: - Strangler is like a huge Adapter, or Decorator, or... - Either reuse persistence layer, or write an alternate layer and be very careful - Risks: - If you hack together too quickly, it's just more mess - As an additional layer, could create performance issues - As an additional layer, could complicate debugging - Might wind up duplicating internal state machine of original legacy code - Deployment might be coupled between strangler and original - Sometimes a feature can't be fixed in place, needs a Smaller Rewrite ] --- .right-column[ # More Info - [SMTP Strangler](https://github.com/schmonz/smtp-strangler/tree/oop2021) (github.com) - [Strangler Fig Application](https://www.martinfowler.com/bliki/StranglerFigApplication.html) (martinfowler.com) - [Legacy Code Rocks](https://www.legacycode.rocks) (legacycode.rocks) - [Mob Programming Guidebook](http://www.mobprogrammingguidebook.com) (mobprogrammingguidebook.com) - [Mob Programming RPG](https://github.com/willemlarsen/mobprogrammingrpg) (github.com) - [PubMob](http://pubmob.com) (pubmob.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/oop21](https://leanpub.com/agilein3minutes/c/oop21) The simplest _essays_ that could possibly work. Lowest allowable price on Leanpub, today! ] --- template: titleslide # Strangle Your Legacy Code
## [Amitai Schleier](https://latentagility.com)