Slide 1

Slide 1 text

@arthurdoler.com Arthur Doler Resources: Boring details about me are at https://arthurdoler.com Arthur Doler Resources: @arthurdoler.com https://bit.ly/art-digging-into-the-matrix Boring details about me are at https://arthurdoler.com

Slide 2

Slide 2 text

@arthurdoler.com Why hello there.

Slide 3

Slide 3 text

@arthurdoler.com When people ask what I do I always just tell them I solve problems

Slide 4

Slide 4 text

@arthurdoler.com @arthurdoler.com It was dark a lot of the time and there were spiders

Slide 5

Slide 5 text

@arthurdoler.com An artifact buried under centuries of dirt!

Slide 6

Slide 6 text

@arthurdoler.com Even if it seems like it wasn’t, sometimes.

Slide 7

Slide 7 text

@arthurdoler.com OH MY GOD HE’S HERE, WILL HE SIGN MY CITATION?!

Slide 8

Slide 8 text

@arthurdoler.com Use of a whip in a workplace setting not necessarily recommended.

Slide 9

Slide 9 text

@arthurdoler.com Big shoutout to all my Ea-Nasir fans in the audience!

Slide 10

Slide 10 text

@arthurdoler.com The crossover event absolutely nobody expected or wanted

Slide 11

Slide 11 text

@arthurdoler.com @arthurdoler.com Well, this is going to be a problem.

Slide 12

Slide 12 text

@arthurdoler.com @arthurdoler.com Operator, we need an exit now!

Slide 13

Slide 13 text

@arthurdoler.com I thought up this joke about ten seconds after I conceived of this talk.

Slide 14

Slide 14 text

@arthurdoler.com @arthurdoler.com “Failure in pipeline job ‘Build-Pot’ – Boulder consequences engaged”

Slide 15

Slide 15 text

@arthurdoler.com Mindset – Curiosity, Empathy, and Chesterton’s Fence vs the Monkey Ladder Surveying – Exploring the Hourglass Excavation – The History and the Strata Analysis – Writing the Historical Play Progression – What’s Next? How to practice code archaeology at work So let’s crack in!

Slide 16

Slide 16 text

@arthurdoler.com It’s frustrating that there always seems to be work before the work.

Slide 17

Slide 17 text

@arthurdoler.com And a vast middle between the two endpoints

Slide 18

Slide 18 text

@arthurdoler.com This is also the name of my Extremecore Prog Rock band

Slide 19

Slide 19 text

@arthurdoler.com @arthurdoler.com Not necessarily advocating for all of Chesterton’s views here…

Slide 20

Slide 20 text

@arthurdoler.com Imagine being the facilities worker who gets this request

Slide 21

Slide 21 text

@arthurdoler.com Don't you monkey with the monkey

Slide 22

Slide 22 text

@arthurdoler.com Don’t you know you’re gonna / swap the monkey

Slide 23

Slide 23 text

@arthurdoler.com Both views are valid, both views are also likely wrong.

Slide 24

Slide 24 text

@arthurdoler.com Give me fuel, give me fire, give me that which I desire

Slide 25

Slide 25 text

@arthurdoler.com Next refueling station: 1.5 years

Slide 26

Slide 26 text

@arthurdoler.com Who wrote it? Why did they do it? Why did they do it the way they did it? What’s the story of the writing of the code? What’s the story of the code after it was written? If you can get accurate, concrete answers to these, you will own the world

Slide 27

Slide 27 text

@arthurdoler.com With a firehose and a tarantula. Why, how do you cultivate it?

Slide 28

Slide 28 text

@arthurdoler.com “And don’t get me started on binocular vs monocular vision…”

Slide 29

Slide 29 text

@arthurdoler.com Probably triggering for the parents in the audience. Sorry.

Slide 30

Slide 30 text

@arthurdoler.com @arthurdoler.com This little light of mine… I’m gonna let it shine…

Slide 31

Slide 31 text

@arthurdoler.com Not this thing again…

