LetsSnap's design process

For assignment 3, I’ve had the awesome opportunity to do some designs for my team (as we consist of four developers, two frontend and two backend). As coders who usually focus on… coding, our grasp of design principles isn’t that great haha. Nonetheless we try to copy good practices which we saw in similar apps (e.g. other progressive web apps, and Instagram, which is similar in terms of functionality and market need compared with our app). Here I present the walkthrough of our design iterations!

Reflection on Su Yuen's UI/UX lecture in week 2 + learning from Eventbrite

Time to take a five seconds breather after Assignment 3 submission. I always wanted to do a reflection on the UI/UX lecture by Su Yuen in week 2, mainly because I always believed in UI making or breaking a product and that being said, as a coder with no “formal training” in UI/UX (ok, I admit it’s more like I didn’t research/learn on my own…), this lecture in particular was an eye-opener for me.

Assignment 2 Critique - Forest

As part of Assignment 2: Application Seminar, I will be reviewing the productivity app, Forest.

Summary of in-class presentation by Team Forest

During class on Monday, Team Forest presented a well-researched analysis of Forest’s strength, weakness and business model. Here I will summarize the main points from their presentation:

  • Strengths of Forest: Clean UI, Gamification
  • Weaknesses of Forest: Better social feature (e.g. Whatsapp message & productivity challenges), widgets and notifications to improve customer retention
  • Business model: Direct correlation between smart phone addiction and Forest app usage, however the paid app business model may not be the most ideal monetization strategy. Instead Forest could consider a freemium model in order to win over users on free productivity apps.

I found the team’s conclusion that freemium could be more suitable than paid app model to be extremely insightful. While seemingly counter-intuitive at first glance (isn’t it better to make customers pay first and regret later?), their analysis is done in context of the productivity apps space. Many productivity apps, even those that computationally heavy functions (comparative to Forest) such as Meekan, Quip, Canvas, Postify, TinyScan, SyncSpace, as well as similar stay-focused apps, such as Be Focused, Daily Habits and Focus Matrix (on iOS), are currently all available for free. Some of these apps have premium features than can be unlocked by paying customers, or may adopt business models similar to Trello/Asana/Slack that offer enterprise price plans. With a solid product, it is possible to make more profit by offering a “sneak peak” to users and tempting them to switch to a paid subscription.

My thoughts on Forest

Because I was stingy and didn’t want to buy the Forest app on my phone black moon face I tried using the Chrome extension version of it. According to the description, I should be able to blacklist some websites and my tree will be killed if I visit websites on my blacklist. However, the blacklist feature is not very discoverable. Until now I still don’t know where to configure my blacklist…

screenshot: Forest

While I agree with Forest’s mobile-first approach because of prevalent smartphone addiction and obsession today, I also feel that Forest has a pretty good use case in the comparatively more “traditional” browser space to help people stay focused on work or study while staying away from certain blacklisted sites. The value proposition of the blacklist-based browser version is slightly different from a mobile approach, in that users first recognize what websites are those that consume a lot of time and attention but do not contribute to productivity (for my case, it would be Facebook, YouTube and Gmail). This is the first step to breaking a habit of visiting those sites and getting distracted while doing work! Forest app on browser helps a lot in this respect.

After seeing Forest, I think I gained more ideas for building gamification apps. Watching a tree grow is one of those oddly satisfying things you know? And this concept could be harnessed to motivate users to accomplish difficult tasks. One idea would be a new feature added to CodeCrunch. Sometimes when working on programming assignments, it is very tedious to keep fixing your code based on the test cases that CodeCrunch says you failed. Some gamification idea could be, have a cat meow a song to you when you pass a couple of test cases. When users increasingly pass more test cases, you get two cats meowing a longer song; finally, when all test cases pass, you have a choir of cats meowing Celebration to you! You get the idea!

More thoughts (rambling, technical)

I was very impressed by the team’s analysis of the Forest app’s technical implementation, using a combination of React Native, SQLite, Node.js and Express. This bears a (albeit small) resemblance to the popular web dev stack, MEAN stack (MongoDB, Express, Angular, Node.js). In comparison to the MEAN stack, the Forest team’s choice of React Native over AngularJS + NativeScript, and SQLite over MongoDB, are both sound choices that I agree with.

