Skip to content

Lecture Notes

The lecture sequence follows the lifecycle of a software-intensive system while revisiting quality and change throughout the semester.

Unit Topic Central question
0 Introduction What makes software development an engineering discipline?
1 Processes & Life Cycles How should work be organized under uncertainty?
2 Agile & Scrum How can teams learn and deliver incrementally?
3 Requirements Engineering What should the system do, and why?
4 Modeling with UML How can we communicate structure and behavior?
5 Architecture Which high-impact structural decisions shape the system?
6 Design Principles & Patterns How do we reduce coupling and localize change?
7 Clean Code & Refactoring How do we improve internal structure safely?
8 Version Control & Collaboration How do teams coordinate changes and preserve history?
9 Software Testing What evidence supports behavioral confidence?
10 CI/CD & DevOps How do we shorten feedback loops and automate delivery?
11 Quality & Technical Debt How do we reason about non-functional quality over time?
12 Secure Software Engineering How do we engineer for adversarial conditions?
13 Management & Estimation How do we plan while acknowledging uncertainty?
14 Maintenance & Evolution How do systems survive years of change?
15 AI-Assisted SE What changes when foundation models participate in development?

Each note contains learning objectives, core concepts, and an activity or checklist suitable for class discussion.