Software Engineering

We teach undergraduate software engineering as a tandem of courses:

  • CS-305: Software Engineering (SwEng), in the Fall semester, and
  • CS-305(a): Software Development Project (SDP), in the Spring semester

Together, they cover the basics of modern software development, focusing on techniques and practices used to build computer software that meets high standards of quality, reliability, security, and maintainability.

All course materials are hosted in our public repo. All EPFL-specific details appear below.

The two courses are designed to be taken as a sequence. If a student already masters the SwEng material, taking SwEng is an easy refresher; if not, then succeeding in SDP is highly improbable. Therefore, students can either take SwEng on its own, or SwEng together with SDP. If you insist on taking SDP without taking SwEng before, you must first contact us and explain why.


We have a joint team shared between CS-305 and CS-305(a):


Prof. George Candea

TAs & AEs

Sahand Kashani Betty Pirelli Solal Pirelli


CS-305: Software Engineering (SwEng) covers the basics of the theory of software development and then solidifies the concepts from lecture through small exercises.

  • 4 credits = 2 lecture + 1 exercise + 1 project
    • see schedule for day, time, and location of lectures
    • a mix of standard lectures and guest lectures from industry and academia
    • two exams given in the lecture slots (contrôle continu)
  • Exercises
    • consist of “theory” questions plus little programming exercises to be done on students’ personal laptops, using students’ own GitHub repo as the place to push/pull
    • exercises bridge the gap between lectures and the real-world project done in SDP (see below)
    • for each week, there is an exercise set (not graded) that covers that week’s topic
    • this exercise set can be started immediately after lecture (see schedule for day, time, and location)
      • staff are available to answer questions
      • solutions are available as well, but we recommend that students do not look at them until after having solved the exercises on their own
      • we do not draw a distinction between the exercises and the project component
    • Completing the exercises will take longer than the 2-hour session. This session is meant to be a structured setting where you can seek assistance from the instructor and TAs. You are not obligated to do your work during that time period. However, this time slot will be used for exams, so please don’t plan any other activities during this time.

CS-305(a): Software Development Project (SDP) is where the concepts taught in SwEng get to be implemented in practice, and students get to be exposed to the issues related to team­-based software development. Students design and build an Android app (see SDP project requirements) as a team, coached by a pair of staff members.

  • each team receives a coaching team of 2 staff members
  • weekly 1-hr meetings with the coaching team (see schedule for day, time, and location)
    • rigorously structured sprint debrief and sprint planning
    • meetings are focused on product management aspects and development process
      • therefore, no tech support support given during these weekly meeetings
  • help and supervision of the teams happens over the course of the week through email and Slack
    • all technical support issues are handled in this way (Android, Github, managing issues, etc.)
  • “Battle of the Apps” competition at the end of the semester

Other than the lectures and specific materials handed out to you, there are no required textbooks. You might consider acquiring Code Complete: A Practical Handbook of Software Construction (2nd edition) by Steve McConnell, Microsoft Press, 2004 (online version free for EPFL) – this is considered a “bible” by many software developers. Unfortunately it is very old.

The authoritative source of information for the course will always be this website. From here we will link to the rest of the course resources.

We use Piazza for online class discussions. This forum can provide assistance quickly and efficiently from classmates and the course staff. Rather than emailing questions to the teaching staff and risking that your message gets lost in their inbox or that their answer is delayed, post questions of general interest on the forum. If you have a question that is of a private nature (e.g., you have a medical problem and cannot come to the exam) that should only be seen by the course staff, then please come talk to us or send an e-mail to


SwEng and SDP carry 4 units of ECTS credit each, which corresponds to a typical workload of ~120 hours per semester per course. For individual students, the actual time to achieve the learning outcomes will vary, so please budget ~20 hours/week for the two courses.

Your SwEng grade is based approximately on two exams, weighted 40% for the midterm and 60% for the final exam. We reserve the right to adjust grades in cases that warrant this.

  • exams consist of a mix of programming tasks and theoretical exercises
  • individual exams are curve-graded, and the final course grade is rounded to the nearest quarter-point, in accordance with EPFL’s grading system
  • see schedule for dates, times, and location of exams
  • exams are taken on students’ laptops, using GitHub as the place to turn in the exam (private repo provided by SwEng staff)

Your SDP grade has roughly two components. We reserve the right to adjust grades in cases that warrant this.

  • 50% based on the team grade, which is determined as follows:
    • 1/3 – Functionality – The behavior of the app. Does it accomplish a compelling, interesting, useful, or entertaining task? Is it attractive? Is it easy to use? Would I want to use it?
    • 1/3 – Correctness – Does the app work properly? Does it produce correct answers? Does it handle incorrect inputs and intermittent connectivity properly? Is the app resilient against malicious attacks? Does it handle intentionally malformed input properly? Are there sufficient test cases to demonstrate these properties?
    • 1/3 – Maintainability – Is the code clearly written? Are the abstractions well thought out? Does the code follow defensive programming practices? Does it follow a coding convention? Does it use design patterns where appropriate? Are the test cases complete enough to allow for safe refactoring?
  • 50% based on your individual grade
    • determined by features implemented by you, as observed in team meetings and in the committed code, and by the tests you wrote
    • please make sure to commit yourself the code that you write, do not send it to one of your teammates to incorporate – Git is specifically designed for exactly this use case
    • we will also seek input from your team mates on your performance, so please make sure that you are a valuable member of the team: you do your job, you help others, and you proactively work toward your team’s success.

A team that does a minimal amount of work and produces a barely functioning app will see many points disappear. This may seem unfair to a hard-working member of the team, but it is the way the real world works. As Fred Brooks once said, “there are no winners on a losing team”. Part of this project, like any team exercise, is to work effectively with the other people and get them to do their best work.


The following courses are obligatory prerequisites for taking SwEng. Furthermore, students must already be highly versed in Java programming and debugging. It is not acceptable to take SwEng without having solid knowledge of the material below.

SwEng is an absolute prerequisite for SDP, which transitively means that the SwEng prerequisites apply to SDP as well. SDP should be taken in tandem with SwEng. For SDP, students must be absolutely fluent in Java and be comfortable on the Android platform.

Here is the coursebook information for SwEng and for SDP.

Collaboration policy

We encourage you to discuss the course materials − both lectures and exercises − with your peers. The exams however must be entirely your own work. Cheating, plagiarism, and any form of dishonesty will be handled with maximum severity. If you are ever in doubt about whether an action on your part may constitute unacceptable collaboration, please ask the course staff before proceeding, because doing so afterward is too late.