Allow me, dear reader, to state some propositions regarding the design of software, for your consideration:
By definition, any purposive compound of objects and their relations is called a system. (Examples can include a software application, a datacenter, a business organization, a business process, a chemical compound, a written document, a play, a music composition, and so forth.)
These compounded elements and their relations are not innate, but are proposed, socially constructed, captured, augmented, determined, and filtered by the designers of that system.
Any system is either designed explicitly (purposively), or implicitly. If the design is implicit, its design is regarded and comprehended only after the fact, after the system is in place, as a result of a series of accidents, which is likely non-optimal.
Certain principles apply to well-designed systems, and these same principles can be employed across the design of any system, though seemingly disparate.
The attributes of any well-designed system include, at a minimum:
It must serve what it purports to serve, to help users achieve their goals efficiently.
It must afford that purpose in a way that minimizes friction and noise, making it easy and delightful to use, consume, and participate in.
Given that the system operates in a world of frequent change, it should ...