I caught this tweet by Ruth Malan yesterday. It’s a wonderful reminder about the tension between continuous evolution and product instability in software development.

But like putting “product stability” in tension with “continuous evolution” is a very (relevant) “today” recognition. For example, if we keep changing a complex dashboard UI, we frustrate users (perpetual learning curve/adaptation pushed onto them) and it may even be unsafe…

Are you having a Val Garland DING DONG moment? It truly is a daily battle attempting to sit comfortably in this oversized chair, right? Like, certainly not a quotidian gracelessness I was prepared for at the start of my career. Back then I imagined long-lived codebases more manicured and predictable than the embryonic Rails app I would find myself working on in my first software job. Presently I’m working in a legacy codebase (like 10+ years running, ancient in software years), and I’m not really sure if it’s much more stable than that 3 year-old startup experiment. Sure, there are ignorable fossilized bits in corner tar pits that have run largely unattended for years; and quite elegant code abounds; it’s a mixed bag. Nonetheless, I often find myself in labored negotiation with the code in-between those ends, in that muddy mix; code that’s branched and maundered, complected semi-recently, as well as pubescent new growth. We might call this code pre-crude pressurized compounds with some new raw material shoveled in – does code storm, form, norm?1 These are tension points where I struggle the most. There are just enough layers of abstraction, code reuse, shared responsibility, etc… – tensile strength – that don’t make changing the code easy. Any change could destabilize things, like expose bugs, ie break existing functionality.

The day-to-day discipline of working with legacy code is wiggling in tension, but also support all existing behavior. jessitron quotes in a recent blog:

Every new feature comes with the invisible requirement: “and everything else still works.”

This is a wild task in pre-crude places!

[1]: en.wikipedia.org/wiki/Tuckman's_stages_of_group_development