Slide 32

Slide 32 text

@arthurdoler.com Gawronski, 2004

Slide 33

Slide 33 text

@arthurdoler.com @arthurdoler.com Sometimes I get mad about physical architecture, too

Slide 34

Slide 34 text

@arthurdoler.com “Shoshin”, if you were curious about the term

Slide 35

Slide 35 text

@arthurdoler.com “Regardless of what we discover, we understand and truly believe that everyone did the best job they could, given what they knew at the time, their skills and abilities, the resources available, and the situation at hand.” — Agile Prime Directive Kerth, Project Retrospectives: A Handbook for Team Reviews, 2001

Slide 36

Slide 36 text

@arthurdoler.com Talk about these at parties and watch the fun fail to happen

Slide 37

Slide 37 text

@arthurdoler.com IF YOU WANT TO BOOST YOUR EMPATHY, YOU CAN START WITH GRATITUDE https://greatergood.berkeley.edu/article/item/tips_for_keeping_a_gratitude_journal

Slide 38

Slide 38 text

@arthurdoler.com You’ve got to have pre-built trust between you for this to work well.

Slide 39

Slide 39 text

@arthurdoler.com It’s nice when you stumble on perfect examples for your talk in the wild.

Slide 40

Slide 40 text

@arthurdoler.com Ready for ACTION

Slide 41

Slide 41 text

@arthurdoler.com Oh no, the consequences of MY PAST ACTIONS!

Slide 42

Slide 42 text

@arthurdoler.com Taking an assessment of the current reality

Slide 43

Slide 43 text

@arthurdoler.com Make sure to use trepanation only under the care of a trained professional.

Slide 44

Slide 44 text

@arthurdoler.com YOU ARE GOING TO NEED ABSTRACTIONS Technically you need them for everything, but especially code.

Slide 45

Slide 45 text

@arthurdoler.com These aren’t individual and concrete steps, either.

Slide 46

Slide 46 text

@arthurdoler.com Like sand through the hourglass, these are the days of our system.

Slide 47

Slide 47 text

@arthurdoler.com “They use it because they have to” is still a valid reason.

Slide 48

Slide 48 text

@arthurdoler.com What was it created to achieve? What types of humans use it? What are their roles? What are the goals of each role that uses the system? Wait a sec, this looks familiar…

Slide 49

Slide 49 text

@arthurdoler.com *cookie offer not valid anywhere except Equatorial Guinea.

Slide 50

Slide 50 text

@arthurdoler.com *cue the laugh track*

Slide 51

Slide 51 text

@arthurdoler.com No cookie for you!

Slide 52

Slide 52 text

@arthurdoler.com Just Enough Research, Erika Hall

Slide 53

Slide 53 text

@arthurdoler.com You can skip this step and jump to the next, but it’s a lot harder.

Slide 54

Slide 54 text

@arthurdoler.com What are its parts? Where do they run? What are they written in/with/on? Which parts talk with which other parts? How are those parts built? How are they delivered? More questions than average for one of my talks.

Slide 55

Slide 55 text

@arthurdoler.com Do not think about this picture too long, it’s not good for your brain.

Slide 56

Slide 56 text

@arthurdoler.com This is the step where things will be the clearest.

Slide 57

Slide 57 text

@arthurdoler.com The traditional Ball o’ Mud…

Slide 58

Slide 58 text

@arthurdoler.com … meets the traditional solution for the Gordian Knot.

Slide 59

Slide 59 text

@arthurdoler.com Pick one that’s close to the central reason for the system, if you can.

Slide 60

Slide 60 text

@arthurdoler.com Even figuring the starting place out can be a challenge.

Slide 61

Slide 61 text

@arthurdoler.com @arthurdoler.com “Oh, ah… Just one more thing.”

Slide 62

Slide 62 text

@arthurdoler.com Lesson 1: Chunking Lesson 2: Refactor and document as you go Lesson 3: Replace unfamiliar language construct There are hours worth of content in this book alone!

