My CS3216 Experience




Marketing was something that I’ve read about, but didn’t actually try before. I also realised how hard it is to differentiate a product in a market that is full of similar applications. Walking around engineering putting stickers on the tables made me realise that

Similarly, with the amount of advertising noise that people are bombarded with everyday, there is a healthy amount of skepticism when they are presented with another app to do yet another set of tasks.

We found Facebook promotions to be really easy to configure and use. The checkout to buy ads process was integrated directly into the page itself, and I had a clearer picture of what advertising meant to Facebook as a viable advertising stream.



Last Minute Plans

It’s the last week we have before steps.

Due to the change in team name, we had to push back marketing because we didn’t want to confuse users when they are redirected to an app of a different name.

Since our presentation last week we have polished up our app, as well as completed the features that were missing. Notifications is now a lot more prominent.

Hope all goes well. Time to hustle!

We went around sticking stickers on the tables on tuesday. Unfortunately, the ones at uTown were removed šŸ˜¦

I don’t understand why time is passing so fast. I really don’t.

Anyway our team (Yu Chuan, Chi Thanh, Van and I) have had 3 meetings with Bjorn about our project.

Over the course of the past few weeks, we have pruned and refined what we want to build. Time is running out but there’s still so much to do.


So I’ve learnt a couple of things over the past few weeks of using Android.

One of the main features of our app requires the user to stay on the app so that they will not be distracted by other applications in their phone. This notification feature took me a while to implement properly because I wasn’t familiar with the Android Activity Lifecycle.

So what we eventually came up with was a countdown timer that starts the moment the user navigates away from the application. If the user spends more than 10 seconds away from the application, the training session will be considered as a failure.


Starting to get used to how Gradle works, as well as the amount of features that are available in the Android SDK.

Found myself consultingĀ and a few other mobile UI sites to see how things are done.

Week 2 Sprint


As what Bjorn predicted, we didn’t get as much done as we liked to. But progress has been made. Going through a meeting in the sprint format was something different.

I like this idea of creating this mindfulness application.

Application progress

Over the past week, I was busy stubbing the different screen. Well I’m in charge of the dashboard, statistics as well as the train page, which contains the key functionality of the application. I haven’t started with Notifications, which is one big thing that I will have to work on as soon as I clear up my work.

One interesting thing that I found was that Android has a Chronometer, but no UI element for a count down timer. And the chronometer doesn’t count down, so the only way around this is to use a third party count down library or to manually update a textview.

But then again if anything I’m not sure if I will use it. But its a good concession definitely, for someone who does not want to commit fully.

Final Project

Met up with Bjorn twice in the past week.

What we learnt

Bjorn introduced us to the different approaches to software development, as well as lean startup concepts. I found his crash course to be rather refreshing because his approach forces us to think about customers and customer validation, even before we got started with the application.

Bjorn also taught us about how customer discovery leads to customer validation and customer creation. It is after this process that the application is built.

We also went through several of the existing applications in the space. Applications such as headspace, calm and omvana. I’ve never used any of these applications before, but I found them to be very well thought out. There’s clearly a demand for these products. And the scary thing is, our target audience can be anyone who has a mobile phone. Because we live in a world where distractions are plentiful and finding periods of focused, highly productive pockets of time is increasingly difficult.

The idea, which we are calling Jadeye for now, is to apply mindfulness to daily situations. Nothing religious. Mindfulness meaning being largely undistracted by the #1 cause of all these distractions, the mobile phone. In buddhism, the analogy of the monkey’s brain is often quoted. It seems like in this present day and age, we have all decided to introduce more complexity (or is it convenience) into our lives with a secondary brain (the mobile phone).

Most of our time can be broken into five different areas: working, break, meal, sleep and commute. So our app will aim to target these five areas. To try to defragment and declutter your mind so that you can approach your tasks with more vigour.

What we are making

A productivity focused mindfulness application that is catered to Android users. The features don’t look very complicated, and we hope that Java will come in to provide the structure and the libraries so that we don’t need so much to get started.

The main function will be to tract attention span. Something like what forest is doing. Except our scope will be larger, and possibly more focused on the local market (for now).

Managing interests and expectations

I look forward to learning from Bjorn, as well as my team! It’s a daunting month ahead, as we have to complete as much as possible so that we can spend the last stretch doing marketing and publicity etc.




Post Mortem for Assignment 3

What we came up with was this idea of project todo list integration into existing conversation tools. Our ideaĀ for LMK was to integrate into Telegram so that once the group adds our bot to the page, the user will be able to assign tasks as well as track the status of assigned tasks.

LMK aims to solve this problem by applying a radical new approach to project flow: triggers. Individual components donā€™t exist in a vacuum — they often combine to form other components that eventually form up the entire project. Non-project managers donā€™t care about what everyone else is doing, only what they need to do, who theyā€™re waiting for, and when they need to finish. The core feature of lmk is in its name: Let Me Know. Users define triggers for other users, stylized in-app as ā€œLet me know if/when: _____ā€. These triggers then appear on their recipientsā€™ dashboards as pending tasks, waiting for the user to mark them as done.


