One thing I particularly appreciate about this paper (thank you for pointing me at it!) is the resuscitation (in Section 3) of the old notion of
change-proneness. I'd somehow missed this rationale for our modern software engineering mileu, obsessed with libraries, commandline flags and configuration languages. Even though I've been reading the literature for decades, I came to it decades after the reasons had gotten enshrined and taken for granted:
• Changes to software are costly
• Therefore make software less change-prone
• Hence SOLID, encapsulation, etc., etc.
It's worth revisiting this argument, though. We've now had decades demonstrating that software never stops changing. Avoiding changes feels increasingly like a fool's errand. Also, once you
have to make
some change, we have lots of practices for reducing the cost of changes: tests, version control, CI. Is it really worth putting change-proneness on the pedestal we do, to the extent that
all our best practice is focused on a risk we already have decent ways to mitigate? Perhaps it's time to just change the code (
https://catern.com/change_code.html)