This is THE module in SoC. No other modules have caused so much hype and discussions like CS3216. So here it goes, my long-overdue CS3216 module review.
The module consists of 4 different projects. Three of them involves developing some kind of application. The other one is seminar presentation and mutual critique of an existing application on the market. Grading is 100% continuous assessment, based on projects and participation through blogging. The workload is extremely heavy so you will probably have very little time to spend on other modules. There are no formal lectures, almost all lectures are guest lectures. They cover a diverse range of topics from idea validation, growth hacking to security practices and database scaling.
For the list of projects (assignments), you can see all the detailed descriptions here.
Assignment 1 – Life of a Facebook Application
Assignment 1 is all about developing a Facebook application in less than 4 weeks. You can choose to do a Facebook canvas application or a standalone application that uses Facebook SDK. Most teams this year chose latter because the first one seems to be a dying platform except for online games. So you can implement any ideas that you have, with some reasonably justified usage of Facebook services such as login, authentication, liking, sharing, etc. With very limited time, you’d be better off developing some simple yet useful. For our team, we developed a platform for NUS CCAs. It helps new students to explore and find CCAs. We use Facebook to add in the social element by displaying members of the CCAs and people who are interested in the CCAs.
Assignment 2 – Application Seminar
Assignment 2 is about presenting on a relatively new and popular application and mutually critiquing each other’s presentations. The idea behind the assignment is to identify strength and weakness of existing applications and applying those knowledge in our future work. Unfortunately due to poor time management issues (assignment 2 overlaps with last few weeks for assignment 1), most teams did not put in much effort into this assignment. However, this was still a good experience for me because I got to know quite a few new apps such as Paper & Pencil by 53 and Photomath through the presentation by other teams.
Assignment 3 – Mobile Cloud Application
Assignment 3 is kind of similar to assignment 1 in that it is mostly a web-based application. However, the focus is the building a progressive web application. We built an offline map for SoC area with icons for various services and facilities. I have already written about my experience in details, so you can just check out my post My Experience Building a Progressive Web App (PWA).
The first 3 assignments are like warm-up assignments building towards the final project, which commences only at the second half of the semester. This is the project that is going to be presented at STEPS Showcase. It also has a significantly longer time frame than the first 3. This means that instead of doing a pure software engineering project, teams are supposed to build a product. Things like market research, idea validation, business collaboration and marketing all comes into play.
Internal vs. External, Consumer vs. Business
There are two kinds of projects based on the parties involved, internal projects and external projects. Internal projects are pitched by fellow peers taking this class. Students can form groups around the pitched ideas and carry it out. External projects are pitched by external companies and/or CS3216 alumni. This is more like a contract-based project where students form groups to take on the project offered while getting something in return as a remuneration. Both have their pros and cons. While internal projects allow more flexibility, students need to do more work in market research and idea validation part since it is self-initiated projects. For external projects, the scopes are more rigid but that also means clearer requirements and less need for idea validation since the projects proposed by external companies should have already gone through that stage.
You can also classify the projects based on the nature of the project. Some projects are more targeted at consumers, others are targeted at businesses or specific clients. For consumer-facing applications, there are more requirements imposed on marketing efforts (on-boarding 5000 users as Prof. Collin said).
You Can Do Anything?
It sounds like there are a lot of flexibility here and you can choose to do whatever you want, but the truth is somewhat the opposite. At the start of the project project, you are already exhausted from the previous 3 assignments and you would be lacking the creative juice and the motivation. So students are less likely to come up with really good ideas. From what I experienced, most students are rather passive at this stage and they just want to be told what to do instead of taking the initiative to pitch ideas. Some students came prepared into this module with existing ideas, such as the founder of ExchangeBuddy. Others are not so lucky. Some changed the ideas 2 to 3 weeks into the project due to bad feedback or disagreements with external parties.
I would say overall the applications built for the final project are of decent qualities but just not superb in my opinion. I think part of it is due to the structure of this class. Students are being forced to choose ideas and teammates in rather short period of time after being exhausting from the previous assignments.
This section is more of a discussion on the issues with team formation in this module. You can skip to the end if you are not interested.
You Can’t Work with Your Past Teammates
CS3216 employs a unique way of forming teams. For the first 3 assignments, you cannot work work with your past teammates. This means if you are teammate of A in assignment 1, you cannot be teammate of A in assignment 2 or assignment 3. The rationale behind this is probably to encourage learning to work with different people with different team dynamics as well as know more peers for the final project, which does not have restriction on teammates.
This poses some challenges on teams because it takes time for a newly formed team to be effective. Teammates have to get used to each other’s schedule, establish common communication channels and most importantly learn how to communicate effectively with each other. Each person has distinctive styles when it comes to communication, some passive, some active, some passive-aggressive. It takes days or weeks before people can get used to them and start communicate effectively. Also, team formation usually only takes a few days, that is very little time to get to know your teammates beyond what stacks they are comfortable with and adding them on Facebook. Granted this problem also exists in other CS modules which involves projects, such as CS2103. However, the fact that we need to work with entirely different teammates on 3 separate projects in the span of 6 weeks makes the issue more pronounced.
Free for All Dilemma
For the final project, there is no restrictions, but it is not much better. What are the chances of you choosing to work with a stranger compared to your past teammates? Almost zero. So you are likely going to find your past teammates to team up. However, there is also another factor at play here, the project idea. Hence, you might have a good teammate but the teammate might not like the idea you are working on, which is also undesirable.
This is almost like a game theory coordination game. With limited information, you have to choose between good teammates or an idea of your interest. In addition, you have the time constraint. If you do not act fast enough, other people will (act sub-optimally and) take your spot. After all, each team can only have 4 people.
This would not be a problem if there are active and open discussions where everyone can make an informed decision leading to optimal outcome (Pareto Optimal). However, in reality, most people prefer one-to-one messaging and discussions within a small group. Without adequate open discussions, everyone can only act based on partial information, which inevitably leads to formation of sub-optimal teams (Nash equilibrium with lesser payoff). I have written an entire blog post on this topic as well, you can check it out here: Game Theory in Project Team Formation.
Note: If you are interested in learning those terms mentioned above or game theory in general, you can take CS4246 AI Planning and Decision Making which I took in this semester as well. Here is my review on CS4246 Module Review – AI Planning and Decision Making.
From my observation, the best performing teams tend to those who know each other from the past and have experience working as a team. They already know their teammates before the team formation process and they experience less frictions in communications. Also, if you already know your teammates for the final project, you can start ideation very early, even before the module starts.
Advice on Taking CS3216
CS3216 is not for everyone, nonetheless it is a unique experience that you cannot get anywhere else. If you wish to take this module, I have the following advice for you:
- Know your peers. Talk to other students in School of Computing, or any faculties for that matter. Take this module with your friends, or at least people you know. You are more likely to have good experience if you know who are your teammates (for the final project) before joining this module.
- Brush up programming skills, especially web frameworks, API, 3rd party libraries. Chances are you will need to build something very fast. Learning them on-the-fly is going to cause a lot of time and result in either poor quality of the product and/or extreme exhaustion from lack of sleep. But if you already know your nginx, React-redux and event.stopPropagation(), you can spend more time on UI/UX and other things. A lot of the success is dependent on how your app looks and feels, and you do not want to neglect that because you cannot figure out why a button triggers twice upon clicking.
- Do NOT overload. This is the module that is going to kill you, so there is no need to kill yourself yet again by failing other modules.
- Think hard about ideas. They say “Ideas are cheap.” But coming into this module it is first obstacle that you will face. If you can recall a decent idea from the back of your head, it is going to save a ton of time for your team. Note that in order to qualify your idea as decent, you will need to actually talk to people and your potential users to validate them. Often ideas that we think are good have obvious flaws that we ourselves do not realize.
- Module website: http://www.cs3216.com/
- Past students and projects (requires SoC account): https://mysoc.nus.edu.sg/~wiki/index.php/CS3216_Class_Groupings
- Discussions on NUS Whisper: https://www.nuswhispers.com/search/cs3216