Evaluating 'simplicity'
Fri, Oct 15, 2021 ❝How to answer the question: 'Can we make it any simpler?'❞Contents
After a lot of talk about simplicity, let us make things practical. This post is intended to highlight the concerns of each of “the components of simplicity” as I previously defined them. We make things practical with questions and examples, instead of abstract descriptions.
Simplifying is a two-step process that may loop around as long as the question itself can be improved based on further insights, i.e. goal is an absolutely simple answer.
Step 1: question the question
In this step, we assume that we are allowed to rephrase and fine-tune the question itself. If the question is a given, only step 2 is relevant.
As discussed in Questioning the scope of simplicity, to make an answer as simple as possible, you will need to ensure that the question is of equally high quality. The question determines the base of the answer.
You can do this either at the start, or at any later point in time while answering the question. Phrase the question such that it is as specific as possible to what you want to answer. The answer sometimes hints at how the question could better be expressed. Each time the answer is changed, you will need to reconsider whether the answer that is formed can now be further fine-tuned.
Step 2: considering each property
Previously, we defined three properties:
- Specialized
- Unoptimized
- Reduced
Each of these properties can be questioned independent of the others. Each of these propeties contributes to complexity or – if done right – to simplicity in a distinct dimension. Having each dimension as simple as possible, presumably results in a simplest answer.
Sometimes one is not looking for the simplest answer, though. Sometimes, there is more priority for a highly optimized answer, or a need for platform-specific features. These needs, however, imply a deliberate choice to shift priority away from the simplest answer.
Note: you can think of the question as the problem or problem statement, and the answer as the solution.
Specialized
In the dimension of generalization, we question whether or not the answer is described in unnecessarily general terms, which makes it more challenging to comprehend.
-
Does the answer exactly fit with the question that is asked?
-
Is it overly general? Can you make things more concrete?
For example: are you talking about an animal, while it is always about a dog?
Note that specialized assumes that we operate in the same level of abstraction, i.e. the domain in which the question is expressed is also the domain in which the answer is expressed. This means that someone who understands the question, should be able to comprehend the answer.
Unoptimized
In the dimension unoptimized, we consider if the answer is expressed at the same level of abstraction, i.e. in the same domain, as the question. If not, this implies that there is a (hidden) cost of additional knowledge in order to comprehend the answer. That is, knowledge that the reader needs to be aware of, and a level of abstraction that the reader needs to comprehend.
-
Is the answer expressed in the same domain as the question?
Or: is the answer at the same level of abstraction as the question? -
Does a user who understands the question, need to other knowledge to understand the answer?
Mathematics, as used in computer systems, is executed in the binary number system. For answers that only need to work in the binary domain, this can often be expressed at the lower level using bit-wise operations. This form of optimization grants more control of how the hardware operates both for efficiency and control. Optimization is prioritized over simplicity. The user is expected to:
- understand the binary system, e.g. what operations are efficient, in what way?
- understand bit-wise operations, e.g. what operations are there, what are weaknesses?
- comprehend the boundaries and restrictions of such a system,
- be aware of and comprehend the hidden assumptions of the domain in which the answer is expressed.
-
Can you express the answer in the same terms, the same concepts, as the question?
Reduced
In the dimension reduced, we consider if parts can be removed. If there are less parts to the answer, the answer becomes easier to comprehend.
-
Can you reduce the number of parts/components/terms/concepts?
Does “Snow White and the Seven Dwarves” really need seven dwarves to make the point, or is five good enough? Or even three?
Does the story need to span several years? -
Can you remove variability? (literal variables, described variable parts)
Do you really have to have a variable to plug in any number? Or is the number always “42”? -
Do you need as many different actors as there are, or can an existing actor cover multiple parts?
-
Do all of these numbers need to be distinct or can we reuse the same number?
-
Are there any rules or dependencies between parts and are these necessary?
Step 3: iterate
Sometimes, simplifying the answer gives you additional insight in how to improve the question? If so and if fine-tuning the question itself is allowed, loop back to step 1 and iterate once more.
Conclusion
We have discussed each of the components that there are to simplicity. Each representing a different dimension on the answer. Through a number of questions, we illustrate what aspect of simplicity each dimension represents.
The questions help you to evaluate each component of simplicity individually. They give insight. They allow you to evaluate if further simplification is feasible. Or whether a choice was already made for a certain priority. It is up to the reader to determine if they want to improve in the direction of simplicity, or rather choose to improve one of the dimensions instead. Choosing for a particular dimension (specialized, unoptimized, or reduced) leads to making sacrifices in the other directions, and consequently to simplicity itself.