I've been trying to push the phrase "Design for deletion", as a contrast to designing for a flexibility or extensibility.
I used to try to predict far-ahead feature or architectural needs, but more often than not they either never materialized or appeared with some unforseen incompatible quirk.
Instead, I want to ensure that whatever I write can be ruthlessly ripped out and replaced with a minimum of pain.
It's not quite the same as a blanket priority on decoupling code, since statically-checkable compile-time coupling Isn't the big problem, and might even be preferred over runtime plugin architecture astronautics.
I've been trying to push the phrase "Design for deletion", as a contrast to designing for a flexibility or extensibility.
I used to try to predict far-ahead feature or architectural needs, but more often than not they either never materialized or appeared with some unforseen incompatible quirk.
Instead, I want to ensure that whatever I write can be ruthlessly ripped out and replaced with a minimum of pain.
It's not quite the same as a blanket priority on decoupling code, since statically-checkable compile-time coupling Isn't the big problem, and might even be preferred over runtime plugin architecture astronautics.