Schedule

1
Intro + Contributing to Open Source
Week of September 2
Introduction to course structure, the fundamentals of large software systems, and how to effectively contribute to large software systems.
2
Analyzing and Understanding Large Codebases
Week of September 9
Understanding the architecture of large codebases and recognizing real-life applications of design patterns in a large codebase.
3
Operational Non-functional requirements
Week of September 16
What does it mean for a system to be performant? What are the operational requirements that we need to consider when designing a software system?
4
Structural Non-functional requirements
Week of September 23
Considerations to ensure the code quality of the system to enable it to be operated and maintained in quality.
5
Architecture Styles
Week of September 30
Architecture styles govern the way we should build our software system. We'll revisit monolithic architectures, and then dive into components of distributed architectures.
6
Distributed Architecture Styles
Week of October 7
“Microservice architecture” should not be the only buzzword in your arsenal. Let’s go one step up and look at various architectures that we may know and analyze them in the context of non-functional requirements.
7
System Design
Week of October 14
Bringing the past 4 weeks into practice by collaboratively solving some system design challenges. We will draw out propose system architectures and discuss the tradeoffs of different design decisions.
8
Writing Software Architecture Documents Part 1
Week of October 21
10
Writing Software Architecture Documents Part 2
Week of November 4
11
Writing Software Architecture Documents Part 3
Week of November 11
12
Guest Lectures
Week of November 18
Lectures from industry professionals. Topic TBD
13
Guest Lectures
Week of November 25
Lectures from industry professionals. Topic TBD