System Architecture

According to several studies, the larger the software project, the less chance of success it will have because the complexity exceeds the developer’ ability to comprehend it. The key for success depends on the ability of the system architect to decompose requirements into smaller tasks so that developers can understand and be able to implement them. When developers finished, these tasks can be integrated into the large system according to the defined architecture.

A good architecture must detail all interfaces, functions, and control mechanisms separately so it can be flexible, easy to change. If done correctly, it allows developers to concentrate on specific task without the need to focus on interfaces, data flow, and other system functions. If documented well, it reduces the need for coordination between different team functions (Developers, testers, quality assurance, configuration management) but if done poorly, it will be a never-ending arguments, confusions, and lots of integration problems.

Architecture flows from the requirements to functional specification. Therefore, requirements must be correct, complete, and unambiguous. A poorly defined requirements will lead to bad architecture and bad architecture will increase problems in large projects. Obtaining requirements is the key responsibility of the system architect. He must work with the customers representative such as the Business manager to identify the needs and the system’s goals. The system architect is the interface between users and developers because users do not know how to explain their needs in the way that developers understand, and developers do not know about business process to ask the right questions. To reduce the risk in large project, the system architect must build prototypes to validate the requirements with customers. Prototyping is the process of building a “model of the system” because it converts the intangible requirements into a tangible but limited working model of the desired information system.The system architect communicates to developers by specifying “black-box” descriptions of the tasks. Black boxes are abstract entities that can be understood, and implemented independently from the rest of the system. The process of building black-box models is called “abstraction”. Abstraction is used to simplify the design of a complex system by reducing the number of details that must be considered. Basically, the architect explain to developers what to implement, but not how to implement it.

Developers must focus on building software that are dependable and free from defects. To minimize number of defects, they must follow the project’s defined process using best practices and tools that can help them to find defects early during reviews and tests. Developers also need to measure their works to ensure software quality. By having measurements, developers are having useful feedback on their works and provides reassurance to the system architect, project manager and users that the software is of high quality.

Developing large project with quality is not easy. It requires strong discipline, teamwork, and lot of coordination. It also require a strong management supports in understanding the hard works and giving developers more time to design and test their works. Most large projects are very complex so the key factor is a good architecture and strong project management. These skills are hard to find because the training today is still focusing on the programming aspect NOT the designing aspect and management aspect. Very few schools teach architecture, design and project management but only programming languages and that is why many companies are successful with small projects but NOT large projects. Software and system architecture are difficult to teach as it requires a lot of experiences in real works. You can not learn it from books or take a class but must experiencing it in real projects, especially large projects. The best way to learn about architecture is to be an assistant to the system architect, this “On the job training” would be good to developers that have several years of experiences. Once you experiencing it and have some basic knowledge about it then you can take few classes to strengthen your knowledge and learn more about different styles, different approaches. Only when you have mastered these techniques then you could apply for the system architect position. Remember that developers build their works upon the architecture and it is the architecture that determines whether the project will be successful or not.

Sources

  • Blogs of Prof. John Vu, Carnegie Mellon University