Carnegie Mellon University Website Home Page

17-655 Architectures for Software Systems

Architectures for Software Systems is a 12 unit full semster course.

Successful design of complex software systems requires the ability to describe, evaluate, and create systems at an architectural level of abstraction. This course introduces architectural design of complex software systems. The course considers commonly-used software system structures, techniques for designing and implementing these structures, models and formal notations for characterizing and reasoning about architectures, tools for generating specific instances of an architecture, and case studies of actual system architectures. It teaches the skills and background students need to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms.

More course details can be found in the Architectures for Software Systems syllabus.

After completing this course, students will:

  • be able to describe an architecture accurately;
  • capably recognize major architectural styles in existing software systems;
  • competently generate architectural alternatives for a problem, and choose among them;
  • have the skills needed to construct a medium-sized software system that satisfies an architectural specification;
  • capably use existing definitions and development tools to expedite such tasks;
  • understand the formal definition of a number of architectures and be able to reason about the properties of those architectures;
  • use domain knowledge to specialize an architecture for a particular family of applications.


  • Experience with at least one large software system, either through industrial software development experience or an undergraduate course in software engineering, compilers, operating systems, or the like.