Carnegie Mellon University

In addition to the following courses, students enrolled in the MSE programs can take electives from across Carnegie Mellon’s Pittsburgh campus.

17-603 Communications for Software Leaders I

Communications skills are fundamental to professionals in all fields, from architecture to software engineering to zoology, because they enable the exchange of ideas and the completion of organizational goals. The ability to identify an audience, to develop clear, persuasive presentations and written documents, and to handle the complex interactions that occur in the workplace make the difference between those who participate in an organization and those who lead it. This is the first course in a two-semester sequence designed to help you build and refine your skills so that you can communicate as a leader in your professional work. Through a combination of in-class exercises, case studies, projects, presentations, and written assignments, you will assess your current skill level and build upon it. There are no prerequisites to this course, other than a willingness to keep an open mind, to give and receive feedback, and to participate in interactive in-class discussions.

Syllabus [PDF]

17-604 Communications for Software Leaders II

Sections A-E Syllabus [PDF]

17-611 Statistics for Decision Making

Measurement and analysis play a critical role in effective and efficient software development, the construction of data driven applications, as well as providing the scientific basis for software engineering effort to be repeatable, reliable and predictable. This course combines a refresher in basic statistics with an introduction to measurement theory to enable students to define valid measurements in their domain of application.

Syllabus [PDF]

17-612 Business & Marketing Strategy

Organizations must protect their profitability goals through prudent investment in well-supported engineering proposals, while avoiding misdirected initiatives. Such goals are further constrained by finance, policy, and market risk. This course covers key concepts to compete in a world where cost containment, cost leadership and market share play a critical role in keeping a company competitive, as does innovation and engineering prowess.

Syllabus [PDF]

17-614 Formal Methods

Scientific foundations for software engineering depend on the use of precise, abstract models for describing and reasoning about properties of software systems. This course considers a variety of standard models for representing sequential and concurrent systems, such as state machines, algebras, and traces. It shows how different logics can be used to specify properties of systems, such as functional correctness, deadlock freedom, and internal consistency.

Syllabus [PDF]

17-617 Programing Quantum Computers

Students will gain familiarity with current universal gate quantum computing tools and technology. Students will also become comfortable with several QC algorithms and their implementation on state of the art quantum computer simulators and hardware.

Syllabus [PDF]

17-622 Agile Methods

Agile software development methods emphasize self-organization, adaptive planning, evolutionary development, frequent delivery and working closely with and incorporating feedback from customers throughout the development process. This course introduces students to two well-known agile methods: Scrum and Kanban, connecting these practices to established group dynamics and knowledge management theories to explain why they work and under what circumstances.

Syllabus [PDF]

17-623 Quality Assurance

Engineering quality software relies on the effective selection and application of quality assurance tools and techniques. In this course, students learn to define and measure software quality, learn when and how to apply software testing, static analysis, code review, and demonstration, and they will gain experience in using modern quality assurance frameworks.

Syllabus [PDF]

17-624 Advanced Formal Methods 

This course builds on the introductory Formal Methods class (17-614) to cover more advanced techniques for modeling and reasoning about software systems, including abstraction and refinement, declarative specifications, advanced temporal logics, and probabilistic modeling. The course will also explore applications of modeling and analysis techniques in various domains, such as security, enterprise systems, distributed computing, and cyber-physical systems.

Syllabus [PDF]

17-625 API Design

Design patterns describe a reusable solution to a commonly recurring problem. This course will review object-oriented creational patterns for generating new objects, structural patterns for organizing and restricting access among objects, and behavioral patterns for managing inter-object communications. This course also reviews common frameworks where design patterns are used, including in the design of application programmer interfaces.

17-626 Requirements for Information Systems

Software engineering requires understanding the problem, before identifying solutions. In this course, students study ways to elicit and analyze problem statements using scenarios, use cases and mockups. They begin with poorly defined problem statements, which they refine through multiple iterations and modes of expression to yield more actionable software specifications.

