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

Put the easy parts of a process at the start and the hard parts at the end

  • Ben & Jerry’s ice cream makes a consistent and low-cost ice cream base used in all flavors at the beginning of the process then puts the differentiating flavors that are more costly at the end.

  • Leads to "Pass the Buck".

Intentional Overengineering

Expand the process to cover many situations even if complicates simple situations.

  • Source control has a few common patterns needing different combinations of basic commands. Put all those commands together in a script, even if a good number of those commands are not needed in various situations.

Consistency

Do similar things the same way.

  • In a portfolio of 100 batch jobs to run, put the run books for each one along the same navigation path in the central knoweldge repostitory.

  • Leads to "standardization".

Standardization

Publish processes and methodologies that are based in consistency.

Examples:

  • Every 120V outlet in the U.S. takes the same plug.

See Also:

  • Emerges from "consistency".

  • Leads to "generalization".

Generalization

Standardize to a higher level of abstraction to solve a broader collection of problems.

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".

User/System Tradeoff

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.

Safe Defaults

Make the system use the least destructive action when more specific user guidance is not available.

Visibility

  • Costco.

  • Leads to "self-reporting".

Self-Reporting

Have the system publish its health as an integral part of its operations.

  • Emerges from "visibility".

Sufficiency

XML/JSON, HTML v CSS markup, SOAP v REST.

Incremental Feedback

Progressive Disclosure

Reduced Precision

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

Reduced Functionality

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.

Constrained Options

  • Python and whitespace.

Guideposts

  • Tell the user what to do.

Essence

  • Dilbert

  • Kung Fu

Pass the Buck

  • JavaScript

Sorting

In any collection of objects of two or more, sort objects in a logical order.

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.

Feedback

  • Tell the user how things are going.


⚠️ **GitHub.com Fallback** ⚠️