EECS 498: Advanced Programming and Principles of Software Design

The University of Michigan, Winter 2026

Advanced programming techniques including polymorphism, composition, metaprogramming, exception safety, resource management. Multithreading, asynchronous control, and structured concurrency. Core principles of effective software design, including abstraction and coupling, and their realization in design patterns across programming languages and paradigms.

Instructors

James Juett <jjuett@umich.edu>

Course Overview

Lectures are offered in-person, with recordings posted for review.

Labs are held in-person, with a mix of pragmatic tutorials, coding practice, and group software design exercises. You'll also meet briefly with a staff member for project checkpoints during your lab session.

Attendance at both lecture and lab is required for credit. Due to space constraints, you must attend your registered sections.

Projects focus on incremental development of a single, large-scale codebase. You'll complete the first portion individually, then combine to work in a consistent group of 3 for the remainder of the term.

Exams will be in-person, on-paper, at a scheduled time.

Office hours are held in-person and/or virtually. The primary intent is to provide a place for discussion, guidance, and feedback (and not necessarily for debugging support).

Communication

The course website at eecs498-software-design.org links to all course resources.

The course Discord Server is best for technical questions, discussion about course concepts and assignments, and connecting with other students, course staff, and alumni.

For extensions/exceptions, alternate exam scheduling, etc., please submit an administrative request via eecs498-software-design.org.

For other questions or concerns, email the course staff at eecs498-software-design@umich.edu.

You may reach out to course faculty directly for sensitive concerns.

Canvas is where we publish important announcements and grades. It is your responsibility to verify you can receive Canvas announcements. Please do not send messages to instructors via Canvas. It is difficult to track these messages and we want to ensure you receive a prompt reply.

Diversity and Inclusion

We care about our course community and want it to be a place where all students feel included, valued, and safe to learn from and with others. Diversity of thought and of people are important to us. We ask that you treat all other students with respect and work to create an inclusive community, and we hold ourselves to the same standard. Please feel free to contact us with any problem, concern, or suggestion. You may also report any concerns or misconduct via the resources linked at https://cse.engin.umich.edu/about/reporting-concerns-and-misconduct/.

Computing Equipment

We recommend you have a personal laptop consistent with CAEN recommendations.

Test your internet connection with the U-M Custom Speedtest website and make sure it meets the minimum requirements for any UM service. You'll need more bandwidth if there will be multiple simultaneous users in your household.

Resources for help with computing equipment:

You may also use computer workstations in CAEN labs on campus or connect remotely.

Curriculum

As the course title suggests, we cover two deeply interconnected topics:

Learning Outcomes

During/after the course, students will be able to...

Textbook

The course does not require or recommend any particular text. There is no well-recognized, authoritative resource for software design principles. We recommend thoughtful engagement and critique of published works in the area, which tend to vary dramatically in quality.

Technical reference materials such as the Typescript Handbook or documentation for various libraries and frameworks are freely available online.

Prerequisites

Coursework

EECS 281 with a minimum grade of "C". Contact the CSE Advising Office in 1270 Leinweber or at ugadmin@eecs.umich.edu.

Skills

Sufficient programming fluency - the course focuses on advanced techniques and software design principles, and our approach and pacing presumes you're already proficient in reading and writing code. If you earnestly engaged in projects in previous courses and found them approachable, you've got what you need. If you've used AI coding tools for a significant portion of previous coursework, you'll likely get less out of this course.

Exams

There will be one midterm exam and one final exam, administered in-person, on-paper, at a scheduled time. Exam dates are posted in the schedule on eecs498-software-design.org.

Alternate Exams

We may provide alternate exam times for students with a valid, documented conflict with a required activity in another course or official university-affiliated activity, or to help students avoid negative academic consequences when their religious obligations conflict with academic requirements.

We also provide alternate exams in cases of unanticipated medical or personal emergencies.

All requests for alternate exams must be submitted through the administrative form linked on the course website.

Labs

