Simplicity - jmadison222/knowledge GitHub Wiki
| Home |
You cannot control your way out of complexity. You must build it in from the start or refactor it in later. While simplicity can be its own value proposition, its primary value is scale:
-
Simplicity scales.
-
Complexity does not.
Simplicity is best treated as a dependent variable. You can try to create it directly, but that risks dropping below the level of necessary complexity per Einstein’s tongue-in-check observation that, "everything should be as simple, but no simpler."
Instead, consider simplicity a dependent variables and seek independent variables that lead to simplicity, such as those below. These are factors you can engineer into your solution to produce simplicity, and therefore scale.
The list is in order of power with the most powerful on top, such that if several work as a cluster, the cluster stays together. For example, consistency leads to standardization which leads to generalization, so those three are clustered together.
My personal engineering field is data, which is malleable. Engineering fields that are more physical might change the order. For example, in a malleable field, you can standardize first then generalize (which I do at work). In a more physical field, you have to generalize before standardizing since manufacturing locks solutions in at a point in time (since bridges are set in concrete).
DRAFT: 20% done. Just a brain dump at this point. Several themes are redundant or should be merged to a more general theme.
- Deferred Complexity
- Intentional Overengineering
- Consistency
- Standardization
- Generalization
- Standardize to a higher level of abstraction to solve a broader collection of problems.
- User/System Tradeoff
- Safe Defaults
- Visibility
- Self-Reporting
- Sufficiency
- Incremental Feedback
- Progressive Disclosure
- Reduced Precision
- Reduced Functionality
- Constrained Options
- Guideposts
- Essence
- Pass the Buck
- Sorting
- Feedback
Examples:
-
In Linux, everything is a file, where a file is defined as a stream of bytes. Viewed this way, everything from a keyboard to the Internet can be handled with consistency.
See Also:
-
_Emerges from "standardization".
If the complexity cannot be eliminated, make a rational decision to either expose it to the user or embed it in the system. For example, vehicle transmissions need some complexity; manual transmissions are internally simple but hard for the user; automatic transmissions are internally complex but easy for the user.
Make the system use the least destructive action when more specific user guidance is not available.
Provide features at a lower level of fidelity.
-
The 12 notes of the western music scale are equal distances apart but they are not mathematically aligned. The 5 notes of the eastern music scale are perfectly mathematically aligned. Not sure how this is simplicity. :-)
-
Chinese letters
Make the deliberate choice to give the system fewer features.
-
Undo/redo is a common feature of software. It is very difficult to implement. I was on a project that needed it. It was 30% of the total project cost. A new project manager was hired. He asked why we needed undo/redo. The user said it was nice to have. The feature was pulled. The 30% was saved.
This is a freebee. I’ve been amazed throughout my career how many collections of objects are in no logical order. This forces people to traverse the entire list. With a sorted list, people essentially do a binary search.
As a default, use a naturally collating order such as alphabetical or numerical. If there is a better order, use it, and tell the reader. If your better order might be your opinion, versus a general notion, fall back to the more general collation.