Slide 63

Slide 63 text

@arthurdoler.com Hermans, 2021

Slide 64

Slide 64 text

@arthurdoler.com Hermans, 2021

Slide 65

Slide 65 text

@arthurdoler.com Hermans, 2021

Slide 66

Slide 66 text

@arthurdoler.com Lesson 1: Chunking Lesson 2: Refactor and document as you go Lesson 3: Replace unfamiliar language constructs Make sure you do the exercises. Don’t just read it.

Slide 67

Slide 67 text

@arthurdoler.com @arthurdoler.com “I don’t even see the code. All I see is box, arrow, box, arrow, cylinder…”

Slide 68

Slide 68 text

@arthurdoler.com Yes, this particular example starts with a custom service runner.

Slide 69

Slide 69 text

@arthurdoler.com When you pay attention to the layers as you move, you see a lot of them.

Slide 70

Slide 70 text

@arthurdoler.com Into the bigger mess

Slide 71

Slide 71 text

@arthurdoler.com Still more exciting than most Family Circus strips.

Slide 72

Slide 72 text

@arthurdoler.com You can represent them as text, but I prefer the visual touch.

Slide 73

Slide 73 text

@arthurdoler.com https://dev.to/conw_y/visualising-execution-flows-59e7

Slide 74

Slide 74 text

@arthurdoler.com And then the biggest mess.

Slide 75

Slide 75 text

@arthurdoler.com If you do get the chance to watch people use your software, TAKE IT!!

Slide 76

Slide 76 text

@arthurdoler.com A good question!

Slide 77

Slide 77 text

@arthurdoler.com Code cannot know its own purpose.

Slide 78

Slide 78 text

@arthurdoler.com @arthurdoler.com There’s a reason tests are sometimes structured with this language.

Slide 79

Slide 79 text

@arthurdoler.com But there’s more to do… we need to go even deeper.

Slide 80

Slide 80 text

@arthurdoler.com Now let’s dig into the past!

Slide 81

Slide 81 text

@arthurdoler.com The colors of the Ancients

Slide 82

Slide 82 text

@arthurdoler.com Hard work and lots of it, like usual.

Slide 83

Slide 83 text

@arthurdoler.com Let’s break this down.

Slide 84

Slide 84 text

@arthurdoler.com It may or may not be on actual scrolls.

Slide 85

Slide 85 text

@arthurdoler.com Documnaeiton of emial trasnactions.

Slide 86

Slide 86 text

@arthurdoler.com The book of Jira, chapter Keno, verse 1123.

Slide 87

Slide 87 text

@arthurdoler.com Collaboratively – (most) software isn’t a solo project.

Slide 88

Slide 88 text

@arthurdoler.com Serving humanity since we managed to invent language.

Slide 89

Slide 89 text

@arthurdoler.com @arthurdoler.com Being a greybeard is a state of mind

Slide 90

Slide 90 text

@arthurdoler.com Check out Active Listening as a toolkit for improving your hearing

Slide 91

Slide 91 text

@arthurdoler.com “Probably shouldn’t ask about the switch to F# from Java, then.”

Slide 92

Slide 92 text

@arthurdoler.com Whatever your particular flavor happens to be

Slide 93

Slide 93 text

@arthurdoler.com @arthurdoler.com Mondays, am I right?! You know I’m right.

Slide 94

Slide 94 text

@arthurdoler.com Look, I do real work sometimes!

Slide 95

Slide 95 text

@arthurdoler.com VISUALIZATION TOOLS CAN LET YOU EASILY EXPLORE THE CHANGES OVER TIME I’m a better developer on the CLI but a better detective with a GUI.

Slide 96

Slide 96 text

@arthurdoler.com https://martinfowler.com/articles/branching-patterns.html

Slide 97

Slide 97 text

@arthurdoler.com Octopus merges are real but they’re not this scary.

Slide 98

Slide 98 text

