Lessons after CS3216

Created on November 14, 2021.

This has been an especially difficult piece to write, simply because I have learnt so much in the past 13 weeks to put in all in words, and that there is no one-size-fits-all advice for how to do well in an open-ended module like CS3216. CS3216 has been a roller coaster of a journey, with a constant onslaught of deadlines that result in long drawn meetings till 3 am, nonexistent work-life balance, and a 7-week backlog of lectures and tutorials I have yet to touch since midterms for all my other modules. The reward for all of that? More learning and growth I've experienced than any other module or internship I have taken in my life. There are so many little things that I've learnt that are hard to pen down, but reflecting back, I found two biggest takeaways I would like to share.

So let me just start by going straight to the elephant in the room: how to does one do well in CS3216? Is it good engineering, design, sales or what? Well, they are all arguably very important, and excelling in all three axes is a necessary requirement to succeed. But that's not the point of this article, there are numerous other resources to learn how to engineer, design or market a product better, and hopefully, the selective nature of the course would mean that you would be able to form a team that can execute in all these areas (as we have clearly seen in the outstanding projects showcased during STEPS). So what then, is the secret sauce? Here's a hint: it is often said that startup success is a combination of both luck and execution, and CS3216 is very much like launching a startup. So is that it? Execute well and pray? Well, yes and no. There are definitely a lot of extrinsic factors at play beyond your control, but there's also a big part of the "luck" that can be controlled, based on making good decisions and placing the right bets.

This brings me to my first takeaway which is: "Focus on the most important decisions". It has been said that out of a thousand decisions, only 3 of them would really really matter. Throughout the course of the 3216 journey, you will be faced with so many product decisions big and small that it probably reaches a thousand. The vast majority of them are small decisions like "how should this component be designed?", or medium decisions like "what tech stack to use?" and "should I enforce a user sign-in?". The combined weight of these decisions will be a good-looking, well-engineered product. However, by far the most critical decision you will have to make is: "what product do we build?" (if you can answer this question correctly consistently, please take my investment money). It doesn't matter if you have the best-engineered, most beautiful product if the users do not feel a compelling need to use it. This single decision is so important that you should not be afraid to spend a couple of weeks to get this right, even if it means throwing away all your precious work (of course, try to fail fast and fail cheap). Right at the start, our team was split between continuing Social Census (our A3 project which received great feedback) or starting a new project of building an anonymous, privacy-focused social media platform. We knew that users found a lot of value in discovering and sharing poll responses of controversial questions with their friends, but we also had a real problem with retaining users as the users treated the app like a fun quiz of sorts, with no need to return after the quiz is completed. On the other hand, we observed that there is such a strong demand for anonymous posting that pretty much every school over the world have their own confession page, and outside of school there are also various communities related to work (teamblind) and developers (devRant) as well. After we interviewed users, we realised that people often hesitate to express themselves as they are worried that if they say something unpopular, their opinions may receive harsh criticism on whichever social platform they are using. When the internal debate settled, we decided to roll with speakeasy (eventually changed to whispers.sg as the domain was unavailable), with the aim of promoting discussion around topics users don't feel safe to talk about if their opinions are tied to their identity. By getting this crucial decision right, we were able to generate significant traction since we launched, with the NUSWhispers community reaching 8k page views and our newly added communities reaching over 14k views.

In hindsight, it seemed like a no-brainer to work on this idea. However, back when we started, the choice was much less clear as the idea was unfleshed compared to Social Census which already had great feedback, causing the team to be split dead even on which idea to pursue. Unfortunately, decision-making is known to be a very noisy process. The feedback on your decisions may arrive months later, the feedback itself is noisy, and sometimes it is not even possible to tell given you have not tried the other pathways out! The best you can simply do is to make the best decision possible at the given time based on your data (user interviews, research) and intuition (experience).

My second takeaway is that "People matter". Did I mention that you will be spending the bulk of your weeks working with your teammates on CS3216? In the startup world, co-founder conflict is one of the top reasons behind startup failure. And here in CS3216 having good working relationships with your teammates matter too. Chances are, you will be having countless disagreements on those product decisions I mentioned earlier. Your team will have to work out how to settle these differences in an amicable fashion. If your teammates are not pleasant to work with, those long meeting sessions will feel even longer, people might not look forward to working together and communication will suffer. Ultimately, CS3216 is about building something with people, for people. Don't brush away the "people" in the equation and assume that this is module is purely a test of your software engineering skills.

For future CS3216 students, if you have ever wanted to launch a startup, then just go take this module, you don't have to read further anymore.

Even if you don't plan on launching a startup, you should still take this module. Why? Because it teaches you so much about practical software engineering and product skills in a short duration that few other experiences can match (besides actually launching a startup, which is definitely very possible in this module too). You will learn how to learn fast and build fast, by being thrown in the deep end of the pond.

Truth to be told, when I came into this module, I already had the goal of wanting to win STEPS. Would I be able to make another STEPS-winning project if I redo the module again? I wouldn't bet on it. But I'm really thankful to my teammates, Yangshun, the teaching team and our supporters for making this one possible.


Y2 Internship Review