48. Software design and architecture
Design larger programs using modules, interfaces, dependency direction, cohesion, coupling, layering, and architecture patterns. You will practice making codebases easier to change without turning every choice into over-engineering.