Syllabus [PDF]

17-627 Requirements for Embedded Systems

Software engineering requires understanding the problem, before identifying solutions. In this course, students study ways to elicit and analyze problem statements for real-time systems along multiple dimensions, including concurrency, dependability and safety. This includes developing and aligning mathematical and physical models for the effective application of control theory.

Syllabus [PDF]

17-628 Applied Quantum Computing

Quantum computers can solve specific problems more efficiently than their classical counterparts¿in theory. But in practice, today's quantum devices are too small and noisy to run many flagship algorithms. However, with carefully crafted hardware-software-algorithm-application stacks, quantum computers can already be used as interesting scientific tools for applications including fundamental physics, chemistry, and machine learning. 

In this course, we will learn about quantum applications in practice by understanding each component of a full-stack quantum computer. First, we will survey potential applications for quantum computers and identify which ones are both feasible and useful in the near-term. We will focus on applications involving simulation and machine learning, and then dive deep into relevant hybrid quantum-classical and all-quantum algorithms. Then, to achieve a deep understanding of the need for hardware-efficient algorithms, we will survey various physical platforms for quantum computers coupled with strategies for mitigating quantum errors based on fundamental concepts in quantum information theory. Throughout the course, concepts will be reinforced through practical coding exercises using modern software tools that will culminate in a final project to implement a quantum application at the cutting-edge of the field.

17-630 Prompt Engineering 

Students in this course will learn a brief history of large language models and learn about contemporary prompt engineering strategies and techniques. The course will cover in context learning theory with an emphasis on practice and building an intuition for prompt design and evaluation. Topics covered include chain of thought prompting, prompt tuning with hard and soft prompts, and self-consistency. Students will learn about standard prompt engineering benchmarks, evaluation metrics and calibration to evaluate the efficacy of prompt designs. Finally, the course will cover alignment and the ethics of large language models, while reviewing sample and cross-section of domain-specific applications.

Students in the course will need to purchase access to a cloud-based language model to complete coursework, which is estimated to cost $100-150. Various options exist, including GPT3.5 by OpenAI or Claude by Anthropic, as well as running T5 on a Lambda server. Class tutorials exists to guide students on how to setup and use one of these services.

17-632 Software Project Management

Software projects operate like temporary organizations established to achieve a one-time objective in an agreed time frame. They require the execution of interrelated, normally non-repeating activities, by multidisciplinary groups. Therefore, projects require prescriptive planning, budgeting, staffing and risk management. This course introduces student to fundamental project management techniques and tools such as activity planning, milestone planning, estimation, work-breakdown structures, critical paths.

Section A3 Syllabus  Section B3 Syllabus  Section D3 Syllabus [PDF]

17-633 Software Architecture: MSE

Successful design of complex software systems require the ability to describe, evaluate, and create systems at an architectural level of abstraction. This course covers 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 real-world system architectures. It teaches the skills and background that students need to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms.

Note: This course is 12 units and is intended for students in the MSE for Professionals program.Current students enrolled in the MSE for Professionals program have the option of taking the course for 6 or 12 units. Students in the MSE Online, MSE-SS, MSE-ES, and Graduate Certificate programs should enroll in 17-635. 

Syllabus [PDF]

17-634 Applied Machine Learning

Autonomous and intelligent systems increasingly rely on automated decision making based on statistical models. Popular models are used for classification or prediction. This course introduces students to unsupervised and supervised machine learning in the context of software engineering, including the analysis of natural language in bug reports and mobile app reviews. Techniques covered include latent Dirichlet allocation, TF/IDF, naive Bayes, linear regression, decision trees, and random forests.

Syllabus [PDF]

17-635 Software Architecture

Successful design of complex software systems require the ability to describe, evaluate, and create systems at an architectural level of abstraction. This course covers 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 real-world system architectures. It teaches the skills and background that students need to evaluate the architectures of existing systems and to design new systems in principled ways using well-founded architectural paradigms.