Lab sessions are 110 minutes, starting at the scheduled time. Labs involve a mix of pragmatic tutorials, coding practice, and group software design exercises. Make sure to bring a suitable laptop or tablet to lab.

Attendance, participation, and completion of lab exercises is verified by course staff and recorded for credit. (See our grading policies section for information on lab drops.)

During most labs, you'll meet briefly with a staff member to review a project checkpoint, worth credit toward your project grade.

You may leave early if you have completed all lab exercises and the project checkpoint.

Projects

The course focuses on incremental development of a single, large-scale codebase. You'll complete the first portion individually, then combine to work in a consistent group of 3 for the remainder of the term. We'll share more information in lecture about the structure of the projects.

Project Groups

TODO

Submission and Grading

Responsibility and Honor Code

Grades

TODO

Assignment Weighting

We calculate your total weighted score using these weights.

Assignment Weight
Lecture 5%
Lab 5%
Projects 45%
Midterm Exam 22%
Final Exam 22%
Entry and Exit Surveys 1%
Total 100%

Grading Policies

Lecture Attendance
Each lecture is worth equal weight. You may miss up to 4 lectures and still earn full credit.

Lab Absence
If you must miss a lab due to e.g. a planned medical procedure, unanticipated emergency, or official university conflict, you may submit at administrative request for an excused absence.

Project Checkpoint Drops
We drop the lowest 2 project checkpoints for each student.

Grade Adjustments

Since this is the first offering of the course, curving policies or other grade adjustments are yet to be determined. Our goal is that grades in this course will be distributed in a way that authentically represents mastery of learning objectives and that is generally consistent with other upper-level computer science electives. We also recognize that population of students taking the inagural offering of a course may involve self-selection effects and are not committed to a grade distribution of any particular shape.

Exact policies will be determined after the midterm exam and posted well in advance of the course withdraw deadline.

Curving

We may curve exams individually, for example, if an exam is significantly more difficult than planned.

We may curve or otherwise adjust project scores, for example, if it turns out the point distribution in our rubric is miscalibrated or has insufficient resolution.

Generally speaking, we won't "curve down" on anything.

Minimum Pass Thresholds

To pass the course with a C or better, your total weighted project score must meet a certain threshold, and your total weighted exam score must meet a certain threshold. Otherwise, the maximum grade you may earn is a C-. The precise thresholds are to be determined. The policy is to ensure sufficient mastery of course material as measured in both contexts (and will only affect students with vastly different scores on projects vs. exams).

Letter Grades

After computing the total weighted score and considering the minimum pass thresholds, we use these ranges to assign letter grades. Each range is half-inclusive, for example a score of 89.999% is a B+ and a score of 90.0% is an A-.

We do not curve the course overall or otherwise adjust letter grade thresholds.

Total weighted score Letter grade
0 - 50% E
50 - 60% D
60 - 70% C-
70 - 77% C Must Meet Minimum Pass Thresholds
77 - 80% C+
80 - 83% B-
83 - 87% B
87 - 90% B+
90 - 93% A-
93 - 97% A
97 - 100% A+

Extensions and Exceptions

We do not accept late work. Project and lab submissions are not allowed past the published deadline, except in the circumstances outlined below.

Submit extension/exception requests via the administrative request form at eecs498-software-design.org.

Planned Exceptions. We will consider extension requests made at least two weeks in advance, for example, for religious holidays or planned medical procedures.

Emergencies. If you experience a medical or personal emergency, please reach out to us! We will consider exceptions on a case-by-case basis. Please provide documentation of the emergency. Requests must be made at least 24 hours before the assignment deadline, unless the emergency prevents prompt communication to course faculty or staff.

Regrades

Exams are graded by hand. We will provide an opportunity to request a regrade to correct grading errors. We will regrade the entire problem and fix any mistakes (your score may go up or down).

Scores for lecture, lab, and project checkpoints are posted on Canvas. Please report any clerical errors.

Projects are graded by hand. We understand that grading software design is nuanced and potentially subjective. TODO

In all cases regrade requests are due no later than 7 days after a grade is released unless a shorter deadline is specified.

