Software Architecture The Hard Parts Modern Trade-Off Analyses for Distributed Architectures