I hold simplicity to be the most important quality for software design & architecture.
But I can't explain what ‘simple’ means. I could probably describe a few qualities, and maybe give references and examples (see 1 2), but ironically I don't have a simple definition of simple.
It ends up being a ‘you know it when you see it’ type discussion.
‘Simple’ mean different things to different folks, and everyone on a team comes in with varying backgrounds (years worked, concepts you’ve been exposed to, what you value, etc). Your worldview necessarily shapes what you consider ‘simple and obvious’.
I have noticed a tendency (including in myself) to assume that what you consider to be simple must be simple to everyone else. Everyone assumes that what seems obvious to them will obvious to others.
This is a very big problem, especially if you’re part of a growing org. Assuming people come in with the same priors and hold the same values always results in misunderstandings and members of a team talking past each other.
How do we solve this problem? I don't have a good answer yet. This is something to think deeply about.
- Simple made Easy by Rich Hickey is a classic resource.↩
- I keep coming back to Rob Pike's thoughts on complexity as well↩