Academic Integrity

TODO

We encourage collaboration, especially on concepts, tools, specifications, and strategies.

All work you submit must be your own or your partnership's. Collaboration must not result in code that is identifiably similar to other solutions, past or present.

You are still responsible for following these rules even after finishing the course.

If you are unsure about what constitutes an honor code violation, please contact the course staff with questions.

Code Reuse

If you are retaking the course, you may reuse your own code, provided it was wholly written according to the rules outlined in this syllabus. It is possible for instructors to miss an honor code violation in a previous term, but catch and report it when the code is reused.

Code Publishing

You may not make your code publicly available in any form, for example in a public GitHub repository or personal website. You are still responsible for following these rules even after finishing the course.

Generative AI Policy

TODO

Additionally, the use of generative AI in a deceptive or malicious fashion is prohibited. This includes but is not limited to:

Honor Council Process

We report suspected violations to the Engineering Honor Council. To identify violations, we use both manual inspection and automated software to compare present solutions with each other, with past solutions, and with code found online. The Honor Council determines whether a violation of academic standards has occurred, as well as any sanctions. Read the Honor Code for detailed definitions of cheating, plagiarism, and other forms of academic misconduct.

Here's what you can expect if you are reported for an Honor Code violation:

If you have a pending honor council case at the end of the term, you receive an "I" (incomplete) grade until the case is resolved. We will send you a grade projection via email to help with planning. Your grade is updated once the case is resolved. The "I" should not remain on your transcript.

Course Policies

Commitment to Equal Opportunity

As indicated in the General Standards of Conduct for Engineering Students, we are committed to a policy of equal opportunity for all persons and do not discriminate on the basis of race, color, national origin, age, marital status, sex, sexual orientation, gender identity, gender expression, disability, religion, height, weight, or veteran status.

Resources for Student Support

The CSE department maintains a listing of resources for student support, including University and College of Engineering resources as well as student organizations.

Students' Health and Well-being

If you or someone you know is feeling overwhelmed, depressed, and/or in need of support, resources are available via University Health & Counseling at https://uhc.umich.edu. All counseling services and most medical services are free for students. You may reach out to Counseling and Psychological Services (CAPS) at (734) 764-8312, including a 24/7 after-hours support line for urgent mental health concerns. If you or someone you know is experiencing an emergency, call 911 or go directly to the nearest hospital emergency department. You can also call or text the national suicide and crisis lifeline at 988.

Wolverine Support Network

Another resource available to you as a U-M student is Wolverine Support Network, a student organization offering free peer-facilitated weekly groups on campus. With 30+ groups per week, students are placed in a group at a time and location most convenient for them. Trained students lead groups to promote students' well-being and build community in an accessible, confidential, and inclusive environment. For more information and to sign up for a group, visit umichwsn.org/join

Accommodations for Students with Disabilities

We believe all students deserve access to a high-quality, equitable academic experience. Resources and accommodations for students with disabilities are coordinated by Student Accessibility and Accommodation Services (SAAS). If you think you may need accommodations, it is critical to reach out to the Services for Students with Disabilities (SSD) Office as soon as possible so that they can work with you to identify and document appropriate accommodations, and so that instructors are able to work with you to implement them. Any information you provide is treated confidentially.

Recordings

Course lectures may be audio/video recorded and made available to other students in this course. As part of your participation in this course, you may be recorded. If you do not wish to be recorded, please contact your instructor the first week of class to discuss alternative arrangements.

Students may not record or distribute any class activity without written permission from the instructor, except as necessary as part of approved accommodations for students with disabilities. Any approved recordings may only be used for the student's own private use.

Research Disclosure

Your class work might be used for research purposes. No identifying information about you or your work will be published. For example, we may use anonymized student assignments to design algorithms or build tools to help programmers. Or we might survey responses to help us improve the course and better understand instructional techniques. Any student who wishes to opt out can contact the course staff (eecs498-software-design@umich.edu) at any time up to seven days after final grades have been issued. This has no impact on your grade in any manner.