Software Engineering

How do we best work in teams to build software reliably and predictably that users love?

← Back to Teaching

Course Philosophy

Most software is built by teams, yet most CS courses focus on individual work. This course is experiential—students learn by doing, building real products in agile teams using modern tools and practices. The goal isn't just to write code, but to ship software that solves real problems, together.

Topics Covered

  • Agile methodologies and the agile manifesto
  • Team formation, retrospectives, and collaboration practices
  • User testing and user-centered development
  • Multi-team software development and coordination
  • Stories, estimation, storypoints, and velocity
  • Working with real clients and managing backlogs
  • Modern web development with React, TypeScript, and Firebase
  • Self-paced React labs: fundamentals, TypeScript, testing, and Git/GitHub workflows
  • Harness Engineering and agentic AI tools for client-oriented development
  • AI-assisted coding and development workflows
  • Git-based collaboration and contribution tracking
  • Testing strategies including unit and end-to-end testing
  • Burndown charts, metrics that matter, and team dashboards

Example Projects

  • Startup simulation: ideation to deployed product in five weeks
  • Multi-team client project serving a real external customer
  • User testing and iteration based on real feedback
  • Building and analyzing team development dashboards

Public Artifacts & Links

About This Course

Overview

CS394 at Northwestern University explores how teams build software reliably, predictably, and in ways that users love. Since the 1960s, software engineering has studied how humans work together to produce code that solves problems. This course brings those lessons to life through two intensive team projects grounded in agile practices.

Learning Outcomes

By the end of this course, students will:

  • Have hands-on experience building software in agile teams with real deadlines and real users
  • Understand and apply agile practices: sprints, retrospectives, user stories, estimation, and velocity tracking
  • Ship a working product built in React/TypeScript with Firebase, deployed and publicly accessible
  • Master React, TypeScript fundamentals, and testing disciplines through focused self-paced labs
  • Conduct user testing, interpret feedback, and iterate on a product
  • Navigate the challenges of multi-team coordination on a shared client project
  • Apply Harness Engineering principles and agentic AI tools effectively in professional development workflows
  • Use Git and GitHub effectively for team-based development, with meaningful individual contributions tracked through commit history
  • Develop opinions—grounded in experience—on how to run a team software project well
  • Be prepared to pass an entry-level full-stack technical interview

Course Structure

The course is built around two major team projects, not lectures. The first project is a startup simulation where small teams go from ideation through four-panel storyboards to a deployed, user-tested product in about five weeks. Students also complete a self-paced lab component (5-7 focused labs) covering React fundamentals, TypeScript best practices, advanced Git and GitHub workflows, and testing techniques for AI-aided development.

The second project introduces the complexity of real-world development: multiple agile teams coordinate to build software for an actual external client, with a heavy emphasis on Harness Engineering techniques using agentic AI tools. Teams navigate shared architecture, inter-team dependencies, client communication, and modern AI-assisted development practices.

Who Should Take This Course

  • CS majors and masters students at Northwestern, ideally toward the end of their degree
  • Students with solid programming fundamentals (CS214 or equivalent) and experience in multiple languages
  • Those willing to invest significant time coordinating with teammates and, in the second project, with external clients
  • Anyone ready to learn by doing—showing up, contributing code, and engaging fully with their team

Course Materials & Resources