CS3281&2 - AY2023/24, Semester II

CS3281 and CS3282 (Officially known as Thematic Systems Project I & II for legacy reasons, a more apt name would be Software Engineering in Live Projects) aim to build up your ability to work with software systems currently in-use, to build up your SE capabilities towards levels expected from engineers working at high-end software companies. Special emphasis will be placed on maintainability, efficiency, scalability, and reliability. You will work under the guidance of mentors some of whom are currently working in the industry. Both courses involve working in OSS projects that are currently being used by others.

These two courses are offered in Semester 2 only.

The two courses cannot be taken concurrently. Instead, you'll have to take CS3281 first and come back for CS3282 in a subsequent semester.

  • Reason: Our experience shows that one semester is not enough for students to reach a level where they can do project mentoring and take part in project management (which are important learning outcomes of this courses pair).
  • If you get selected for CS3281, your place in CS3282 is guaranteed in subsequent years.
  • Qualifying project work done in between the two courses can be counted for CS3282. For example, suppose you worked on a certain NUS-OSS project for CS3281 in the semester 2 of this AY. You can continue to contribute to the same project (e.g., do more PRs, review other PRs) over the next 9 months and count that work for CS3282 in the semester 2 of the following AY.
    In fact, continuing work in between the two courses is encouraged and typical, as it helps you to build up your project expertise to match the level expected in CS3282.
  • Typically, you are expected to take CS3281 in your 2nd or 3rd year and CS3282 in your 3rd or 4th year. It is also possible to take CS3281 in the 2nd year and CS3282 in the 4th year (i.e., a gap of 3-semesters in between).

Prerequisites : CS2103/T or CS2113/T (with approval)


  • CS3281

    • Do a major contribution to a medium size OSS project
      Students will be working in teams to add a major feature to one of the NUS-OSS Projects (of your choice) that are mentored by Dr Damith. Those who do well can stay with the project after the course and get promoted to higher positions (e.g., senior developer, area lead) of the project.
  • CS3282

    • Manage a project (take part in project administration, mentor junior developers)
      Take part in managing an OSS project, and mentoring other programmers. This requirement is fulfilled by serving as a senior developer in the NUS-OSS project(s) that you joined in CS3281.
    • Do a small contributions to one or more big OSS projects
      Pick an established external OSS project of your choice and contribute to it in relatively small ways (e.g. bug fixing) while interacting with its developers and learning how the project is run. Optionally, you can contribute to another NUS-OSS project.
    • Build up an SE expertise area
      Pick a few SE-related expertise areas (of your choice) that can enhance your SE career prospects -- a tool/technology e.g. Node.js, Cloud, an aspect e.g. Code quality, a language e.g. Kotlin, Go -- and develop a demonstrable expertise in that area.

[more photos...]

[more photos...]

[more photos...]


  • Each course will have the 4 Units of workload (similar to other regular courses), i.e. 10 hours of workload per week in total.
  • Lectures are compulsory to attend.
    • CS3281 lecture -- MON 1200-1400 in COM1-02-12
    • CS3282 lecture -- THU 1400-1600 in COM1-02-12
  • In addition, you are required to attend a compulsory full-day Code Sprint (under CS3281) on the first Saturday of the semester (Sat Jan 20th).
  • No tutorials. Ignore the tutorial timings given in Canvas/CourseReg.


Students will be assessed on their contributions to the project, and their skills/expertise gained. Both courses are 100% CA with no final exam.


The class enrollment is capped at 20 students due to resource constraints.

There is a soft lower bound for students’ of 3.9; you may still apply for CS3281&2 if they have a GPA below 3.9, provided you can show evidence of a strong passion for software engineering e.g., side projects done.

To get the full value of these course pair, you are encouraged to stay involved with the projects beyond the semester time to experience leading/managing live projects. Furthermore, this course depends on past students mentoring current students. Such work can count for CS3282 and possibly be paid.
Please do not apply if you are not sincerely interested in staying with the projects beyond the semester to become project mentors.

Student selection is not based on CourseReg. Instead, submit your application using this application form (requires NUSNET login, requires you to upload the latest transcript).

⏰ Interested students are to complete the application process by Mon 11th December 2023. Late applications will not be entertained.

The outcome of all applications are expected to be released via email around Wed 27 December 2023.


  • Entry is competitive. We typically receive about 2-3 applications for each available vacancy. The selection is based on,
    1. Interest and ability shown in programming, especially, in contributing to OSS projects.
    2. Performance in SE/programming courses.
    3. Compatibility between your interests and the availability of vacancies in the NUS-OSS project you want to join.

A good way to increase your chances of getting selected is to start contributing to an NUS-OSS project before you apply for the course. The more you have contributed, the more you will score in criterion 1 above.

Even contributions around the application period (up to 2 weeks after the application deadline) can count. All the NUS-OSS projects have some guidance on how to get started on contributing -- if you need more help, go ahead and post a help request in the project's issue tracker.


  • Q: Can I apply to both CS3217 and CS3281?
    A: Yes. If you get places in both, you will be given time to decide which one to take.

  • Q: What's the difference between CS3217 and CS3281&2?
    A: Here are some similarities/differences:

CS3217 CS3281&2
design and deliver a complete product -- includes an individual project (6 weeks) and a team project (6 weeks) work with existing applications that are currently in use (higher focus downstream value addition such as reliability, scalability, security, maintainability, etc.)
typically involves iOS ecosystem + other modern frameworks/platforms low involvement of iOS ecosystem but involves other modern application frameworks/platforms
small intake (~40-50), via a selection process, hard to get in small intake (~20), via a selection process, hard to get in
done over one semester, although most students also take CS3216 done over two semesters, with a gap in-between (i.e., takes at least 1.5 academic years to complete)
expects you to design and deliver a good product by the end of the semester expects you to manage and evolve an existing product over a longer period, guided by past devs, while guiding new devs (in later stages)
high workload, intended for strong programmers only high workload, intended for strong programmers only
  • Q: Can I take this course while doing ATAP/SIP?
    A: No. Reason: You need to be available during working hours for lectures and project meetings.

  • Q: For CS3281, can I choose a project that is not one of the NUS-OSS projects?
    A: No. Reason: As 100% of your CS3281 course grade depends on your project work, you need to work in a project that is fully under our control.

  • Q: Can CEG students take this course?
    A: Yes, with approval.

  • Q: If selected for both CS3217 and CS3281, can I take both?
    A: Discouraged (but allowed). Reason: both courses have high workload.

Have a Question?

Please direct any questions to CS3281&2 course coordinator Dr Damith Rajapakse damith [at] comp.nus.edu.sg