Carnegie Mellon University

Software Engineering Concentration

Effectively building modern software systems at scale requires not just programming skills, but also engineering skills. These skills include the ability to interact effectively with customers to gather the requirements for a system in a precise way; to develop a design that resolves competing quality attributes; to make tradeoffs among schedule, cost, features and quality to maximize value to stakeholders; to work effectively with other engineers; and to assure the quality of the delivered software system. We hear regularly from industry that these skills are crucial to them, and that they are interested in students with a strong software engineering background.

The software engineering concentration is designed to teach the fundamental tools, techniques and processes of software engineering. Through internships and a mentored project experience, students gain an understanding of the issues of scale and complexity that motivate software engineering tools and techniques. The core curriculum includes material both on engineering the software product and on the process, teamwork and management skills essential to successful engineering. Program graduates should have the technical, process and teamwork skills to be immediately productive in a mature engineering organization.

Overall, the concentration requires five (5) courses and an internship. One of the five courses consists of a 6-credit course that serves as a writing workshop in which the student reflects upon and integrates the lessons of the internship.

There are two required core courses for the concentration:
  • 17-313: Foundations of Software Engineering
  • 17-413: Software Engineering Practicum

The concentration requires two (2) additional elective area courses, one selected from each of the following categories. Each category includes courses that are currently approved, but other courses that fulfill the same learning objectives may also be used for each area, subject to a prior approval from the Director.

A domain-independent course focused on technical software engineering material.

    • 15-414:  Bug Catching: Automated Program Verification and Testing
    • 17-214: Agentic Software Development (formerly "Principles of Software Construction." Students who took the older version of the course may not count it as an elective for this category.)
    • 17-355:  Program Analysis
    • 17-356: Software Engineering for Startups
    • 17-423/723: Designing Large-Scale Software Systems
    • 17-445: Machine Learning in Production
    • 17-480: API Design and Implementation
    • 17-653:  Managing Software Development (prerequisite: 17-413 or an internship)
    • 17-731: Foundations of Privacy
    • Methods Elective (take both 6-unit mini courses)
      1) 17-614: Formal Methods
      2) 17-624: Advanced Formal Methods
    • Requirements Elective: Design and Marketing (take two 6-unit mini courses)
      1) 17-612 Business Marketing and Strategy
      2) Take Either 17-626 Requirements for Information Systems OR 17-627 Requirements for Embedded Systems
    • Managing Development (take two 6-unit mini courses)
      1) 17-622 Agile Methods
      2) another mini-course of your choice from within this larger list
    • Quality Engineering (take two 6-unit mini courses)
      1) 17-623 Quality Assurance
      2) 17-443/643 Quality Management

Other courses may count with prior approval from the Director of the Software Engineering Program. Ask before you take the course!

A course that explores computer science problems related to existing and emerging technologies and their associated social, political, legal, business and organizational contexts.

  • 17-200: Ethical Dilemmas and Policy Issues in Computing
  • 17-562: Law of Computer Technology
  • 17-333: Privacy Policy, Law and Technology
  • 17-334: Usable Privacy Security
  • 17-781: Mobile and IoT Computing Services
  • 17-801: Dynamic Network AnalyTnformation Security and Privacy
  • 19-403: Policies of Wireless Systems 
  • 70-311: Organizational Behavior
  • 70-471: Supply Chain Management
  • 88-341: Team Dynamics and Leadership

The concentration requires a software engineering internship of a minimum of 8 full-time weeks in an industrial setting (i.e., integrated into a team and exposed to industry pressures). The student may work in development, management, quality assurance, or other relevant positions. Students should confirm with the director that an internship is appropriate, but internships that fulfill the criteria will be accepted after the fact. Students must further complete:

17-415 Software Engineering Reflection (6 units)


Double Counting Rule 

No more than two of the courses used to fulfill the concentration requirements may be counted toward any other degree or concentration. This rule does not apply to 17-214 (a prerequisite for the concentration only for students who took the older version of the course) or courses counted for general education requirements.