The Art of Software Architecture: Design Methods and Techniques