While generic database-driven apps might favor NativeScript due to the fact that UI is typically not resource-intensive enough to justify a more platform-focused approach, React Native’s speed of rendering and execution allows developers to create performance-focused cross-platform apps that can run on the same code base, yet still leverage platform-specific components at will. Source: Back& In my opinion, Forest’s selling point lies more in aesthetic appeal (clean interface and trees are satisfying to look at) i.e. awesome UI, rather than heavy-lifting involving data. In this sense, React Native emerges as a more suitable option when looking to implement lightweight rendering as well as good native device integration (to contribute to good UI/UX regardless of device used) which are criteria relevant to Forest’s appeal and value proposition.

Similarly, a lightweight local (client) storage like SQLite is well-suited to Forest, which is server-less in design and is lightweight enough to store all tables and data into a single file on host machine. A NoSQL alternative such as MongoDB would only be suitable if data was unstructured and data to be replicated/distributed for the app to better scale. The team showed that it is important to make architecture decisions based on the app’s value proposition and the user’s need, rather than blindly follow trends.

Google Analytics Fun

Mad rush towards the final submission deadline for assignment 1! This is the first time I’ve worked with web development within such a short timeframe and with a fully functioning end product in mind (as opposed to proof-of-concepts we typically build for hackathons). As part of assignment 1, I’ve also got the opportunity to work with Google Analytics for the first time. From thinking about the use case to which we can apply Google Analytics (and make sense in doing so), to look at documentations and open-source modules that can help us integrate Google Analytics seamlessly into our application, it was definitely a fresh experience!

Why Use Google Analytics?

logo: GA

Software is never built in isolation from users. Therefore users’ interactions with software that we create ought to be of concern to us, whether you are a programmer, a product manager, a designer, a business and marketing guru…

Based on my research on Google Analytics and its use cases, I found that the most common way to use Google Analytics to bring business value include: finding out where visitors are coming from (helpful for market segmentation, targeted marketing and advertisements and customizations perhaps), through which channels visitors are discovering the site (helps in evaluating marketing efforts e.g. Facebook Ads, other social media channels etc.), and keywords used by visitors in search engines in eventually accessing our site (helpful in improving SEO).

Seems like Google Analytics is useful for business. Why should a programmer care?

Up till this point, it seems like most benefits of Google Analytics concern the business. Why should programmers still care about Google Analytics?

To me, the most obvious reason would be that programmers today cannot work in complete isolation from the business. Being about to apply analytics and obtain data across different platforms (for example, if you launched a product on both web and mobile), view (customized) reports and data in a digestible manner, track goals and so on, are important in helping programmers make decisions on platforms and features. For example, if we can find patterns in how web and mobile users differ in their interactions with our site (for example, in terms of the pages they visit), it could signal deeper issues concerning user interface and responsiveness of our site. Both are important points to note if we want to create software with not just great features, but also great features that can be fully utilized by our users. Tracking performance and usage can also help programmers better identify and focus on features that matters and make a big impact on user satisfaction.

By Developers, For Developers

My overall experience with Google Analytics (so far) has been that documentation is up-to-date and easy to understand, with a couple of libraries and SDKs that developers can utilize for tracking depending on your platform of interest (web, android, iOS for example). For my peers who are also using React on the frontend, you might find react-ga, an open-source React Google Analytics module, to be useful. Just npm it :-)

Adventures with Golang, AWS, Google App Engine and finally...

Taking a leap of faith, my project team has decided to use Golang on our server-side for assignment 1: Facebook application! As Backend Engineer of the team, this meant that I needed to get up to speed with developing as well as deploying for Golang (so my front-end engineer can actually start using my APIs). At the end of the mid-point submission today, there were certainly some notable achievements… as well as some interesting experiences… black moon emoji

What I hope to learn from CS3216 and HAPPY NATIONAL DAY!

In setting my learning objectives for CS3216, I looked at it from 1) an individual perspective and 2) a team perspective.

What is the role of programming languages in shaping the way we understand reality?

This essay explores the role of programming languages in shaping our thoughts and worldviews, similar to the position adopted by the Sapir-Whorf hypothesis towards human language. The first part of this essay adopts a historical perspective, by tracking the developments and advancements made in programming languages in order to elucidate the mechanisms by which programming languages shape our reality. Subsequently, we will be looking at how programming languages shape our reality on a day-to-day basis. Thus, we will be discussing whether (and how) programming languages frame our problem-solving capabilities and how object-orientation infiltrate reality in structuring modern work teams.