Assignment 3

For Assignment 3, my group and I built LetsSnap, an event-based photo sharing mobile web app. Since the concept and backend implementation of LetsSnap is similar to Pixelect, it felt like an opportunity for me to do over and apply what I learned from building Pixelect. Through this experience, my understanding was reinforced and I had the capacity to dig deeper into Node and the Sequelize ORM. This meant having a good file structure from the get-go, using proper migrations to update the database and having standardised logging statements and api responses.

Unlike Pixelect, the frontend and backend of LetsSnap are hosted on different domains. The experience of configuring CORS and getting session management to work cross domain gave me a greater understanding of how the web works in general. Furthermore, the routing issues that we encountered helped me to learn more about how single page applications work.

These seven weeks have been intense but I feel like I grew a lot as a web developer and learned a lot by simply discussing and consulting with other CS3216 people. Onwards to the final project!!


Application Critique on Forest

Forest is a popular productivity app which helps users to combat their phone addiction and focus on their work at hand. Users of the app would set a timer to be productive, planting a virtual seed in the app which would grow into a healthy tree, so long as users resist the temptation to use their phones before the timer is up. Should users falter, their tree would wither away, destroying their forest of healthy trees.

From Group 5’s presentation, I gained several key insights regarding Forest and I would be highlighting two of those below.

Firstly, I learned about the pros and cons of having a freemium vs paid business model. On one hand, it is easier for freemium apps to build up their initial user base compared to paid apps. With a sizeable user base, there is often a network effect where users themselves are influencing others and helping to bring in more users, creating a large user base. With this, the last piece of the puzzle is simply to generate attractive premium content and hope a proportion of their user base would be willing to pay.

On the other hand, paid apps belong to a more traditional business model. While it is true that developers need not bother with deciding and separating free and premium content, it is often difficult for paid apps to get users to take the plunge. Furthermore, it is also challenging to draw recurring revenue from their existing users.

In the app market today, there are many apps which are struggling to find a suitable business model, and it is important to first understand their differences in order to find the right business model for the app.

Secondly, it is essential to understand the nature of the app and to make design decisions around this understanding. For instance, Forest is marketed as a productivity app. As a result, it should (and does) adopt a minimalistic design and a simple interface. Users of the app hope to be productive, and it makes no sense for the app to have excessive gamification or other bells and whistles which distract users. Furthermore, the use of advertisements as a way to monetise is hardly aligned with the point of the app.

These are two of my personal thoughts from the presentation:

The group mentioned gamification and competition as one of the ways to retain users. Personally, I feel that I would use the app because I want to be productive and not because my friends are using it, thus having a competitive element to the app would not retain me as a user. Furthermore, I feel that the nature of a productivity app is vastly different from a game-based app like Candy Crush or FarmVille, and I am not comfortable nor inclined to share this aspect of my life with others on social media. With that being said, I feel that notifications, as mentioned by the group, would be a great way to draw me back to the app.

Lastly, I think it may be a good idea to incorporate “productivity statistics” to Forest. Since a proportion of Forest users are likely to be efficiency junkies, I think relevant information regarding when and where they are most productive is a useful feature aligned with the goals of the app.

Week 3 Reflections

This week, I worked on Assignment 2 with Danielle, Riwu and Bai Chuan. We are presenting on the Business Calendar, a versatile app for complex calendar management. It was difficult to manage between Assignment 1 and Assignment 2 but everyone rose to the occasion and we managed to prepare the presentation deck in time. 🙂

For Assignment 1, I managed to deploy the web app using a custom domain name and routed traffic to port 80 (instead of the original port 3000). I also refactored, cleaned up and tested the backend api endpoints and became more familiar with the JavaScript Promise. It has been challenging learning and dealing with its asynchronous behaviour and trying to stop code from turning arrow-shaped, but a good learning opportunity nonetheless.

Over the past three weeks, I managed to hone my technical skills by learning to learn fast and also working with great developers, and I hope to continue doing so over the course of CS3216.

As for personal development, I hope to be more positive and more curious as a group member and as an individual. Instead of focusing on my task at hand and developing tunnel vision, I hope to engage and contribute more in ongoing discussions. Furthermore, I hope to cultivate my sense of curiosity and explore things outside of what I want/need to know. Even though these things are hard to do, especially while being on a time crunch, now is the best time to do it!! 加油!!

Week1+2 Reflections

In the first two weeks of CS3216, I mainly worked on Assignment 1 with Wei Wen, Kush and Si Kai. We decided to build Pixelect, a web app where family and friends could create groups, upload their trip/outing/event photos and vote to decide on which photos to upload to Facebook as an album.

With Pixelect, gone are the days of having embarrassing photos on Facebook (and being too embarrassed to ask the album owner to take down those photos). Furthermore, users are able to download a complete set of photos from Pixelect and are spared the annoyance of having photos flood up their WhatsApp/Telegram chats.

After ideation, our group decided on a Vue frontend and Node.js backend. Having no experience with Node.js, I spent the majority of the first week learning the ropes.It was interesting to see how much magic there is in other backend frameworks like Rails and Django compared to Node.js.

Thereafter, I set up a staging MySQL database using Amazon RDS and also set up SSH tunnelling through an EC2 instance so we can access the database from whatever IP address. Being my first time, the entire experience was unnerving but I was glad I could practice “calming the f* down and reading properly” – my new mantra lol.

In the second week, I set up the database schema and wrote up some API endpoints. Working on getting presigned urls from Amazon S3 for the frontend to upload photos was particularly interesting. Also worked on deployment.

To improve: 1) Migrations with Sequelize. 2) Session management. 3) Security of web app. 4) Deployment (nginx?). 5) Engagement.

What I Hope to Learn in CS3216

  1. Improve my communication skills
    • Being tasked to work on projects with business people, designers and other developers, I strongly believe that CS3216 is a great opportunity for me to brush up on my communication skills and learn how to speak to people of different backgrounds.
    • After watching Randy Pausch’s Last Lecture, one thing which resonated deeply with me was how there is a good way and bad way to say anything. Over the course of CS3216, I hope to put more thought into my words and use my words effectively, both to relay my ideas and also to uplift others.
  2. Improve my technical skills
    • Since students are in charge of the projects from start to finish, I think CS3216 presents an opportunity for developers to act as software architects, making high-level design decisions and choosing the stack, frameworks and tools used. I hope to participate actively in these discussions and learn firsthand what works and what doesn’t.
    • I also hope to make an effort to read up about technical topics which I am unfamiliar with during downtime instead of “hacking till it works” and taking away less than I should from the experience.
  3. Build something useful and cool
    • I hope to build something that I can be proud of and I think it would come with building something which is useful to others.