Having worked in so many different environments I've been exposed to a wide range of ideas and solutions, and this has given me the insights needed to freely create a wide variety of solutions of my own. System architecture is simply a combination of functionalities that achieve a desired end. The end -- and the beginning -- is a particular "business" need.
Business needs can be addressed from two directions. One is the "if-all-you-have-is-a-hammer-everything-looks-like-a-nail" approach, where you adapt an existing solution to a set of problems amenable to that solution. The other is a flexible approach where you create a custom solution to a novel problem. In truth most solutions fall on a continuum between those extremes. It's also true that there are almost always multiple solutions not only to every problem, but to every part of every problem. The question then becomes what solutions get applied to every part of every problem.
The remainder of this discussion is about how to build a system after a theoretical approach has already been identified. Please see these discussions about the foregoing steps of understanding the system and identifying the business need.
Designing and implementing a system is about grouping collections of functions in an efficient, effective, robust, and economic way. The functions can be divided across multiple processes, processors, machines, users, and locations, and this division is a major component of the architectural process.
The following functions have to be designed, implemented, and verified. I have successfully completed projects in all of these areas in multiple ways.
- Receive or retrieve input data
- Perform transformations of the input data or make decisions based on the input data.
- Generate output information or actions that address a business need.
- Store and retrieve data.
- Prevent, correct, identify, and otherwise handle errors.
- Support effective user interaction and control of the system's operation.
- Communicate and coordinate between different collections of functionality (multiple processes, processors, machines, users, and locations)
- Support effective means of system governance (in terms of making changes, correcting problems, adapting to new business needs, managing risk, and so on). This activity begins to overlap with the practice of enterprise architecture.
Below are a few examples of systems I've implemented, worked with, documented, improved, and designed. Some of the items show the end results while others are methods to communicate understanding and goals to customers and team members. These include screen mockups, data and function architectures, system descriptions, and process analyses. There are many more examples elsewhere on this site.