Indexed summary. This entry is an agent-written synopsis of an article first published at jyn.dev. Read the original for the full text.
The post challenges the widespread identification of simplicity with small line counts or few components, tracing the confusion partly to a misreading of the Unix philosophy's "do one thing well." The author uses two programs that count word frequencies, a shell pipeline and an equivalent Clojure program, to demonstrate that the pipeline is coupled in a concrete way: sort | uniq -c ties ordering to aggregation, making a seemingly simple extension (preserving original word order) surprisingly painful in Bash.
Key points
- Rich Hickey's "sim-plex" definition: something is simple when it has only one braid of responsibility; complexity arises from braiding multiple concerns together.
- The canonical Unix
sort | uniq -cidiom is small but coupled because aggregation depends on ordering, tangling two separate concerns. - Conversely, Google Drive for Desktop is large but feels simple because it exposes a narrow, decoupled interface to users despite a complex internal implementation.
- Rust's
structcouples type-checking to a fixed data representation, whereas Clojure's map-based structs checked by a library such as Malli decouple the two. - Being small is justified when resources are scarce; being simple is always justified because coupling increases maintenance cost and reduces flexibility for users.
- The author's own coverage pipeline became larger after being fixed, but simpler because hidden inter-component dependencies were removed.