A few systems principles

A collection, somewhat unorganized, of systems architecture principles.

1. All systems are embedded systems. A simple restatement of the well-known general systems concept. It is particularly important for computer systems developers to understand that these systems are deployed into already existing and functioning work systems. System development and deployment is a kind of intervention into an existing set of work practices, processes, and rhythm of work. Adopting the view that the new needs to fit with what's existing can help generate useful questions about the environment of deployment. Answers to these questions can provide key requirements regarding functionality, utility, and usability.

2. All knowledge is local. Computer systems end up being deployed into specific work groups, in specific institutions and industries. The specifics of use and usability provide information and requirements that can ensure successful deployment. Learning to see, and accomodate, local, specific work practices and cultures, provides valuable information that can differentiate one product or service from its competitors.

3. Describe the invariants: software documentation that lasts describes and specifies aspects of the system and the code that doesn't change when new capabilities are added, or existing features extended, or problems and errors in construction are fixed. This kind of documentation adds real value to the code because it can describe the context and purpose of the code, and the relationships among collections of code that reflect the system's role in the larger work system.