This course is very different from a typical lecture-based teaching experience. Few lecture sessions are organised and the students are put in teams where they are immersed in a industry-like project. Every 3 to 4 weeks, teams deliver a shippable product that they demonstrate and review with the product owner and other teams. Technical workshops are organised to teach about continuous integration (and a little bit of DevOps), code review and unit and automated acceptance testing (including Test-Driven Design).
During a sprint (name for a Scrum iteration), each team needs to negotiate their sprint backlog with the product owner and must implement all other classic Scrum event (i.e. standups, retrospective, plannings). They also practice continuous integration and deployment practices where they need to automatically deploy on a dedicated server, keeping static code analysis tools happy together with good automated (and manual) testing indicators.
As the year goes, teams are usually encouraged to tweak their product with their own vision to differentiate themselves from the other teams to incorporate more craft and creativity to the course (after the students have practised their other more “classical” software engineering skills).
Additionally to formal retrospectives, each team member must reflect individually and about their teammates in self- and peer-reflection after each sprint.
More details available on the official course page.
See also the ScrumBoard project that was developed to support this course and the Software Engineering Education research group that looks into how to improve the teaching and learning of software engineering practices in the large.