CS 5150: Software Engineering


Course description

Introduction to the practical problems of specifying, designing, building, testing, deploying, and maintaining reliable software systems. Emphasis on team-based development integrating with moderately large, existing systems. Topics include design patterns, issue tracking, version control, code review, dependency management, continuous integration, and release management. As a central part of the course, student teams will add large features to real software systems, following an agile development process.


Minimum: CS 2110 or equivalent experience programming in Java or C++. CS 3110 or CS 4410/4414 strongly recommended for Cornell undergraduates. Sufficient maturity to design, code, and debug large programs and to learn new programming languages and tools.


Curran Muhlberger
Lecturer, Computer Science
Gates Hall 462

Meeting times

Lectures are held Tuesdays and Thursdays from 2:45pm to 4:00pm, beginning on January 25 and ending on May 10. Attendance and participation are expected. In-person lectures take place in Olin Hall 255 (see Class Roster). Virtual lectures are hosted on Zoom (see Canvas for link).

The instructor and teaching assistant(s) will hold regular office hours (both virtual and in-person).

Teams will need to arrange meeting times outside of class to conduct reviews with all members in attendance.

Personal technology

Engagement during lectures will be facilitated with Poll Everywhere polls. Responding to polls requires an Internet-connected mobile device (laptop, tablet, or smartphone). However, multitasking on such devices during lecture is known to impede learning and lower grades for both you and your neighbors, so we ask that you only use these devices for poll responses, notetaking, and following along with demos. Students who are nevertheless prone to multitask should sit in the back of the classroom (and classmates should not hesitate to ask distracting students to relocate there).

Materials & services

At a minimum, students will require the following in order to participate in the course:

Students are not required to purchase a textbook; all required readings will be available for free in digital form. Several readings will be from the book Software Engineering at Google, which is also available in paperback.

The course will utilize the following online services, most of which you can access with your Cornell account once you are logged into Canvas:


Performance on the following elements will factor into a student’s course grade:

These components are weighted at the discretion of the instructor, but performance on the group project (that is, consistent application of the techniques taught in class towards a viable, best-effort deliverable) is the most significant factor.

This class will not have a centrally-scheduled prelim or final; all exams will be given in class.


Engaging in classroom activities both improves your learning and creates a more vibrant learning environment for your peers, so we want to reward you for it. Class participation will largely be assessed via Poll Everywhere responses. Students do not need perfect attendance or perfectly correct responses to maximize the participation component of their grade! (Such a policy creates perverse incentives, such as rewarding coming to class when ill, which we do not want.) Please do not contact the staff asking to be excused for an absence – we trust you to manage your health and commitments wisely and will not penalize you for missing class occasionally. If habitual absence causes you to miss more than a third of lectures, that is when you should seek advice from the staff.

Unless the university mandates a move to virtual instruction (such as for the first two weeks of the semester), lectures are offered exclusively in person and are not recorded. But be mindful of public health – if you do not feel well, please stay home. Posted materials, our discussion board, and your teammates are all available to help you get caught up after an absence.

Community of learning and professionalism

We aim to create an inclusive learning environment where diversity and individual differences are respected and appreciated, and we expect students in this class to demonstrate diligence in understanding how others’ perspectives may be different from their own. Behaviors that contribute positively to our community of learning include:

Academic integrity

Integrity is a cornerstone of both our learning community and professional life. Much of the work in this course is collaborative, but all documents and code submitted must be written solely by the student or team members submitting it, and ideas or feedback from others must be properly attributed. Always abide by Cornell’s Code of Academic Integrity and any course-specific rules regarding its interpretation.