This is the final writing assignment for CS3216 and I think it is worth sharing about it on my website. The prompt for this writing assignment is “Tell us about the CS3216 Journey”.

TLDR - CS3216 is a very stressful but very fun module. CS3216 is probably the best computing module I have taken so I am very happy to have taken it. I recommend to try the module if you can.

Oh man, where do I even start. First of all, I am really glad that I didn’t miss out on this module since this is my last semester. So I am very thankful to Prof Soo, Prof Ben, the teaching team and classmates for the journey.

Tips for Future CS3216 Students

If any juniors are reading this, don’t be fooled by the 5MC, CS3216 is equivalent to at least 2 or 3 mods of workload, at least in my opinion, but I believe many others share the same sentiment. If you’re thinking you don’t have what it takes, don’t be. Just try applying, you never know. In fact, it is even better if you’re not from computing since CS3216 needs a balance of computing and non computing students to work well, especially marketing and design students. You would be lucky if you can team up with a designer for your assignments/final project. If you have a project idea you really want to work on, this is a great opportunity to work on it together with some of the smartest computing students.

Objective

The objective of CS3216 from what I gathered is the 3 key points:

  1. Sales matter
  2. Execution matter
  3. People matter

I think the main point is to teach us the aspects involved into developing a product aside from the technical part. From what I felt, CS3216 focuses a lot on the marketing side of product development. Also, it teaches us to “do the right thing”, to find the right problem to solve. I have never thought about this, so it is a good lesson learnt. However, I think to find the right problem requires a lot of awareness of people’s problems or deep domain knowledge on certain topics to truly understand whether there is a problem and how painful is the problem. While it is good to know, to actually “do the right thing”, I still think is very hard to achieve given my lack of awareness or deep domain knowledge, but perhaps a few years down the road, I might be able to do it.

Format

3 Assignments

For the 3 assignments, there is a rule to team forming such that students cannot work with the same teammates for the 3 assignments, so that you have different teammates for all the 3 assignments. I was a bit salty about this at first because classmates immediately started team forming over a Zoom call after the lecture and I was late to join in on the team forming as I went out to get dinner. So I was one of the last few having trouble forming teams. I coded a network graph visualization just to help me in finding how I can join a team while fulfilling the constraint for everyone. Aside from this, I think the rule is a good idea to give us the opportunity to explore who we want to work with for the final project.

Assignment 1 was basically a CS3240 project but compressed into 3 weeks. It was very tough and took a lot of time but having a capable team made the work feel lighter. This was the first taste of what CS3216 is to become. I had hoped maybe the workload might be more manageable over time. I was wrong.

Assignment 2 was a presentation project but the hard part is finding the innovation to present on. I think everyone pretty much applied what Prof Damith taught on presentation techniques which made all the presentations so interesting. I also learnt where to find good presentation templates from this assignment (canva and slidesgo). For the writing assignment, I scored pretty bad because I had other module’s deadline on the same day. So I tried to make it up with more detailed the responses to other team’s comments to our topic.

Assignment 3 was a PWA web development project. Admittedly, I was slacking off a bit for this assignment since we did not schedule any meetings after the first meeting, unlike the first 2 assignments where we had more frequent meetings. As the team decided to go with a simple REST API, not fancy GraphQL or gRPC, I just reused a lot of my CS2102 backend code to build the backend.

Guest Lectures

Almost every lecture is a guest lecture. I find the lectures are like tech meetups just because it felt like teaching not so much about technical stuff, but more about the broader topics on tech. Specifically, the lectures cover on different aspects of what goes into product development, from user experience and presentation skills, to financing and team dynamics. I think the most memorable lecture is probably Prof Damith’s lecture probably because of the way he applies his presentation skills while teaching them.

Final Project - LisTent

My final project is an audio focused social media app called LisTent. We deployed the project very early on in about 2 weeks time since we started. We then focused a lot of effort into marketing, announcing in many different channels to get people’s attention. We announced on NUSWhispers, Reddit, big NUS telegram groups, etc. We have a Facebook page, Instagram account, Discord server and Telegram channel. We invited podcasters and voice actors to try uploading content on the app since they are also our target users. We ran marketing campaigns to get our friends to use the app by giving away Among Us prizes - first, second, third winners. Here is a demo video if you want to see the app for yourself. The project is also presented at STePS to industry audience.

For the final project, I actually had some project ideas at the start but I did not pitch them because I think my ideas were either too simple for a 4 person project or not very useful. Yehez messaged me, pitching his idea and inviting me to work with his project even before he did the pitching. At first I was skeptical on the idea since I did not find it very useful. Only after the pitching session that I settled on teaming up with him because I thought even if it doesn’t become successful, it would still be a fun project since there won’t be the constraint of following a company’s requirements.

Indeed, the final project is very fulfilling to work on. My team has been very dedicated from the start so it is really motivating. We even do daily scrum meetings. I have never worked on a school project that meets everyday. My team consists of a frontend guy, a backend guy, a marketing guy and me, a devops guy. I shifted focus from devops to marketing after all the infrastructure setup is done.

I took the opportunity to explore into AWS and Github Actions for the setup which I think has a lighter learning curve than using Docker since I had some inkling on how to set it up at the start. With that said, I will look into dockerizing the app after the semester ends to preserve it like what Soedar shared.

I even have a multistage environment setup for the project because of how early we deployed and we did not want to risk messing up the production environment. I never worked on any school project that requires multistage environment setup, which feels a bit overkill but is actually quite easy to setup.

For marketing, I worked on creating marketing assets (images and videos) and vetting of marketing posts. So I am just mostly helping out Yehez, our marketing guy. He is the one that does most of the marketing work, inviting podcasters, voice actors and many of his friends to try the app.

Even though we did so much marketing, I am a bit disappointed that we only achieved brand awareness but we still don’t have any active users. I can kind of understand though because it is the chicken and egg problem. To get active users, we need good content but to get good content we need many users.

Another thing that is quite unfortunate is that STePS this year is fully virtual. It was really difficult to get attendees to visit our project. Unlike physical STePS which I attended many times over the past years, CS3216 and the games development mod always attract the most crowds. The energy of having people around the booths are more pronounced and more satisfying to see people interacting with the apps. We tried to use cash prizes giveaway to attract attendees but still mostly only our friends joined our breakout room. So it is quite disappointing as well.

All in all, I am very proud of what we have built and I am very proud of the team, just a bit sad that we did not have active users and virtual STePS not working out as how I had hoped.

Retrospective

Looking back at what I wrote for what I hoped to learn for CS3216 (the first writing assignment), I had mostly achieved my initial objectives. These were my 3 objectives:

  1. A chance to work with non IS students
    I have definitely achieved this, having worked with 10 different teammates across the 3 assignments and final project. Ideally I would have wanted to work with students from other faculties as well, but getting to work with CS students is satisfying enough for me.
  2. Chance to work on a resume worthy project
    My final project is definitely resume worthy! I will be adding the final project into my resume. Although we did not manage to retain any active users, our marketing efforts managed to get podcasters who actually believed in us. That is incredible!
  3. Solidify my web development skills
    I did not really achieved this one. We went with a simple NodeJS Express backend for assignment 3, and I handled the devops part for the final project. So I would not say that my web development skills have really improved. Nonetheless, I still enjoy doing devops tasks and the final project allowed me to explore a good bit into AWS, Github Actions, Ansible, etc.