202206051639 RGM development
Rube-Goldberg Development is a term I’ve come up with to describe the trial and error development that poorly crafted systems often force upon us or result in.
In RGM development, we build one step at a time, requiring perfect synchronicity between each moving piece and acquiring that synchronicity only through tedious trial and error. Then, we add another step to the chain or pile.
This works to a point, but a) is tedious, time consuming, and error prone and b) will completely fall down when faced with change.
Imagine a Rube Goldberg machine built with a specific marble that will run its length. If we swap that marble for a different one with different weight, drag, or coefficient of friction, the machine won’t work. The only option is to rework the whole machine for the new constraints, going through the whole trial and error process again.
Similarly if you wanted something more drastic like a second machine or one that works with a bowling ball, it’s almost pointless to talk about similarities with our machine because there will be many more differences than things that work.
Avoid RGM development because it results in brittle, rigid, and unreliable systems, wasted effort, and inevitable large-scale changes or rewrites in order to reclaim the system (202109251102 Reclaiming software systems). But also be 202206112125 Zen in the face of programming because even the best written 202205131318 Software only supports one order of magnitude.
#thread Is this equivalent to "coding by coincidence" in 202307241042 The Pragmatic Programmer?