9504 shaares
222 private links
222 private links
Example code is often simple because it lives in a idealized world. Use defensive programming to relates possible errors.
Scaling to power of 10s is challenging. As harmful to build for the system for the future as it is to build an inefficient system for the present.
Sources of complexity:
- leaky abstractions
- model/reality gaps: first and lastnames; unicode...
- fix it, hack around it or ignore the problem
- hyperspace: multiple runtimes, various screen sizes, multiple network speed, multiple version, etc...
- example: 3 browsers with their 4 last versions each, 3 screen sizes on 3 platforms = 108 combinations
- try to unify the environment: electron apps. Avoid NxM complexity.
- Complexity (homeostatis) over time
- some people tolerate more or less complexity
- a valuable system is worth putting up with more pain (resources, ...)
Software architecture degrades [with] changes made to the software...
Find dependencies and eliminate them
Complexity isn't always bad! i.e. Legend of Zelda Breath of the Wild's "chemistry engine"
Living with complications
- The Gordian Knot: solve your problems by changing the rules.
- Just start over
- Do less with less (reduce scope)
A head-start at the author's company?
- Local-first software: runs on your computer, but collaborates with other people.
- In-browser with IndexedDB
- Automerge (with portable versioned JSON-like data structure)