@arthurdoler.com Hate to be the one to tell you this, but externalities affect your codebase

Slide 99

Slide 99 text

@arthurdoler.com They’re still detectable even once they’re gone.

Slide 100

Slide 100 text

@arthurdoler.com Pay attention to how a tool tells you to use it, and you can see its effects.

Slide 101

Slide 101 text

@arthurdoler.com Trying to build a map for the chaos

Slide 102

Slide 102 text

@arthurdoler.com ASP / VB.NET Backbone / Marionette Javascript / React / Redux Typescript / React / React-Query Wake up, new version of the four humours just dropped

Slide 103

Slide 103 text

@arthurdoler.com This slide suggests there is a Devonian Extinction of frontend tooling

Slide 104

Slide 104 text

@arthurdoler.com My friend, that is too many lenses

Slide 105

Slide 105 text

@arthurdoler.com Taleb, 2007

Slide 106

Slide 106 text

@arthurdoler.com The source here is every other talk I’ve given.

Slide 107

Slide 107 text

@arthurdoler.com Do not waste time trying to find the absolute truth!

Slide 108

Slide 108 text

@arthurdoler.com How much time do you have?

Slide 109

Slide 109 text

@arthurdoler.com A plan for analyzing analysis.

Slide 110

Slide 110 text

@arthurdoler.com yorick.setStatus(“Poor”).alas();

Slide 111

Slide 111 text

@arthurdoler.com You often get the shape of people before you get the details.

Slide 112

Slide 112 text

@arthurdoler.com Claire needs a lot of whiteboards to work.

Slide 113

Slide 113 text

@arthurdoler.com “Get ‘Er Done” Howard, as he’s more commonly known

Slide 114

Slide 114 text

@arthurdoler.com Spoilers: a lot of your opinions on programming are tastes, not facts

Slide 115

Slide 115 text

@arthurdoler.com The mysterious “BA Unknown”

Slide 116

Slide 116 text

@arthurdoler.com Weathervanes – decorating buildings since 48 BCE.

Slide 117

Slide 117 text

@arthurdoler.com @arthurdoler.com You ever have a day at work that feels like this?

Slide 118

Slide 118 text

@arthurdoler.com What resources did the team have? What resources did they lack? What strata is the code from? What now-commonplace solutions and processes didn’t exist then? What were the organizational rules and processes? What other projects were going on? More questions for your dollar than any other talk!

Slide 119

Slide 119 text

@arthurdoler.com We were just banging rocks together back then…

Slide 120

Slide 120 text

@arthurdoler.com Error, no function Compare exists which takes parameters IApple, IOrange

Slide 121

Slide 121 text

@arthurdoler.com The Economist, 1955

Slide 122

Slide 122 text

@arthurdoler.com @arthurdoler.com My main question is where you found a broom in the desert.

Slide 123

Slide 123 text

@arthurdoler.com @arthurdoler.com “Your resume says you’re really good at fishbridges…”

Slide 124

Slide 124 text

@arthurdoler.com WE ALSO CONFUSE FAMILIARITY WITH CORRECTNESS OR RIGHTNESS. Ashcraft, 2006

Slide 125

Slide 125 text

@arthurdoler.com It’s also a valuable process – it saves us cognitive energy.

Slide 126

Slide 126 text

@arthurdoler.com It’s important to

Slide 127

Slide 127 text

@arthurdoler.com It’s important to remain empathetic throughout

Slide 128

Slide 128 text

@arthurdoler.com It’s important to remain empathetic throughout this whole process.

Slide 129

Slide 129 text

@arthurdoler.com Crystal balls usually give answers, not questions, but hey

Slide 130

Slide 130 text

@arthurdoler.com “It’s a Sumerian Hidey-Pot. Common around 2900 BCE.”

Slide 131

Slide 131 text

@arthurdoler.com @arthurdoler.com The ol’ brain’s probably getting a bit crowded at this point…

Slide 132

Slide 132 text

@arthurdoler.com Where do we go from here? Now that all of the children are grown up?

