A science of design for software-intensive systems