Episode 8: Clean Room Development
This one’s all about the music. What if you had to rewrite your software after every release?
In This Episode:
- The conceptual difficulties of other peoples' code, even when those other people are you.
- Legacy code and your own conceptual traps.
- Legacy code and demon possession.
- Legacy code and multiple personality disorder.
- What if you have to rewrite your code for each fix or deployment?
- “Write a new version of the code, minus the bug.”
- Lego oriented programming
- Binary vs texty interop
- ClassCastException vs sloppy parsers.
- “No, no. All shall match!”
- Log it and move on.
- Loosely coupled components vs statically-typed messages.
- The freedom to write crap code.
- The side-tracking concerns of the typical code review.
- “Okay, I’m having a connection.”
- Guitar!
- Writing code as performance.
- Improvisation, instruments, scores.
- Rewrite as process is kinda like jazz improvisation over a chart of chord changes, right?
- Sax might work better than a symphony orchestra when you need to improvise.
- My secret weapon is Clojure.
- Banjo!
- “And then I come in with my ukulele and just get upset.”
- Ukulele!
- Guard rail programming (driving by unit tests).
- The interface docs are the app, not the code, not the implementation.
- The transitive nature of object oriented spaghetti
- How to decouple? Look to the data.
- State data vs event data (moments lost like tears in the rain vs the eternal).
- Injecting your dependencies. Is that a euphemism?
- Turing complete config language. No!
- “All you get is English.”
- If all you have to spec components is English, components have got to be simple.
- Built-in monitoring over extensive testing, the app’s business logic is to test itself?
- Ultimately, design (the score or the changes) is king.
- Design is “how it works”.
- “I was hoping you were going to say something brilliant. Uh….”
- Nexi of information.
- What’s the difference between technical debt (bankruptcy) and not having the source code?
- “Technical debt is worse than having to rewrite from scratch every time.”
- “Whenever ‘c’ came along, I played ‘c’. Then I was silent.”
- The first thing to jettison with multiple rewrites are the pointless abstractions.
- Improvisation + experience.
- On-boarding new devs via rewriting.
- “The knife dropped itself from my hands.”
- “The code went off the deep end.”
- “We chained ourselves to the technical debt.”
- “The business didn’t let us fix it.”