Note: This course is 6 units and is intended for students inthe MSE Online, MSE-SS, MSE-ES, and Graduate Certificate programs. Students in the MSE for Professionals program should enroll in 17-633. 

Syllabus Section A3 [PDF]  Syllabus Section D3 [PDF]

17-636 DevOps: Engineering for Secure Development and Deployment

Modern computing systems are frequently hosted on the cloud. That is, they are inherently distributed systems. To appropriately build and deploy these systems developers should know not only about development tools such as container management tools but also the structure of the cloud - in particular how it utilizes virtual machines, containers and networks. They should also understand security mechanisms both in the internet and how to authorize users and maintain credentials securely. Finally, to protect the system once it is placed into production, a developer needs to know how to enable the detection of problems during execution through collection and navigation of logs produced by the system. These are the topics covered by this course.

Syllabus [PDF]

17-638 Engineering Embedded Systems

The purpose of this course is to understand and negotiate the factors that drive embedded systems projects including design choices, construction methods, and other practices that must be considered during architecture planning for an embedded system. Students will experience creating and analyzing a software intensive embedded system written in C and using typical industry tooling appropriate for the classroom. The course consists of lectures, weekly assignments, in class discussions, and programming projects.  With respect to programming projects, students will create working systems throughout the semester using the concepts learned throughout the course including the use of real time operating systems and data structures common to the embedded domain. This course is aimed at creating software engineers capable of navigating the complex technical ecosystem required to be proficient engineers in the embedded domain. By the end of the course, students will be able to articulate methods to design and analyze the scheduling of embedded software tasks or threads that execute in priority based real-time operating systems.  Students will be able to identify embedded system components of construction to ensure task synchronization, fault containment, communication, and responses to hardware-based interrupts.

17-639 Applied Distributed Systems

Modern software engineering depends heavily on distributed computation and storage. This requires a practical understanding of computer networking, computer and network security, and virtualization using containers. This course covers the fundamentals of distributed computing required to study modern deployment and continuous integration, and the design and analysis of data-intensive and scalable systems and sensor-based systems.

Syllabus [PDF]

17-642 Software Management Theory

This course examines software development from an organizational perspective and is designed for students who aim to understand the relationship between business context, software development processes, knowledge creation, culture and organizational structure with the purpose of becoming change agents who manage the software development function at the business unit or department-level or above. The course highlights the need to follow good work principles in order to avoid ethical failures as evidenced by recent events.

Syllabus [PDF]

17-643 Quality Management

Software engineers must consider quality during every phase of a project from inception to delivery and beyond. This class introduces the managerial challenges, including defining a quality management process, understanding the costs associated with achieving and missing quality goals, understanding tradeoffs and gaining experience using collected quality metrics to inform project-level decisions.

Section A4 syllabus  •  Section D4 syllabus [PDF]

17-644 Applied Deep Learning

Neural networking has shown promise in multiple areas in artificial intelligence, including image classification, natural language processing and speech processing. Software engineers should understand the fundamentals differences in deep learning architecture and how to perform error analysis. This course introduces students to a variety of neural network architectures, including convolutional neural nets, recurrent neural nets, encoder-decoder with attention, and long-short term memory, as well as experience diagnosing and improving model performance.

Syllabus [PDF]

17-646 DevOps and Continuous Integration

DevOps practices serve to significantly reduce the time to production of committed code. This time involves deployment — the period between the completion of the code by the developers and the placing of the code into normal production — and dealing with operations issues. Deployment time can be days, weeks, or even months when using normal development practices. Operational issues such as dealing with incidents and errors introduce other delays. Modern Internet companies deploy a system multiple or even dozens of times every day. Achieving this velocity requires coordinated process and design activities together with supporting tooling. This course will cover the deployment process and the associated tooling, it will highlight reasons why release schedules can be slow, and it will introduce the practices that are used to enable high velocity deployments.

