Flipping the Bozo Bit
Keith Irwin & Christoph Neumann

Episode 8: Clean Room Development

2013-07-01

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 improv over a chart of chord changes, right?
  • Sax might work better than a symphony orchestra when you need to improv.
  • My secret weapon is Clojure.
  • Banjo!
  • “And then I come in with my ukelele and just get upset.”
  • Ukelele!
  • 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 euphamism?
  • Turing complete config langage. 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.
  • Onboarding 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.”