Lectures and Details (Fall 2021)


Lecture — TR 1:30-3:00pm — 1571 GGBL (also recorded via CAEN)

Discussion 013 — F 12:30-1:30pm, 2153 GGBL, led by Daniel, starting September 10th (recorded via CAEN under a separate link; slides available via Google drive)


None (but see below, and a personal computer or laptop is required)

Course Staff
Jeremy Dou (IA)
Aidan Haase (IA)
Daniel Hoekwater (GSI)
Kiran Menon (Grader)
Abdullah Ramzan (IA)
Arman Tabaddor (IA)
Mohammad Tambawala (Grader)
Office Hours
(starting Tue Sep 7)
Office Hour Queue Instructions for office hours that use the queue
Sundays — 11am-Noon — OH queue — Abdullah
Sundays — Noon-1pm — OH queue — Abdullah
Mondays — 11am-Noon — Chrysler Center Second Floor Lobby (near Room 220) — Abdullah
Mondays — Noon-1pm — OH queue — Aidan
Mondays — 2pm-3pm — OH queue — Arman
Mondays — 3pm-4pm — OH queue — Arman
Mondays — 4pm-5pm — OH queue — Aidan
Tuesdays — 12:00-1:00pm — OH queue — Daniel
Tuesdays — 3pm-4pm — OH queue — Arman
Tuesdays — 4pm-5pm — OH queue — Arman
Wednesdays — 11am-Noon — OH queue — Abdullah
Wednesdays — 1pm-2pm — OH queue — Jeremy
Wednesdays — 2pm-3pm — OH queue — Jeremy
Wednesdays — 3pm-4pm — OH queue — Jeremy
Wednesdays — 5:30-6:30pm — 1695 BBB (CAEN Lab West) — Daniel
Thursdays — 3pm-4pm — OH queue — Daniel
Thursdays — 3pm-3:30pm — 4636 BBB — Wes
Thursdays — 4pm-5pm — OH queue — Daniel
Fridays — 9:30-10:30 — 3150 DOW — Daniel
Fridays — 11:30-12:30 — 185 EWRE — Aidan
Fridays — 2:30-3:30 — 1017 DOW — Aidan

Piazza Forum

autograder.io Homework Code Submission (need access? email EECS481Staff@gmail.com)

Gradescope Homework Report Submission (need access? email EECS481Staff@gmail.com)


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?

Advice From Former Students

Read what former students say about whether or not to take this course.

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, Kevin Leach, and Claire Le Goues.

COVID-19 Exposure

If you believe you have been exposed to or have COVID-19, you should follow the official University instructions on the Campus Maize and Blueprint, which include contacting University Health Services at 734-764-8320 and isolating yourself.

In such a case, email EECS481Staff@gmail.com with a note indicating as much and we will ensure that you do not lose any points related to in-person attendance. We want to avoid any tension between the health of the community and your grade. (The length of time you should isolate depends on Univeristy policies and your health. The University currently recommends following the CDC guidelines.)


This course is delivered in person. Accommodations will be made for students via Services for Students with Disabilities or the office of the Associate Dean for Undergraduate Education. Accommodations will also be made for students following the Univeristy's policies about what to do for suspected COVID exposure. All others will be required to attend lectures in person, as per University policy.

Live, in-person attendance at the lectures is required (unless you believe you have been exposed to COVID, etc., as above) and significantly contributes to the participation portion of the course grade.

Lecture recordings will be available (both via Canvas and via the leccap server directly).

With a small number of exceptions (e.g., for Homework 4), no graded assignments or graded participation will be recorded during discussion sections. However, students are encouraged to attend one discussion section each week.

As they have throughout the past year and a half, policies around academic and public health are subject to change as this pandemic evolves. This course will follow all policies issued by the University, which are documented on the Campus Blueprint's FAQ. These policies may change over the course of the term, so please review the Campus Blueprint's FAQ for the most up to date information.

The course schedule is available in advance so that you can plan accordingly.

Advice From Former Students

Read what former students say about lecture attendance.

Can Take This Course Remotely For Full Credit?

Not without permission from SSD or the ADUE (see above). While many computing courses admit remote participation, EECS 481 currently does not. This course places more of a focus on reading, speaking, prose and similar activities. While the lectures will be recorded and the assignments and exams can be completed online, other activities (such as participation, some discussions, certain quizzes, and certain in class programming) are in person. (To be very direct, you could try to take the course remotely, but you would likely lose all of the points in Participation and Comprehension in the course rubric, which would probably result in a lower maximum grade than you would like.)

Remote Education and Technical Difficulties

