Another human aspect of software design is slicing and chunking for understanding. To change software we need to understand it. To understand it we have to understand it in chunks (for example, figuring out which parts we can ignore for the moment). Making chunks is exactly the method of software design.
This tweet blew up today:
The goal of software design is to create chunks or slices that fit into a human mind. The software keeps growing but the human mind maxes out, so we have to keep chunking and slicing differently if we want to keep making changes.
Note the distinction between chunking and slicing.
Chunking is the containment hierarchy of elements—repos containing services containing modules containing…
Slicing goes across chunks—observability, recoverability, accessibility.
Sometimes changes to one will spill over to changes in the other.
When I said, “Software design is an exercise in human relationships,” I actually meant something quite different. I’ll get to that in future posts.
Making chunks is abstraction; abstraction is design. We are back in the 1950s. This is exactly how I sell "abstraction" to jaded intermediate programmers. "Remaining distracted by considering all the details all the time actively frustrates your progress. It's what makes you want to throw it all away and start again."
Hi Kent, things that pop in my mind:
- we need to chunk and slice because our mind is capable of keeping only 5 ± 2 "things" in memory
- because usually our application comprehend more that 5 ± 2 lines of code, or things, we need to group them so that we can substitute in our mind a group of lines of code with a single method name
- in order for those abstraction to completely substitute the "inner parts" in our mind the abstractions need to be well sealed and makes sense to us
- leaking abstraction create problems because we cannot really substitute the inner parts with the abstraction in our mind, because we also need to keep in mind some details that leaked off from the abstraction (like remembering that we are doing something on the db or over the network).
Chunking to me resonate like bounded context or domain partitioning, slicing more about layers in layered architecture. Is that what you mean?
Thanks for sharing!