Slide 133

Slide 133 text

@arthurdoler.com You gotta do something to keep busy at work, right?

Slide 134

Slide 134 text

@arthurdoler.com Don’t let the methodology become your end goal.

Slide 135

Slide 135 text

@arthurdoler.com ONCE YOU UNDERSTAND WHY THE CODE IS THE WAY IT IS… IT’S EASIER TO UNDERSTAND HOW TO CHANGE IT! This is it, this is the lesson it’s taken me decades to learn well.

Slide 136

Slide 136 text

@arthurdoler.com If the previous code was constrained, are those constraints gone? If the code was affected by similarity to previous code, should it have been similar? Was the person’s intent incorrect? What strata is the code from? Without all the previous work, you’ll be totally guessing here.

Slide 137

Slide 137 text

@arthurdoler.com Without the story, you’re working blind.

Slide 138

Slide 138 text

@arthurdoler.com Take that, AbstractSingletonFactoryBeanFactory!

Slide 139

Slide 139 text

@arthurdoler.com Refactoring is a surprisingly deep topic and one I enjoy reading about. Emily Bache’s Refactoring Guided Learning – https://www.youtube.com/watch?v=K7xSsNpeM8I Refactoring – Martin Fowler Working Effectively with Legacy Code – Michael C Feathers Refactoring to Patterns – Joshua Kerievsky

Slide 140

Slide 140 text

@arthurdoler.com ALSO – WRITE DOWN WHAT YOU’VE FIGURED OUT!!!!! Not going to let this one go.

Slide 141

Slide 141 text

@arthurdoler.com Or whatever day you’re at work next.

Slide 142

Slide 142 text

@arthurdoler.com “Did they pass out any ink?” “Of course not, don’t be silly.”

Slide 143

Slide 143 text

@arthurdoler.com You’re going to slip up sometimes, but that’s fine.

Slide 144

Slide 144 text

@arthurdoler.com Breaking it down makes it easier to believe you can get it all done, too.

Slide 145

Slide 145 text

@arthurdoler.com @arthurdoler.com I should sell these to add to actual planning poker decks.

Slide 146

Slide 146 text

@arthurdoler.com It’s about time. Whew!

Slide 147

Slide 147 text

@arthurdoler.com Mindset Surveying Extraction Analysis Progression Or “MSEAP” for short, I guess?

Slide 148

Slide 148 text

@arthurdoler.com MINDSET •Remember Chesterton’s Fence and the Monkey Ladder, and start closer to Chesterton’s Fence. •Build your curiosity daily. •Practice empathy towards those who wrote the code. Start with your internals…

Slide 149

Slide 149 text

@arthurdoler.com SURVEYING •Start with one user goal and work through the Hourglass: •The Humans, •The System, •The Code, •…and back up. …move on to the state of the world…

Slide 150

Slide 150 text

@arthurdoler.com EXCAVATION •Find the forces that shaped the code’s construction. •Look through all the histories available to you. •…and opinionated external libraries, too. •Establish strata when the System’s long-lived enough … dig back into the past…

Slide 151

Slide 151 text

@arthurdoler.com ANALYSIS •Flesh out the characters! •Find the backstory! •Then write the play. …find the story…

Slide 152

Slide 152 text

@arthurdoler.com PROGRESSION •Recontextualize based on your own goal •Should you rewrite or just refactor? •Use the story to guide your next steps •Write down what you found …and move forward.

Slide 153

Slide 153 text

@arthurdoler.com We’ve all got a lot of pre-confirming evidence in our priors.

Slide 154

Slide 154 text

@arthurdoler.com @arthurdoler.com I make zero guarantees about boulders

Slide 155

Slide 155 text

@arthurdoler.com The power is yours!

Slide 156

Slide 156 text

@arthurdoler.com Arthur Doler My website is probably still https://arthurdoler.com Resources: THANKS FOR LISTENING! https://bit.ly/art-digging-into-the-matrix