Lecture: Monday, Tuesday, Wednesday, and Thursday at 1:30 - 3:00PM Eastern Time

Lectures delivered via BlueJeans:

Lectures begin Tuesday, May 5, 1:30PM Eastern at the link above!

Discussion 1: Monday and Wednesday 3:00 - 4:00PM Eastern Time (after class)

Discussion 2: Tuesday and Thursday 3:00 - 4:00PM Eastern Time (after class)

Discussions delivered via BlueJeans:


There is no required textbook for this course.

Primary Instructor

 Kevin Leach, PhD
 kjleach at
 Senior Research Fellow, UM
 Office Hours: MW 4:00 - 5:00PM Eastern Time, or by appointment
          OH BlueJeans Link:

Instructional Assistants

 Meera Shivakumar
 mshivaku at
 Primary contact for Discussions
 Office Hours: TW 10:00pm - 12:00am, F 1:00pm - 3:00pm;
            Sun 4:00pm - 6:00pm Eastern Time
            OH BlueJeans Link:

 Maria Marginean
 mmargin at
 Office Hours: MTWRF 4:00 - 5:00pm and 8:00 - 9:00pm;
   Sat/Sun 12:00pm - 2:00pm; Eastern Time
            OH BlueJeans Link:

Office Hours and Meetings

Note that each instructor will have their own BlueJeans link that you can join during scheduled office hours. These office hours will be shared amongst multiple participants.

If you want to discuss something in private during scheduled office hours, please join this queue and we will meet with you in turn, during scheduled office hours.

If the calendar below doesn't work, you can also add the calendar with this link.

Piazza and Slack

We will use both Piazza and Slack this semester. Please use Piazza for general questions, and use Slack to help work with partners and to socialize with others in the course.

Assignment Submission

We will use for coding assignments, and GradeScope for written assignments, exams, and in-class quizzes.


This Course Considers ...

  • How can you get a patch accepted in a large software project?
  • Can we be confident that your code is correct?
  • What can be automated, and what is best done manually?
  • How can we measure software qualities?
  • How can we avoid problems early?

Should you take this course?

Former students in previous offerings of this course have anonymously offered their advice on taking this course, available here.
Successful software projects require more than just technical expertise. Figuring out what the client wants, collaborating in a team, managing complexity, mitigating risks, staying on time and budget, and determining, under various constraints, when a product is "good enough" to be shipped are equally important topics that often have a significant human component. This course explores these issues broadly and covers the fundamentals of modern software engineering and analysis.

This course focuses on software engineering and analysis. At a high level, the course is organized around five core topics:

  • overview Measurement and Risk
  • qa Quality Assurance (especially testing)
  • bugs Software Defects
  • design Software Design
  • coding Productivity at Scale
A culminating assignment involves making a contribution to an open source project: identifying an issue, understanding the local development process, and then actually fixing a bug or adding a feature, with extra credit awarded if your contribution is merged into the project.

What will I learn at the end?

Skimming a previous final project report can provide a perspective on the sorts of experiences associated with this class. A number of other final project reports are available.

This course draws inspiration from Carnegie Mellon's Foundations of Software Engineering (15-313) course as well as from the insights of Drs. Prem Devanbu, Christian Kästner, Marouane Kessentini, and Claire Le Goues.

Technical Elective

This course is an upper-level CS technical elective for both CS-Eng and CS-LSA. (It does not show up in some versions of the CS-LSA Program Guide, but it does, in fact, count. Students can check their Audits to confirm.)

It is not a capstone course or a major design experience course. It focuses on individual mastery of key software engineering concepts. It does not feature a large team project.

The expected workload for this class is "moderate" — one notch harder than UI Design, but two notches easier than Operating Systems.

Advice From Former Students

Read what former students had to say about how hard this course is.


This course is delivered entirely remotely. There is no physical room or office in which to meet.

You should plan to attend lecture every day live at 1:30PM Eastern. However, I understand that students are participating remotely from geographic locations or personal situations that do not permit live attendence. Lecture and discussion recordings will be available.

To encourage you to keep pace with the material, we will randomly assign quizzes for some lectures. These quizzes may consist of (1) comprehension questions about that day's readings, (2) questions about that day's lecture materials, (3) a 4-sentence summary of that day's lecture, or (4) a random code word shared during the lecture. You will have 24 hours to submit such quizzes after they are assigned in lecture. The goal is to encourage you to either attend live or regularly watch the lecture recordings.

The course schedule is available a priori so that you can plan accordingly.