Syllabus [PDF]

17-647 Engineering Data-intensive and Scalable Systems

Internet services companies such as Google, Yahoo!, Amazon, and Facebook have pioneered systems that have achieved unprecedented scale while still providing high level availability and a high cost-performance. These systems are data intensive, primarily performing data I/O and manipulation rather than computation. They often operate in the commercial space and thus the cost-performance must be profitable in real-time, around the clock. This course covers the design and construction of data intensive scalable systems, with a focus on consistency, time and synchronization. This course will teach students how deployment, monitoring, and upgrading these systems impact their design.

Section A4 syllabus    Section D4 syllabus [PDF]

17-648 Sensor-based Systems

There is an increasing and visible trend in adoption of new approaches to automate business processes, replacing repeatable tasks and leveraging artificial intelligence as organizations prepare to renew themselves with a new competitive advantage through efficiencies and scale in operations. Product and service delivery operations, and industrial control systems are increasingly being connected by sensors and actuators that deliver event-based data that is critical to optimizing performance. This course teaches how to design intelligent systems that work effectively in a secure and reliable manner while producing data that can be analyzed using machine learning.

Syllabus [PDF]

17-655 Advanced Architecture Design

When building large or long lived systems, design is a critical element. This course is premised on the idea that the best method for learning design is to create designs, and have these designed critiqued. A number of actual systems from a variety of domains (e.g., telephony, automotive) will be examined in this course. The students will learn, through doing, a design method based on the achievement of quality attribute requirements as well as functional requirements.

17-656 Leadership and Digital Transformation

Gen AI, ChatGPT, LLMs, XR ... what, when and how should I use these for my business? Will I be left behind if I do not embrace it? The technology landscape is full of acronyms and buzz words and that is rapidly changing.
Digital Transformation is more about re-imagining business models and consumer experience than just technology, which is indeed a potent enabler. Transformation is no longer just an option for consideration but an urgent call for action. Organisations need to transcend beyond point technology solutions to a holistic approach that anticipates consumer needs and delivers value.
This course is crafted to equip leaders with the strategic mindset required to lead their organizations through a seamless digital transformation. Transformational Leadership is pivotal to navigate the challenges and opportunities provided by digital economy. The course will introduce a framework for digital transformation and discuss best practices. Participants will explore strategies to manage stakeholders, drive change and innovation. Case studies and guest speakers from the industry will provide practitioner's perspective and experiences.

Syllabus [PDF]

17-659 Applying Generative AI in Quantum Computing and Machine Learning Software Implementation

This course provides an in-depth exploration of the intersection between generative artificial intelligence (AI), quantum computing, and classical machine learning. Generative AI refers to the subset of machine learning models that can generate new data that is similar to the original training data. Quantum computing promises to revolutionize many areas of computing, including machine learning, by providing unprecedented computational power. In this course, students will learn about the latest developments in generative AI and quantum computing and how they can be applied to solve problems in machine learning.

17-660 Designing and Managing Software Systems Platforms

Platform economy has taken over many industries. It essentially has a network effect on the way services between industries are consumed. Instead of competing, businesses often leverage each others strengths to enhance their business. They engage each other in coopetition rather than competition. This course starts with discussing an overview of platform economy and its benefits. Creating software system platforms requires a different way of approaching the software development. It requires software engineers to focus on the domain and design reusable entities and services that support variety and evolvability. Domain driven design (DDD) is one of the proven approaches for identifying reusable assets. A systematic approach to designing systems using DDD techniques is dealt with in this course. To ensure robustness of the platform, it must be deployed and managed on reliable infrastructures. Incidents and outages must be dealt with efficiently. In this course the students will learn disaster recovery management. Topics such as incident investigation, RPO (Recovery Point Objective) and RTO (Recovery Time Objective) planning with respect to business goals, among others, will be discussed. Most software systems platforms today are deployed in the Cloud environment that poses additional issues. Cloud deployment and monitoring will be discussed in this course. As the software system platform goes into production, we need to have confidence in the operation of the platform. Chaos engineering addresses many of these issues by creating hypotheses on past outages and developing experiments for the possible incidents. Chaos engineering principles, techniques, and ROI will be discussed in this course.

