Software Design and Software Architecture