If the autograder.io or gradescope assignment websites are inaccessible to all students for a short time, all due dates and times remain unchanged (plan ahead!). If they are down for a longer period of time, the course staff will likely extend the deadline slightly and post a notification to that effect. We will make such determinations on a case-by-case basis.

If you personally are unable to access an assignment website due to a temporary internet outage on your end, all of the due dates and times remain unchanged (plan ahead!).

If the main course webpage is inaccessible to all students, all due dates and times remain unchanged. (It is hosted by the EECS department, not by the professors personally, and occasionally exhibits service interruptions.) If it is down for a longer period of time, the course staff will likely extend a deadline slightly and post a notification.

If the course staff are unable to deliver a lecture at the scheduled time (i.e., if it fails for all students), no live participation grades for that lecture will be counted. If the lecture has not started within fifteen minutes of the scheduled time, you may consider it canceled. The course staff will post a notification and deliver the lecture later. No attendance will be taken at that make-up time, and the lecture recording will be made available as usual.

If you personally are unable to attend a lecture (e.g., if your internet access disappears), send proof (e.g., a photo of the dead router or network selection screen) to EECS481Staff@gmail.com.

With these policies, we are attempting to strike a balance between being as supportive as possible of students and remote education will holding students to similar standards of preparation and accountability. We may revisit these policies later in the semester if there are extenuating circumstances.

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.

Reading and Comprehension

To encourage you to keep pace with the material, we will randomly assign reading comprehension quizzes. These quizzes may consist of elements such as (1) comprehension questions about any readings, especially those new since the last quiz, (2) questions about the lecture materials, (3) a 4-sentence summary of lecture material, or (4) a random code word shared during a lecture. You will have a 48 hour window to submit such on-line quizzes (which are announced via their visibility on Gradescope). The goal is to encourage engagement and retention.

Students are required to make use of course websites (such as Piazza and Gradescope) and check them for updates. Some information, including information about certain quizzes and assignments, and any last-minute changes or fixes to assignments or policies, is made presented on them.

One of the most common student complaints is about buying textbooks that are both expensive and out of date. As a result, I have structured this course 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. Next to each such optional reading I have included a small "advertisement" for why you might want to take a look. The optional readings are not required for any class assignments, but there may be extra credit questions on exams or quizzes that reference them.

For on-line reading comprehension quizzes, you will have a 48 hour period near the lecture period to begin your reading quiz (which are announced via their visibility on Gradescope). Once you begin the quiz, you will typically have 10 minutes to complete it. For in-person reading quizzes, we will pass out paper quizzes in class and you will complete them in-class within a set period of time (such as 5 or 10 minutes).

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 grading breakdown is as follows:

  • 1% Homework 0 — Dev Setup (Optional)
  • 10% Homework 1 — Test Coverage
  • 10% Homework 2 — Test Automation
  • 10% Homework 3 — Mutation Testing
  • 10% Homework 4 — Defect Detection
  • 10% Homework 5 — Debugging Automation
  • 15% Homework 6 — Contribution
  • 5% Comprehension Quizzes
  • 5% Participation and Professionalism
  • 12% Examination 1
  • 12% Examination 2

By default, this class has no curve. If we do implement a curve, we only ever curve up. If we do implement a curve, it would be calculated at the end of the semester (and not on a per-each-assignment basis).

How To Calculate Projected Grades

For each category in the grading breakdown above, add together all of your points and divide by the total number of points. Then you weight each category as listed above.

For example, if HW1a is 20 points, HW1b is 12 points, HW1c is 14 points, and HW1d is 5 points, you would add up your points from those four sources and divide by 51. That result would be your overall HW1 score, which (following the breakdown above) is 10% of your grade in the course. There are no secret tricks or hidden weightings, all of the grading is based just on the numbers you can see. Similarly, suppose, hypothetically, that there are only two reading comprehension quizzes: the first worth 3 points, the second worth 4 points. You would add up your points, divide by 7, and that would be your total for the Comprehension Quizzes portion of your grade (which is 5% of your total course grade).

As an example, suppose only HW1 and two reading quizzes have happened so far (as above). A student who scored 19, 11, 13, and 4 on the HW1 parts would have (19+11+13+4)/51 = 92% on HW1 overall. If that student also scored 1 and 3.5 on the two quizzes, that student would have (1+3.5)/7 = 64% on the quizzes. The projected grade would thus be (10%*92 + 5%*64) / 15% = 83% (a "B" grade in this course). Note that the actual course grading does not round for intermediate calculations and instead uses floating point numbers.

