More self-containedness, less code sharing
There’s this idea I’ve been encountering in different forms, that I really think is good. Here are some links on that.
I think it was at the Javaland conference in early 2014, I believe in Stefan Tilkov’s talk, that I first heard of not building for reuse, but building for replacement. The idea is to have modules that can be easily replaced with better or different versions, instead of many interdependent modules effectively forming one big entangled system.
Martin Fowler has a great description of an architecture with a similar goal.
"Don't use layers as top level modules in a complex application, instead make your top level modules be full-stack." martinfowler.com/bliki/Presenta…—
Fabian Steeg (@fsteeg) August 29, 2015
It’s one of these cases where what seems to be conventional programming wisdom is turned upside down: we all learn reuse is good, we think reuse is the way to modular software. It’s not always true.
We think we’re future proofing software by lots of reuse and abstraction, but we’re doing it wrong. We need to take advantage of what software is like, and make it easy to change.
To close the circle, Stafan Tilkov recently posted a great description of the architecture mentioned above, giving it a new name: Self-Contained Systems. Part of these Self-Contained Systems is that to avoid tight coupling, they share no business code.
At hbz, we’re trying to build our software according to these ideas.