The terms reliability and maintainability are often misunderstood in the software field since software does not `break' or `wear out' in the physical sense; it either works in a given environment or it does not. This means that the program is either right or wrong in the environment. However, it does not follow that a program that is right is reliable or maintainable. For the purposes of this paper a program is maintainable if it meets the following two conditions: Â¿ There is a high probability of determining the cause of a problem in a timely manner the first time it occurs, and Â¿ There is a high probability of being able to modify the program without causing an error in some other part of the program. There are three important topics in developing a program which fulfills the above criteria: documentation, standards, and system architecture. This paper discusses the third topic since it is the real key to the development of maintainable software. A particular architecture of structured modular design using controlled communication between modules is presented together with its relationship to maintainability and reliability. The benefits of this approach are: Â¿ High isolation between modules. Â¿ Communication visibility and monitoring. Â¿ Error location. Â¿ Overload control. Â¿ Simplified control program. Â¿ Transparency to multicomputer configurations. A method is presented for calculating maintainability parameters related to this architecture, and examples of these calculations are given and interpreted.