Cordova, Ionic and Phonegap

I was actually rather confused about Cordova, Ionic and Phonegap. They seem to overlap even in method calls. After a bit of research I found out that Ionic runs on top of Cordova. The purpose of Ionic, is to provide the front end (html, javascript, css) using angular. And that, ladies and gentlemen, is the difference between all of them.


Writing javascript (not typescript) and validations for javascript types feel dirty. Typescript looks really promising, and in fact people have already started using angular with typescript. What typescript does is to provide a bit more structure and type discipline for javascript so that it is easier reason about the correctness of the logic written. Typescript compiles to javascript.

The state of the web

It’s quite a headache because different platforms have different standards. For instance, safari doesn’t support localStorage very well. I can’t imagine how much testing companies have to do to ensure that their application is supported on a wide range of devices.

Post Mortem

I think we could have communicated better in the first few weeks of our project. The API was only stable a few days away from the deadline, and I didn’t have enough time to react to all the changes towards the last sprint.

But I enjoyed working with Yu Chuan, Van and Chi Thanh because they are all nice people.


Updates on Assignment 3

We decided to use the ionic framework, which runs on Angular. After much deliberation we chose Ionic over React because we felt that the angular framework was more stable.

What we are building

We wanted to create Jira for group messaging. Which means you can add an issue tracker to any group conversation that you have, and the issue will be stored and notifications set up. That’s the high level idea.

Heroku deployment

So in the last project that I worked with ionic, I wasn’t in charge of deployment. It was amazing how easy it was to get up and running with Heroku. Basically all I had to do was to set up Express to handle the routing to a bunch of static files that are rendered by ionic.

Also, because of our telegram bot integration, I went to look at how the entire process works. This brought me to the topic of web hooks.

What are web hooks?

Web hooks are user defined API endpoints that serves as a trigger, for some application logic or file. So what the API endpoint is called, a preselected piece of logic can be executed. This method removes the need for long polling and inverts the responsibility of the caller and the callee. In the case of a telegram bot, a webhook can be set up on the server containing the logic for the bot. Telegram will call the webhook when a user on telegram requests for the functionality of the bot. The bot can then run and return the results back to the caller.

This resource provided by telegram proved to be immensely useful in configuration and understanding of webhooks in this particular context.

Pitching Session

I thought the pitching session was interesting. In particular, I was rather inspired by the stories of the alumnus who came back to pitch. It was also very interesting to hear about how some of them decided to start their own companies after working for other people for a number of years.

I thought the Turbaniser guy was pretty cool. While the app might sound a little trivial, I think there is a lot of value in learning from a guy like him with the many years that he has had testing the market.

I thought Xu Jie’s idea about creating sustainable digital tools to help the low income housing families at Casa Clementi. I have heard of Asset Based Community Development before and I think its a very good idea to implement this to help the beneficiaries.However, I don’t think that this can be done and executed properly in a span of 8 weeks.



Assignment 1 & 3


Assignment 1 Submission

Last Friday was the submission deadline for Assignment 1.Ā Thanks to Emmanuel, Melvin and Louie. We managed to push to the repo before the deadline and submit the report. Melvin did a great job improving the UI in the last few days, and now it looks like something professional.

I think I have a lot to improve. My attachments pull request didn’t get merged because it was too late. Lots to learn man.

External pitching session

A number of of people came down to pitch. I felt a few of the speakers didn’t really know what they want. Or the ideas did not resonate with me.

Overlandoo’s pitch stood out to me, because the presenter was quite clear in what they wanted. I think one of the biggest benefits of taking up their project for Final Project is that the founders already know what they want. The team just has to build. The images and themes are already defined.

The thing about building a community of sharers concerns me a little. Because although you might have a few thousand followers, this does not mean you have a community of active contributors who are willing to put in the effort to ensure that the content is updated. Also, there are large communities such as TripAdvisor who continue to dominate the travel information space.

Intellex’s speaker JX shared with us the problem about the law industry. I think she brought up a very good point that we need to understand other industries to solve some of the problems that they face. There are too many lifestyle/productivity apps because software developers know whats wrong with their industry that they would like to fix, but there are still an abundance of opportunities in other domains which are less tackled by technology companies.

Assignment 3

After a few hours of planning, we came up with an idea for a mobile app . Think an issue tracker, integrated with a communication app. So bitbucket + telegram, with triggers and hooks.

The cool part will be the triggers that can be set up. So a user can be notified when the task completes. For instance if I set “Yu Chuan to complete task 2 before this Friday, 2359”, I can link it to another task that I have, as a prerequisite for the completion of my task.

The idea is still a little fuzzy for me. The roles are quite defined, because we have front end, back end for the front end, back end and telegram bot end.



Critic of Slack, the messaging app

I think the presentation by team 3 which comprised of Irvin, Melvin, Yao Huo and Yi Chen was interesting and the team provided good context about Slack, the communication tool.


