There is undoubtedly a large measure of art involved in software design. But artistic expression in the absence of rules results in chaotic design. To produce open systems, we must agree on some well-defined rules to govern interaction among systems and subsystems.