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:
- ITS Sites @ Home (long-term laptop loan program)
- ITS Tech Help (technical support, repair services, short-term laptop loans)
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:
- Advanced Programming:
Building on prior programming experience, we cover advanced programming techniques to complete students essential toolkit. Topics include polymorphism, composition, metaprogramming, exception safety, resource management, and concurrent programming. - Principles of Software Design:
We explore fundamental principles of effective software design, including a particular focus on developing effective abstractions and managing the connections and coupling between them, from which other principles, practices, and patterns can be derived and critiqued.
Learning Outcomes
During/after the course, students will be able to...
- ...apply advanced programming techniques to authentic, complex software problems.
- ...develop fundamental reasoning skills for analyzing/writing concurrent software.
- ...appreciate the tradeoffs involved in various approaches to software design.
- ...write more robust, flexible, and maintainable code.
- ...evaluate and explain software quality according to fundamental principles.
- ...identify and implement improvements to poor or overly-complex codebases.
- ...recognize when (and when not) to use established heuristics and design patterns.
- ...engage in continuous improvement and collaborative professionalism in software design.
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
TODOSubmission and Grading
Responsibility and Honor Code
Grades
TODOAssignment 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
TODOWe 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
TODOAdditionally, the use of generative AI in a deceptive or malicious fashion is prohibited. This includes but is not limited to:
- Impersonating yourself or others in course contexts, for example in emails, virtual office hours, or online course forums.
- Passing off generated content as your own work when contributing to group assignments. Be open with your group members.
- Using generative AI to facilitate harassment of others.
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:
- The course instructors submit an official report to the Honor Council.
- The Honor Council notifies you of the report, and explains the next steps of the process. You receive a copy of the report, including the evidence of the suspected violation.
- The course instructors play no role in adjudicating reported cases.
- The Honor Council notifies course instructors when your case is resolved. Any penalties they prescribe are applied to your grade. If you are found not responsible, your grade is unaffected.
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.