This is not an ordinary post. Text will be minimum, I’ll just share a set of images.
The basics
Our codebase. Where everything is built on!
A building block. A coding part with specific functionality.
Basic structures
A feature built on the codebase, with some backend building blocks and a user interface at the top to provide an experience to the person interacting with the feature.
A set of features put close together to form something bigger, a product.
A backend heavy feature with a crappy user interface. Lots of building blocks are forming an ultra-robust base that is poorly served to the person using the feature.
A feature with an awesome user experience that is poorly supported from backend building blocks, could fall anytime!
Product structures
A basic product, where each feature is not interacting well with the rest features. Also, each feature is pointing in its own direction.
A product with a clear product vision, each feature is pointing in the same direction.
An awesome product with a clear vision and a great user experience. Features are aligned and transitioning from one feature to the next is smooth.
Extra?
Diving deeper, I found another good analogy. Please share your own!
Adding npm packages as building blocks of a feature. Many smaller parts with their own dependencies, the LEGO blocks above are not that stable.