One of the best books on system design is Understanding Computers and Cognition by Terry Winograd and Fernando Flores. This introduces ideas on Ontological Design that are summarised here. If you really understand this, then it provides a philosophical approach that allows you to consider any system, at any level - whether it is a simple computer system, or the latest process at the United Nations.
The philosophical background to Ontological Design can seem pretty heavy, and the interested reader should refer to the Winograd/Flores book if they are interested in existential arguments.
An Ontology is some set on concepts. That is it.
Ontological Design recognizes the significance of conceptualizations at all levels of the system, from "design" and implementation through to its end use.
I have found tho' that the essence of Ontological Design can be simply grasped thro' an understanding of three key elements:
In any given context, a systems "readiness to hand" is its "obviousness" - how "ready to hand" the system functions appear. Winograd/Flores use a "hammer" as something that is ready-to-hand.
A system breaks down when some unexpected event occurs. It is the "unexpectedness" that is critical, a system yielding behaviour that the user could not possibly predict or reasonably understand. For example, an unexplicable error message after some internal error - it is not the error that is the problem, but how it is handled and communicated to the user.
Whenever a system is developed concepts are introduced to aid the understanding. This is a crucial aspect of problem solving, building abstractions to simplify and rationalise the system. However, this leads to blindness when the concepts and abstractions selected are not sufficient to accurately describe the problem.