Students often wonder what grade will be needed on subsequent assignments to pass the class (or meet any other goal). This can be computed with linear algebra. Continuing the previous example, suppose the student with an 83% "so far" on 15% of the course wants to get an 93% ("A") grade overall. What score, Z, would the student need on the remaining 85% of the course material for the total to be 93? The student solves the equation 83*15 + Z*85 = 93*100, or Z = (93*100 - 83*15) / 85, yielding Z = 95. So the student would need to get about 95% on the rest of the course material to have an overall score of of 93%. A grade projection service is typically not available, but students can project grades and resolve queries directly using mathematics.

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 possible (if a request absolutely cannot be made via Gradescope for a certain assignment or exam, please submit it privately to the course staff). 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, we can be very lenient about extensions or makeups but only 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. You may email EECS481Staff@gmail.com with supporting documentation (rather than posting it to Gradescope).

If you miss an assignment deadline without an approved, documented extension, you may receive no points. for that assignment. In some extenuating cases you may receive h% off, where h is the number of hours late.

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 us via email at EECS481Staff@gmail.com (privately) at least one week before the date of the examination. Note that requests need not be granted.

All course materials submitted for a grade must be turned in by midnight on the last date listed on the course syllabus.

The Waiting List, Course Permission, Overrides

Historically, the single most common student question about this class relates to the waiting list. The question is some variant of (or logically reduces to) "I am currently at position X on the waiting list; am I likely to get in to the class before the deadline?"

  • If you are on the waiting list or add the course late, you must complete any assignments and bring me any forms (e.g., SSD forms) as if you were a registered student.
  • If you add late or come in off the waiting list, all of the assignments are due for you at the usual time, with no extension.
  • If you are on the waiting list and do not have access to the Autograder or Gradescope submission websites, please email the course staff.
  • It is my firm intention to fill the class up to the enrollment limit with students from the waiting list, in order. There are two relevant details:
    1. Obnoxiously, the system keeps two separate orderings: one for the lecture and one for the discussion sections. We try to use the lecture ordering.
    2. The undergraduate advising office may direct that certain students be let in (or swapped between electives or sections or whatever) so that everyone can graduate on time. This is basically the only reason we would not use the default waiting list ordering.
  • For various reasons, students may be let in to this course every few days, in batches, not every minute. If you are first on the waiting list and the course is currently at 99/100, rest easy: you will be let in to the course in the next batch.
  • Although your apparent deadline to sign up for courses is Day X, if you are on the waiting list for this class and a slot opens up after that date, you will still be added. Punam Vyas, the Course Scheduling Coordinator, adds students to this class manually from the waiting list, and she has the power to add students after Day X even though you do not. Yes, it is scary to trust that you will be added to a course after the manual student deadlines.
  • If you are a graduate student, know that the EECS undergraduate advising office policy is that graduate students may only be allowed to take the course for credit after all undergraduates are off the waiting list. There is a special list the graduate students can sign up on; contact the CSE Undergraduate Advising Office (ugadmin@eecs.umich.edu) for more information. (This may not be the policy I, personally, would make, but it is the current policy. Yes, this makes it very unlikely for a graduate student to take this class for credit.)
  • Regardless of your enrollment status, you are welcome to sit in on the class. Anyone who is interested may attend the lectures.

Now, for the most common student question:

  • The first time this class was offered, it started with 100/100 students enrolled and 60 on the waiting list. By the time things settled down, we ended up with 102/100 students enrolled and 20 on the waiting list (i.e., 20 who did not get in). (The "extra" students relate to that advising office exception detailed above.)
  • The second time this class was offered, it started with 120/120 students enrolled and 22 on the waiting list. It ended with 118/120 and 0 on the waiting list.
  • The third time this class was offered, it started with 154/154 students enrolled and 58 on the waiting list. At the add/drop deadline, it had 153 students enrolled and 0 on the waiting list.
  • The fourth time this class was offered, it started with 157/160 students enrolled and 85 on the waiting list. At the add/drop deadline, it had 156/160 student enrolled and 35 on the waiting list.
  • The fifth time this class was offered, there were two sections. We had a total of 245 student enrolled out of 258 slots after the add/drop deadline.
  • In Fall 2021, there were 151/154 students enrolled with 78 on the waiting list on the first day of class. By the middle of the semester, enrollment was 156/154 with 0 students on the waiting list.

Unfortunately, I have no special insight here (i.e., it has never happened that a student has said to me "I plan to drop in X days but won't drop today", so I do not have any secret information about the plans of other students to drop or not). The best we can do is use the past to predict the future (see raw data above).

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 independent study projects, senior projects, paid research work over the summer, research work for credit, and graduate school.