Designing Software-Intensive Systems by