Advice From Former Students

Read what former students had to say about lecture attendance.

Reading and Comprehension

Readings are posted on the lecture schedule.

One of the most common student complaints is about buying textbooks that are both expensive and out of date. As a result, this course is structured so that there is no textbook and all of the readings are available on-line for free.

Because software engineering is often more engineering than science, the basic concepts are often easy to grasp but the trouble is found in the details. Questions such as "which of these methods works best in the real world?" and "what are successful companies actually doing?" are paramount. As a result, many of the readings are experience reports from companies (e.g., Microsoft, Google, etc.) or academic papers (e.g., with human studies). These detailed readings serve to flesh out high-level concepts that can otherwise be introduced via Wikipedia without costing you money.

The flip side of this is that you should actually do the reading. It will help you both in terms of understanding the lectures and also in terms of completing the assignments.

Finally, you may notice that some of the readings are marked optional. The optional readings are not required for any class assignments, but there may be extra credit questions on exams that reference them.

Advice From Former Students

Read what former students had to say about comprehension quizzes and examinations.

Homework Assignments

There are six homework assignments for this course. The assignments involve the electronic submission of artifacts. Some (e.g., test cases) are graded automatically and admit immediate feedback. Others (e.g., prose descriptions) are graded manually. For certain assignments it is possible to work as a team.

Advice From Former Students

Read what former students say about the first homework assignments.

Grading and Examinations

There are two exams during the semester. Both are delivered remotely and submitted via GradeScope as a PDF. The breakdown of your grade is as follows: Note that this is subject to change as of 4/28.

  • 15% Homework 1 — Test Coverage
  • 10% Homework 2 — Test Automation
  • 15% Homework 3 — Mutation Testing
  • 10% Homework 4 — Defect Detection
  • 15% Homework 5 — Debugging Automation
  • 10% Homework 6 — Contribution
  • 5% Comprehension Quizzes
  • 10% Examination 1
  • 10% Examination 2

Advice From Former Students

Read what former students had to say about how to succeed in this course.

Regrade and Makeup Policy

Regrade requests for exams, assignments, or written assignments must be received within one week of you receiving your score. All regrade requests should be made via Gradescope (if a request absolutely cannot be made via Gradescope for a certain assignment, please submit it privately on the course forum). When we regrade an assignment we will look over it very carefully for correctness: it is possible that after a regrade you will end up with fewer points than before the regrade. Regrades should be treated with caution and used only when the graders have made a clear mistake evaluating your work.

If you miss an assignment deadline or in-class activity, extensions or makeups are left to instructor discretion if you provide documentation. For example, for death or bereavement, a copy of the obituary or funeral program suffices; for illness or injury, any sort of doctor's note suffices. This policy follows that of other professors in the department. Please email Kevin Leach (kjleach at umich dot edu) with supporting documentation under such circumstances.

Assignments submitted late will receive an h% penalty, where h is the number of hours submitted late. For example, if you submit an assignment two days late (i.e., 48 hours), you will receive 48% off of your final grade for that assignment. You cannot submit quizzes or exams late (you will receive a zero).

The dates for the in-class examinations are posted well in advance. To request a rescheduled examination (e.g., for reasons other than a documented one as above, etc.), you must notify me via email (privately) at least one week before the date of the examination. Note that requests are not always granted.

All course materials submitted for a grade must be turned in by midnight on June 25.


The most common question I receive at the beginning of each semester (regardless of class) is 'What are my chances of getting off of the waitlist?' Unfortunately, I do not have much insight or control over the waitlist. This is the first time we have offered an ULCS elective on a compressed Spring semester schedule, so we are even more unclear than usual about whether the waitlist will resolve this semester. I cannot offer any predictions about waitlist resolution.

Enrollment Restrictions

University-enforced prerequisites



Student Mental Health

Students often experience strained relationships, increased anxiety, alcohol or drug problems, feeling down, difficulty concentrating, family issues, or a lack of motivation. Student mental health concerns are quite common but we don't always talk about them. The University of Michigan is committed to advancing the mental health and well-being of its students. If you or someone you know is feeling overwhelmed, depressed, or in need of support, confidential mental health services are available on campus.


Your class work might be used for research purposes. For example, we may use anonymized student assignments to design algorithms or build tools to help programmers. Any student who wishes to opt out can contact the instructor or teaching assistant to do so after final grades have been issued. This has no impact on your grade in any manner.

Students interested in considering undergraduate research should make an appointment to talk about it. I am happy to discuss research projets for credit or pay during the academic year.