17-671 Studio Project

The capstone experience for students in the MSE for Professionals program consists of three consecutive core studio courses.

The capstone experience requires students to work in teams of 3-5 on real-world projects that are mostly sponsored by external clients. The purpose of the project is to provide a realistic, experiential opportunity for the evaluation and application of Software Engineering principles, methods, and techniques learned in the MSE program. Teams are assigned faculty mentors with extensive experience to guide students towards their client’s goals and the educational goals. At the end, the teams will have delivered a valuable software system to their clients and enhanced their ability with developing software in a principled, disciplined manner. The final project becomes part of each student’s MSE program portfolio.

17-679 Thesis Writing for Software Leaders

Expository writing is used to present facts in a manner that supports a thesis. Successful thesis writing frequently requires identifying the audience, identifying and assessing facts for their relevancy and credibility to the thesis, and ensuring that conclusions are scoped and directly follow from facts. This course will introduce students to the software engineering thesis writing process with a specific focus on reflective practice. Students will work to identify a thesis topic based on their experience and interests, they will conduct a literature review to identify related work, will engage in reflective writing and learn to critique this writing. This course is for students enrolled in the Masters of Software Engineering program who are completing a supervised thesis option.

17-691 Machine Learning in Practice

As Machine Learning and Artificial Intelligence methods have become common place in both academic and industry environments many resources have focused on methods and techniques for applications. However, there are other considerations that must be addressed when deploying such techniques into practice (or production). The purpose of this course is to cover topics relevant to building a machine learning system deployed into operations. Such systems have technical requirements including data management, model development, and deployment. However, business/organizational impacts must also be considered. Machine learning systems can be expensive to produce and operate. Students will learn about trade-offs in design, implementation, and expected value.

Syllabus [PDF]

17-692 Product Management Essentials for Engineers

In today’s technology-driven world, organizations want engineers to help shape great product innovations and customer experiences from the very beginning. Engineers offer a depth of knowledge of what’s possible now. When engineers clearly understand the opportunity and goals, they can stimulate differentiating innovation ideas, contribute to the bigger picture, and influence product decision-making. This course prepares technically minded students to understand and use the essential product management concepts and practices in product innovation.

Syllabus [PDF]

17-693 Negotiations for Software Leaders

Negotiation skills are fundamental to professionals in all fields. Indeed, a strong argument can be made that almost every interaction that humans engage in is a negotiation in one form or another. This can be particularly important in technology-related industries and positions, where individuals may find themselves negotiating a job offer, attempting to convince upper management to back a new product or project, or trying to agree on deal terms for a corporate merger or a venture capital investment. The ability to identify your goals and alternatives, to effectively engage with a negotiating partner, and to define and achieve a positive outcome is critical to success in these and numerous other endeavors — and those who excel at handling these kinds of complex and often nuanced interactions will achieve greater success for themselves and their organizations.

Syllabus [PDF]

17-695 Design Patterns

Attributes of a good quality software, among others are ease of maintenance, modifiability, extensibility, and reusability. Design Patterns, that are mined from existing well-designed software, improve quality through documented and proven solutions to common problems. Reusing good designs appropriately not only improves the quality, but also reduces the development cost. Many existing code without much documentation also can benefit by refactoring to patterns. In this course students will learn techniques to identify design problems and apply design patterns effectively to improve the quality of software. Learning will be facilitated via lectures, flip-classrooms, and a group project. Learning will also be reinforced with many in-class and homework exercises. 

Syllabus [PDF]