Team 3’sĀ presentation rationalised about the impressive growth rate of Slack, as well as areas in which Slack could be improved. The team brought up many interesting points and I will be discussing three of them which stood out to me the most.

  1. Channels and searching
  2. Integration tools
  3. Hard limit of 10000 messages

1. Channels and Searching

Channels are really important and it was mentioned in the presentation that channels give context. I thought that was a very salient point. Slack managed to execute the idea of havingĀ multiple steams of communication well enough such that conversations can be structured and topicsĀ can be discussed in the right places. The nice part is how powerful the search functionality on Slack is, and how search can be done over multiple channels with options of excluding channels that might not be too relevant.


2. Integration tools

I enjoyed the team’s explanation of how the diversity of integration tools that are available for Slack has increased adoption rates. I think this is particularly appealing for software developers, with the numerous tools that facilitate continuous integration. If Slack is the software that can connect all the other tools together, then every team member will just have to flock to Slack to be able to function in the team.Ā  I also thought that what Melvin suggested about Photoshop and Slack integration sounded really cool. It will be interesting to see how that work.

3. Hard limit for free tier users

The team complained about the message limit for the free tier in Slack. I find it ironic to complain about the hard limit of 10000 messages. A good gaugeĀ of whether they have succeeded will be to judge if SlackĀ can inflict enough pain on their users in the free tier soĀ that they convert themselves into paid customers. And if the users in the free tier are complaining so much about it, this means that Slack has done a good job identifying a threshold that can encourage users to pay for their service. Perhaps what could be done better, is to provide better warnings when the channel gets closer to 10000 messages.

My thoughts

When I was first introduced to Slack, it didn’t make a lot of sense to me because Slack seem nothing too different from IRC or any other messaging application out there.But after a while it became clearer why it stood out. They have the right amount of everything. Slack offers a lot of customisation power, and the right set of features to make communication better.


I feel thatĀ more effort should be directed towards getting users to download the application. Because if it is just opened in a browser window, there is a good tendency for one for eventually forget about it. My usage of Slack increased after I decided to download the App on my computer, otherwise I would only visit my team’s Slack page when I was prodded to do so.

In my opinion, theĀ brilliance lies in the fact that Slack manages to amalgamate the best of predecessor technologies to come up with a tool that can make team communication structured and painless to use. And they made Slack look lessĀ like a boring office work tool and more like a game chat window. While it might not be the winning idea at a hackathon, I think it might just fulfil its goal to conquer the corporate landscape.

I think software that allows for heavy customisation, in terms of both functionality and user experience will be the next big thing. As technology becomes more sophisticated, users will likely increase their expectations of the features that they want. There is no way that a company can keep up with the requests to suit everyone. The only solution is to provide hooks and APIs so that the software can be extended to suit their individual needs. I think this has worked very well for companies like Slack and Telegram, where bots are almost the reason to use the application.

A summary of week 3

A flurry of activities this week, with the submission of assignment 2’s slides as well as the 2nd last week before the submission of assignment 1.

Assignment 2 – PhotoMath

My teammates were very nice people. We just chose one application each and selected 3 of them. What caught my eye about PhotoMath was its design.

So I only tried PhotoMath a few days after suggesting it as the app to present on. I was disappointed initially, because all the simple equations that I wrote were not recognised by the engine. I thought that it was a problem with my handwriting,

It would have been nice, if they on boarded users by warning them about how PhotoMath doesn’t support handwriting.

I have mixed feelings about PhotoMath. I’m not sure whether its better for the students, or worse for them. How do we draw the line between over reliance on technology, and using technology as an effective aid.

Stealing from others

Github Advance SearchĀ This is an article that I just readĀ that I think is a fantastic way for programmers to level up. Github is indeed a goldmine. And I think learning from other people’s code is the best way to improve.

I also think that using a linter as you write code is an immensely useful luxury, particular when working in a team setting.

Rails AJAXĀ 

I knew that rails had improved in its support for ajax over the years, but I never really explored how easy ajax could be done in rails. LIKE WOW.

Reading something likeĀ Partials AJAX for RailsĀ will blow a javascript/php programmer’s mind away.

So I remember being impressed with jbuilder a few months back because it made the creation of a json response from an object so easy and elegant. But theres a better way. In the view, render the appropriate .js.erb and within that view, the values in the objects in the controller can be inserted into the javascript! Like wow.

Talking to users about the problemĀ 

I’ve been corresponding with my friends in NUS CCAs, trying to understand what are some of the issues faced. I hope we can build something to solve some of these issues NUS students have.

Progress of NUSocial

With one week left and issues piling up, its going to be a long week ahead. I have been working on attendance and events at the moment. I still have a lot to go in terms of learning.

I’ll integrate graph api tomorrow night and hopefully by Wednesday I’m done with the backend features. Perhaps spend the last 2 days saving the UI. Which is in dire status right now. Ā And also seeding real data.

We received feedback for our application just now. It’s sobering to note that we are nowhere near done, with so much more to fix and so little time.

I’m very thankful for Emmanuel, Melvin and Louie for teaching me so much and accommodating me.