Last week I enjoyed experimenting with a unique catapult toy design I had on my mind.
There are hundreds of cool 3d printable catapults out there, but this is the only one I’m aware of designed as a modular construction toy for maximum reconfigurability. Check it out:
For this post title I went full clickbait because if ever there was an appropriate use of the phrase “One Weird Trick” then this would be it.
Modularity is the idea of creating a complex system from interchangeable components (modules).
As a design tool it is indeed an effective trick for improving flexibility, simplicity, & cost savings; but using it can get a bit weird if you think too hard about it.
Levels of Modularity:
Designers use various forms of modularity all around us. From where I’m sitting I see modular keyboard keys, windows, power outlets, deck rails, kitchen cabinets, dumbbells, Lego bricks, drawer knobs, ceiling fan blades, light bulbs, & floor tiles.
All have modular aspects, but to drastically different degrees.
For example a wall receptacle is made for easily swapping between different standardized light switches, outlet plugs, & decorative faceplates. But the end result of any combination of those parts still takes one of a predictable & small number of forms. The modules cannot be reassembled into a substantially different configuration, so they have a low degree of modularity.
On the other hand the pile of Lego bricks I’m procrastinating cleaning up have a high degree of modularity because the simple ‘one stud’ interface is replicated numerous times on every brick.
Since every single Lego stud can interact with every other stud, each additional brick you have adds an increasingly-increasing number of unique assembly combinations to the entire set. The growth in the number of part-to-part combinations looks exactly like this chart. (This chart shows how person to person communication becomes unmanageable as a group size grows but the idea is the same).
Not only is the complexity of the system measurable, but the type of modularity used can be classified into one of 7 categories.
- Component-sharing modularity: Sharing a standardized component between different products, i.e. using the same bearings on various appliances.
- Component-swapping modularity: Exchanging one or more components in an otherwise standard product, like making a personalized embroidered logo on a blank shirt.
- Cut-to-fit modularity: Modifying a specific element in an otherwise standard product, like designing a pair of pants to match a individuals height by adjusting only the leg length.
- Bus modularity: Connecting components through the use of a common base element through the same type of interface. (Numerous people in any combination can ride a school bus but the vehicle still takes up the same amount of space)
- Sectional modularity: Connecting modules directly to each other without the need for a common base element (no bus). Instead each element uses a standard interface to connect with each other.
- Mix modularity: Mixing together standard components in a continuous blend, like an ink cartridge mixing cyan, magenta, yellow, and black to make any other color.
- Digital modularity: Digital information, such as a single byte for describing a complex color has a fixed size (8-bits) but it consists of standardized simple interchangeable components.
I especially like that last one as a reminder that this design tactic isn’t limited to physical hardware. You can have modular experiences, stories, organisms (anything that clones itself), music, services, organizations, neighborhoods, art, and surely many more things.
Modularity in Software Engineering:
Modular architecture is a critical aspect of effective object oriented programming. Just as with hardware, you can create a complex whole from a set of software modules that are independent, reusable, and interchangeable.
In fact, designing software in such a way that it’s readily reusable for future projects is one of the most important productivity skills for software engineers I can think of.
Sure, typing speed, syntax memorization, & familiarity with various languages is nice. But it’s far more useful to be able to create effective abstractions that you won’t need to redesign in the future when you want to use them again.
Literally every time I take on a new project I find myself referring to my prior work to cut & paste useful pieces. Project C builds on project B which was built based on project A, so do your best to get it right the first time!
How To Design Better Modules:
Modular design is a way to simplify complex systems, so we want to prioritize simplicity while ensuring each module is independent from the others. The 5 key elements of modular design to consider are:
- Each module should have a clear purpose that doesn’t overlap with other modules.
- The interface of a module should be easy to use and well-defined.
- The module’s internal working structure needs to be completely isolated from other modules.
- The module must work as planned (failures must not affect other modules, so plan for them!)
- The links between modules should be minimal to reduce complexity.
And finally, look for naturally occurring repeating patterns where many of those rules take care of themselves. (I play LightBot programming puzzles with my kid and the first thing I always tell her is to find the repeating tiles!)
Speaking of repeating tiles, it’s a surprisingly rare thing to find patterns in nature that don’t contain a repeating sub-pattern. The oddly shaped ‘hat’ tile pictured on the right was just discovered in 2023. It self intersects & can be tiled any way you want forever and still never contain a ‘periodically’ repeating pattern, no matter what combination of pieces you select for the module!
References, Image Sources, & Further reading:
- Product Design & Development by Karl Ulrich