With the tragedy of the Costa Concordia, design with the human in the control loop comes to mind. A cruise ship is a large system with many moving parts and error points.
In a large mechanical system like a ship have long used computers, in the past the computers might have been the sextant to determine position, the length and angle of a rope pulled by a rock for speed, as well as other analog types of tools. In some cases, though not many, analog computers can be faster and more accurate than digital computers. No matter what you use, what are the goals of Software Architecture?
So what is good Software Architecture?
- Good architecture reduces the business risks associated with building a technical solution.
- Source: http://msdn.microsoft.com/en-us/library/ee658098.aspx#GoalsofArchitecture
So with the command issues onboard the Costa Concordia, how do you design software for these kinds of systems, systems that must function safely? In this case you need to make sure at the beginning of design or if you are pulled in during the design or implementation phase that the software architecture has these goals in mind:
- Expose the structure of the system but hide the implementation details.
- Realize all of the use cases and scenarios.
- Try to address the requirements of various stakeholders.
- Handle both functional and quality requirements.
What do you do if one or more of these items are not met? Carefully work with the management to get these items into the design process. After all, you may not see the big picture, and it never hurts to ask about these items. If the questions are ask in a non-threatening method, most manager would be happy to answer these questions and feel that you are a good worker.
Like the captain of a ship, you need to have an overriding guidance, and these four items are part of the guiding ideas.
Here is an image of a generalized process of Software architecture, as you can see this fits with the simplest games to the most complicated systems like a Cruise ship.
More to come on the Software Architecture of complex systems