
Most software outlives the assumptions it was built on. Requirements evolve, teams change, and the world around your code shifts in ways you didn't anticipate. This course teaches you to write software that can adapt—code that remains understandable, modifiable, and valuable over its entire lifecycle. You'll learn to think beyond immediate correctness to consider sustainability in multiple dimensions: technical longevity, economic viability, and the broader impacts your software has on its users and society.
The assignments in this course center on CookYourBooks, a desktop application you'll build from domain model to polished GUI. It's real software—with messy requirements, design tradeoffs, and the need to coordinate with teammates. Midway through, you'll learn to leverage AI coding assistants while maintaining the judgment to know when they help and when they mislead. The work surfaces questions that matter beyond any single assignment:
AI coding assistants can generate code quickly, but they cannot judge whether that code solves the right problem, integrates cleanly, or will be maintainable. We restrict AI tools early while you build foundational competence, then explicitly teach effective human-AI collaboration once you can critically evaluate generated code. Read our full AI policy →
View full schedule →
Monday, Jan 12
8:00 AM - 9:40 AM
Lab Section 05: Lab 2: Java Abstraction and Data Types
📍 WVH 210A
9:50 AM - 11:30 AM
Lab Section 06: Lab 2: Java Abstraction and Data Types
📍 WVH 210A
9:50 AM - 11:30 AM
Lab Section 07: Lab 2: Java Abstraction and Data Types
📍 WVH 210B
10:30 AM - 11:35 AM
10:35 AM - 11:40 AM
Section 01: Inheritance and Polymorphism in Java II
📍 Oakland, CA (TBD)
11:45 AM - 1:25 PM
Lab Section 08: Lab 2: Java Abstraction and Data Types
📍 WVH 210A
11:45 AM - 1:25 PM
Lab Section 09: Lab 2: Java Abstraction and Data Types
📍 WVH 210B
11:45 AM - 1:25 PM
Lab Section 10: Lab 2: Java Abstraction and Data Types
📍 WVH 212
1:35 PM - 2:40 PM
Section 02: Inheritance and Polymorphism in Java II
📍 Oakland, CA (TBD)
1:35 PM - 2:40 PM
1:35 PM - 2:40 PM
3:25 PM - 5:05 PM
Lab Section 11: Lab 2: Java Abstraction and Data Types
📍 WVH 210A
3:25 PM - 5:05 PM
Lab Section 12: Lab 2: Java Abstraction and Data Types
📍 WVH 210B
3:25 PM - 5:05 PM
Lab Section 13: Lab 2: Java Abstraction and Data Types
📍 WVH 212
4:35 PM - 5:40 PM
5:00 PM - 7:00 PM
Afrah OH
5:15 PM - 6:55 PM
Lab Section 14: Lab 2: Java Abstraction and Data Types
📍 WVH 210A
7:00 PM - 9:00 PM
Abhishek Tuteja ( Virtual)
8:00 PM - 10:00 PM
Pratham OH (Virtual)
9:00 PM - 11:00 PM
Avery Neuner
📍 Virtual
9:00 PM - 11:00 PM
Avery Neuner (Virtual)
10:00 PM - 12:00 AM
Ran Fukazawa (Virtual)
Tuesday, Jan 13
12:00 AM - 3:00 AM
Edward Chan (In-Person)
📍 Snell Library Group Study 130T
10:35 AM - 12:15 PM
Lab Section 04: Lab 2: Java Abstraction and Data Types
📍 M41 212
12:25 PM - 2:05 PM
Lab Section 01: Lab 2: Java Abstraction and Data Types
📍 M48 102
3:00 PM - 4:40 PM
Lab Section 02: Lab 2: Java Abstraction and Data Types
📍 M48 102
3:00 PM - 5:00 PM
Shivang Patel OH (Virtual)
3:30 PM - 5:30 PM
Manav Dhamani OH (virtual)
3:30 PM - 5:30 PM
Rohan Kumar OH (Virtual)
7:30 PM - 10:30 PM
Edward Chan (In-Person)
📍 Snell Library Group Study 130U
9:30 PM - 11:30 PM
Sam Schumacher OH (virtual)
10:00 PM - 12:00 AM
Zainab Imadulla OH (virtual)
11:00 PM - 1:00 AM
Prakriti Timalsina OH (Virtual)
📍 Virtual
11:30 PM - 12:30 AM
Carmen OH
📍 Virtual
Wednesday, Jan 14
12:30 AM - 2:00 AM
Vivaan Lunkad
10:30 AM - 11:35 AM
10:35 AM - 11:40 AM
Section 01: Specifications and Common Contracts
📍 Oakland, CA (TBD)
1:35 PM - 2:40 PM
Section 02: Specifications and Common Contracts
📍 Oakland, CA (TBD)
1:35 PM - 2:40 PM
1:35 PM - 2:40 PM
2:00 PM - 4:00 PM
Lauren OH (Virtual)
📍 Virtual
3:00 PM - 5:00 PM
Pratham OH (Virtual)
3:30 PM - 5:00 PM
Prof Shesh (Prof Shesh queue)
4:35 PM - 5:40 PM
6:00 PM - 8:00 PM
Jessica Teurn (Virtual)
7:00 PM - 9:00 PM
Prakriti Timalsina OH (Virtual)
📍 Virtual
7:30 PM - 9:30 PM
Sam Schumacher OH (virtual)
9:00 PM - 11:00 PM
Avery Neuner
📍 BK 750
9:00 PM - 11:00 PM
Avery Neuner
📍 BK 750
10:00 PM - 12:00 AM
Ran Fukazawa (Virtual)
10:00 PM - 12:00 AM
Ran Fukazawa (In-person)
📍 CPM 200
11:00 PM - 1:00 AM
Sahil Chute
📍 Hastings 111
11:00 PM - 1:00 AM
Amber Friar
📍 Cahners 008
Thursday, Jan 15
1:00 AM - 2:00 AM
Vivaan Lunkad
10:30 AM - 11:35 AM
10:35 AM - 11:40 AM
Section 01: Functional Programming and Readability
📍 Oakland, CA (TBD)
1:35 PM - 2:40 PM
Section 02: Functional Programming and Readability
📍 Oakland, CA (TBD)
1:35 PM - 2:40 PM
1:35 PM - 2:40 PM
2:00 PM - 4:00 PM
Edgar Castaneda OH (virtual)
4:35 PM - 5:40 PM
9:00 PM - 12:00 AM
Sean Snaider In Person OH
📍 Snell Library Group Study 130R
10:45 PM - 12:45 AM
Aditya Vij (virtual)
10:59 PM - 11:59 PM
Due: Assignment 1: Recipe Domain Model
11:00 PM - 12:00 AM
Amber Friar
📍 Virtual
Friday, Jan 16
6:00 PM - 7:00 PM
Jessica Teurn (Virtual)
6:30 PM - 7:30 PM
Carmen OH (Virtual)
8:00 PM - 10:00 PM
Afrah OH
10:30 PM - 12:30 AM
Sahil Chute(Virtual)
10:45 PM - 12:45 AM
Aditya Vij (virtual)