This program equips learners with essential software engineering skills, from writing reliable, well-tested code to designing scalable, maintainable, and robust systems. It emphasizes proven design and architecture approaches alongside a systems-level perspective, preparing learners to build high-quality software solutions that perform effectively in real-world environments.
Overview
Syllabus
- Test-Driven Development
- Gain confidence in your software with Test-Driven Development (TDD). Practice the red-green-refactor loop with Python and pytest—writing tests before you write your code. Learn how unit, integration, and end-to-end tests fit together to provide a comprehensive safety net. Organize clean test suites using advanced techniques: fixtures, mocking, and parameterization. Deploy with confidence at scale by incorporating testing into CI/CD and pre-flight checklists. Leverage TDD to use AI tools the right way—encode your requirements as tests, then let AI help implement the code that passes them. By the end of this course, you will be able to refactor with confidence, catch regressions early, and ship features faster with less risk.
- Design Patterns
- Build a strong foundation in object-oriented design by applying proven software design patterns in Python. Explore creational, structural, and behavioral patterns, and see how each category addresses common challenges in building flexible, reusable, and scalable systems. Learn why these patterns go beyond "common sense" and represent decades of accumulated engineering wisdom. Practice translating abstract ideas into clear, maintainable code. By the end of this course, you will understand how design patterns connect to SOLID principles, dependency injection, and modern AI-assisted development workflows.
- Software Architecture Patterns
- Design systems that scale beyond a single codebase. Learn how to think like a software architect by exploring proven architectural patterns, cloud-native design, and real-world system tradeoffs. Model applications using monolithic and event-driven architectures, diagram complex systems, and understand the foundations of microservices and serverless computing. Design data pipelines and storage strategies, reason about machine learning system architecture, and make informed choices around caching, CDNs, IoT, and blockchain systems. By the end, you’ll be equipped to move from "working code" to well-designed, resilient architectures fit for modern software systems.
- Systems Engineering
- This course introduces Systems Engineering principles, focusing on the lifecycle of complex systems. You will explore key concepts such as system design, architecture, requirements analysis, modeling, and verification. The course covers various system lifecycle models, including Waterfall, V-Model, Spiral, and Agile. You’ll also learn essential tools like SysML for system modeling, risk management, and trade-off analysis. In the final project, you will design and validate a Smart Home Security System, documenting requirements, evaluating design trade-offs, and creating system models. You will also develop a verification and validation plan to ensure the system meets user needs.
Taught by
Laura Morinigo, Afreen Aliya, Liam Stevens and José Cano