Balancing Coupling in Software Design: Successful Software Architecture in