Finally the end of CS3216

So yesterday was the Steps exhibition that marks the end of the module and the return to the reality of the final exams, other than the final report of course. It was really an interesting experience to pitch our class management app to both teachers and students alike.

My team: from left, Kai Yao, myself, Boyang, Muneer and Vishnu.

As Vishnu (one of our team members) said, the best decisions that increased our coolness factor was the inclusion of a new, much better but untested teacher UI and the ability to take pictures to join our demo class in a more interactive manner. The funny thing was that both features were added very late. The new UI was added to the master branch just hours before and the picture taking was only finished the day before.

This was the general idea of my pitch which seemed to work quite well:

{

Profs in NUS especially those from Business face some issues in the classroom. One of them came to us with these 2 problems

  1. Students are afraid to raise their hand to volunteer to answer questions or in some classes, students are too enthusiastic.
  2. Difficulty in tracking participation marks and who are the active ones. It’s currently done by pen and paper which is, prone to mistakes and troublesome as grades have to transferred to the computer later.

Our app Courselooper, is designed to solve these 2 problems:

Problem 1: We demonstrate the “pick-me” features and class poll explain things along the way.

Problem 2: We show the giving of participation marks as a 2 click affair, select the student and just give how many marks you want. Colour codes are assigned to students based on their level of participation to enable teachers to know at one glance who are the quiet ones.

We also show how to create a class room using our class layout generator.  Also explain modularity of system like how more features can be added and deployed to other schools.

}

Some were stone-faced throughout and some were just plain excited about our project. Most of the visitors told us there is strong potential in our project and a few teachers even expressed interest in possibly using our app in their classes.

As Boyang remarked, “Coffees and sleepless nights, Sunday Macs and IE bugs… More to come my friends!”  This is my first semester where practically one day of each weekend was spent in school for a project. And seriously, I’m sick of MacDonald’s already (Mac’s is the only food establishment near to Computing that operates on Sundays). Ready to boycott that at least till next year.

I’ll be applying for CS3217 next Sem and I vow not to make the same mistake and enter the course without some basic knowledge first.  According to the people who have taken CS3217, it seems the module is more structured and “more manageable” than this mod. At the very least, I do hope to pick up the basics of iOS programming over the holidays for I wanna port my SOC Printing app to iOS!

This is exactly what I said in the closing video of our team but I shall repeat it here.

“Finally, we would like to thank Prof Colin Tan, Su Yuen, Prof Ben Leong and Prof Liu Qizhang from Business school for their advice throughout the course of the project. We hope Courselooper will be useful addition to your classroom. Thanks!”

This shall be the last post of this blog. Hope my experience will be useful to future readers and takers of CS3216!

Nearing the end of CS3216

(I originally posted this on my blog for personal record as it will definitely outlast this blog.)

At the beginning of this semester, I wrote about how this semester shall be the most pivotal for me. Now coming to the end of this semester, I do agree with most of the points I foresaw earlier with exception to the NTU part.  Anyway, this most are mostly for CS3216, the rest shall come after the exams.

It was hellish experience in this module so far. Most of the project has already been completed with exception to the final Steps project show case on Tuesday evening and a final project report.

(For those who are not aware, please COME and SUPPORT my team at our booth in COM1. We do not know our exact booth location yet but we are Team 9 of CS3216. The more comments/votes we get, the higher our grades! See here for details)

To say the concurrently-running assignments as being tough and time-consuming is the greatest understatement I could say in my life. The time I spent on this mod is greater than the rest combined. Fortunately for the default SUs accorded by my NTU exchange, if not I really wouldn’t be able to hold my head above the water.

I’m literally from a person with almost zero web programming knowledge to able to do something, not the best, but still enough to contribute to my team. I have picked up HTML5, CSS, Javascript, PHP, SQL and many frameworks along the way to get things done for my project. Though I’m far from a being web ninja, at least I will not be totally blur when I encounter these languages in the future.

For those who do not know already, my team’s final project for this module is to make a classroom management system for teachers to encourage students to speak and to grade them effortlessly at the same time. My part of this project is on the student’s interface. Have to admit though, my weaker web skills compared to them has required me to seek their help many times which I have to thank them for.

On the surface, this may seem technically easy and this is what our team thought so initially. There are no fancy algorithms, no need to code a game engine and no need to use unique frameworks. But as Colin says, the issue with our project is not with the coding but with the requirements. With a few stakeholders like our mentor Ben Leong, our customer Prof Liu and more, each with their own set of opinions; it is difficult to satisfy them all.

Like this famous comic

On the technical side, we ran into problems like browser compatibility and mass testing which is critical since our app is meant to be used on masse at once.  The numerous UI and backend components had to be integrated well.  On the lower levels, the dual communication channels, the typical http requests and sockets had to be coordinated well. Student and Teacher UIs on the high levels have to match.

We shall see the results of our labour when we gather feedback from the Steps Visitors. Do remember to sign up and give positive feedback for our team!

https://www.facebook.com/events/542707119147478/

Final Assignment starts and thoughts on CS3216

Yet a long time has passed since my last post. School work has overtaken by natural desire to write about my thoughts.

My team and I are in the final assignment working on the classroom management app. This is actually my first time working in a 5-man team. My prior group sizes in previous modules has never exceeded 4.

Working in such a large team presents its challenges name the communication overhead. It is not just about a simple broadcast of messages. We had 3 different meetings with stakeholders, namely our customer, Prof Liu from business, mentor Prof Ben and Colin. Each time, at least one member could not be present due to schedule differences. Time was spent with significant opportunity cost to ensure all members could be kept abreast with the situation. That’s why if I have a choice, no 5-man team as far as possible.

There was one incident also when the backend and frontend team were not in sync. Although we initially agreed to work on our parts separately based on agreed assumptions, there comes a point when we had to merge. It was last week or 2 weeks ago that our frontend team was a little too fast. We needed the backend team to provide us with certain new APIs. Due to communication error, this was not done so we had to wait. The backend team eventually made those APIs then started to rush us. By then, the frontend team was busy with school work so we had to stall. This issue was resolved of course but I feel sometimes communication has to be better arranged.

————————–

My greatest peeve of this module is that it heavily favours those with prior knowledge. This is coming from a person with nearly zero web development background. The workshops conducted at the start seemed too little too late. This module demands so much more and the grading system only cares about what we have done, not what we have learned.  I know a group who started working on their facebook assignment months before the course started. To some “dream” teams, the assignments are just revision and refreshers for their final assignment. For noobs like me, every new assignment is hours/days spent to pick up just bare fundamentals into new languages, framework and libraries. That is not even counting actually implementing the milestones in our assignments.

Granted, we all knew what we were up against when we chose to take this module. We were never forced into this. Just pointing out the harsh reality that the world, just like CS3216, does not care about the process or the learning experience, only the results. Despite my dislike for how this atypical CS3216 is conducted, I’m glad to say even right now I have never regretted my choice. Even if I do not get the good grade, since my assignment 1 and 3 grades are poor compared to those I have heard, it is still a worthwhile experience to work with so many brilliant people and learn so many skills at the same time on my own.

3 questions to ponder about

Q1: How much control and authority would you have given to this fourth voice in our choice of platforms (HTML5/native iOS)?

This question was first posed to the class. As the first person who volunteered to answer this question, I answered generally in the negative. Uncle Jim was noticeably annoyed when I finished answering but it is my opinion anyway. I shall elaborate in detail here.

I told him that I would not attach much weight to this fourth voice. I’m not sure the skill level of his sole coder but I assume he knows HTML5 to a certain level. (He may have mentioned but I have forgotten)  The fourth voice suggested going native knowing full well none of them have iOS experience.  I have not done iOS programming but from my experience in Android, I can safely say native is harder to pick up than HTML5 in a similar timeframe.

We know the outcome of his project was generally okay since the fourth member did contribute enough. To me, I see this as a stroke of good luck that the fourth guy contributed despite his commitment to the other group. So consider the alternative scenario, say they proceed down the native path only for him to give up later to focus on his own team. What will happen to your team?

I’m not sure if they tried to find another coder who was skilled in HTML5. If they had done so, this coder would have advised them to go the browser route. The risk to me is simply too high to entrust him with the responsibility.

I do not know all the details. As this fourth choice is not a card-carrying member of his team, I will have doubts about his commitment level even if he claims otherwise at first. This is not a business setting where contracts can be enforced, this guy can quit helping anytime and there is nothing Uncle Jim’s team could do anything about it. This is unless of course as another student said, he gets some kind of share in the project if it succeeds.

I would take the words of the fourth voice under advisement but ultimately not as heavy as what Uncle Jim did.

 

Q2: With the deadline just 2 weeks away, how would you, as project manager, resolved this problem if it were to occur within the team?

At this point in time, the commitment level of the fourth member was established. I consider him to be part of the card-carrying members. So let me proceed on with this assumption. In this case, I would give weight to the opinions of the strongest coder which here, is the iOS guy. Now on to the reasons why.

With only 2 coders on the team and with the iOS guy as good as what Uncle Jim describes him to be, it is best to fully utilise your best coder in his preferred platform. The second coder should be an analogy given earlier in class “serve tea to the best coder if he needs it”. I’m not ashamed to say I have “served tea “myself. Knowing what is at stake, with my skills in a certain framework may not be as strong as the other guy, I will assist him in the best way I can without getting in his way.

Non-coders should never be in a position to dictate what frameworks to use.  They can suggest use-cases, UI improvements and target platforms. They must however never force a developer in this egalitarian project setting to do something he is uncomfortable with. The people doing the work knows best.

 

Q3: What are some of the issues that we presented that could have happened to any team? List down 3, and talk about how you would have resolved these issues.

Here are the issues:

1.       Framework/Platform selection difficulties

2.       Insufficient coders

3.       “Hung jury”

 

Issue 1: I would first look at the capabilities of my team. As in the previous question, I will select the strongest coder and choose his preferred platform if it is suitable for the task. That is of course assuming the team is small and he can contribute the most to the team.

Issue 2:  This problem should be solved even before the group is formed. If not, then “easier-to-pick-up” frameworks should be chosen such that even a minimum viable product can be produced with limited resources. Native, no-go. The sole coder should be freed up from as much tasks as possible. Things like documentation and talking to users that can be done by others should be done by others.

Issue 3: For a split decision, now is the time to seek advice from the module coordinator or TA. Leverage on their experience with past teams to decide which is the best course of action to take.

Halfway now

It is a long time since I posted the last blog post. You see, the demands of CS3216 really make things fly in the blink of an eye. So just a few random summaries of what I have experienced during the interim.

Assignment 3 is ending soon. One issue that really got on my nerves at the start was changing of project parameters to disallow native apps. This was despite the fact that I asked Colin days before the assignment started and was given the approval to do a native app. The instruction pdf also allowed the coding of a native app. By the time the email came in to disallow native apps, I had already spent some time on the native mockup. Had to throw all of it away.

It was blessing in disguise though. With native apps out of the way, we were forced to look for alternative mobile-friendly UI frameworks. We settled on Sencha Touch though presenting a slight learning curve to me as I’m new to it, was relatively simpler to code on than Android’s XML-based design styles.

Company Pitching

Fast-forward to the company pitching session. I hereby declare that I am a part-time employee of Innova Technology (the company that pitched the Crowd Tracking) since I interned there during the summer holidays. They needed developers to handle this web project and since CS3216’s pitching coincided with this, I proposed this to my boss and the rest is history. I shall not be working on this project as you all have seen me pitching just now. Nevertheless, I’m willing to assist the relevant team with my knowledge in the new Android 4.3 Bluetooth Low Energy APIs as this technology is rather new.  I suspect people experienced in this are rather hard to come by as well.

As for the other companies, the ones that attracted me the most were the Ultrasonic Indoor navigation and Little Bits. After consideration that alternatives like SGMalls (which uses the more prevalent Wifi) and the fact that ultrasound that is low enough to be picked up by phone microphones could be hurtful for some, I decided not to try it.

For Little Bits, I was interested enough to go with 4 other people to the Silicon Straits Office at one-north to hear more about their ideas. Ideas like video-sharing and simulation were thrown into the ring. Some were good but hard to accomplish, some were doable but a little generic for me. With 5 interested students, one of us had to go. I had the suspicion this had to be me as there were already 3 iOS developers, and the other Android developer could work on design as well. Me the last Android dev was the odd one out. I agreed with their assessment better to work on one platform and do it good since user-base is not a real priority for them at this point. (Unlike the final project I’m pitching)

Personal Pitching

With me solo now, I made the first pitch to my friend Kai Yao. He was tentatively interested and you know the rest. His skills of back-end complements my Android front-end so we could do a viable product if that’s all we have.

I admit this was the first time I made a presentation where the first rehearsal was just one hour before it was due to start. Nevertheless, we did not screw up.  The idea of getting strangers to do ad-hoc tasks actually came from my assignment 3 team. This idea if I were to give credit to is to Hendy (he pitched about the contractor app). None of them wanted to continue this idea so I was the sole guy left.

I could tell most of the audience were ok with our idea in principle. It is just that we are not the first with this and the pertinent issue is the initial critical mass of users to get this going. As one of the “industrial people” mentions,” if you are the first person with the idea, you are crazy”.  My comment to “fake it till you make it” by getting some initial people stationed around Singapore to work for tasks was shot down. Hmm, I wonder if this could actually work.  Anyway, after we get our industry mentor, we will thrash out our options with him. My team and I are willing to switch focus to Ben Leong’s idea of companies and charities. We see how it goes.

I was glad we did not take the easy way out like some groups and just don’t pitch our ideas and go straight to action. The interaction with the industry people and our classmates are indeed valuable enough. Well worth the effort in making those slides and a short rehearsal.

Ben Leong says we are “not smart”. Whatever idea we come up with has been done by our predecessors. It so seems that the “low-hanging” fruit has been picked by our seniors. I suspect as the years go by and as more students graduate from CS3216, it will be increasingly harder to get more unique ideas that can be achievable within this tight academic timeframe. Of course, I hope to be wrong.

Before I end off, I would like to include this picture I took from the lift buttons at ICube.

ICube Lift button

I was intrigued by the close placement of the disabled and normal buttons. If I had a choice, I would have removed the upper buttons to save costs. The lower buttons are low enough to be reached by the wheelchair-bound and is not so low able-bodied people even tall ones cannot reach easily. Either the buttons should be separated further or just have one set of buttons. A matter of UI with good intentions poorly executed?

Now back to assignment 3…

YKM’s Critique on Airtime

Airtime is a Facebook App that allows people to engage in live video chats or share videos with other users.

I feel the 3 most critical points about AirTime are as follows:

1. Slow network-server connection

2. No mobile apps support

3. Launched at wrong time with mismatched expectations

The first issue and I believe it’s the most important is the slow servers. The group mentioned that they were unable to make video calls which is the core function of the application. If the app cannot even handle it’s most basic use case, then may I be blunt, it does not deserve to go live.

The second issue is mobile apps support.  To use airtime, you have to access their website. However, this may not be practical if you are using a smartphone. Most phones this days are powerful enough with front-facing cameras. It is not that hard actually to implement (shared) video calling.

The final point and what I feel is the most important is launching at the wrong time and with such a big bang, mismatched expectations.  Airtime started at a time when the social landscape was not ready to handle such unprecedented access to users’ personal lives. Even now at this day and age, I was especially appalled when I saw Airtime requires so much permissions in order to use. Airtime should have incrementally requested for permissions as users get more comfortable with the app.

In response to a question made from the audience whether the app should have waited for the market to be ready or lose the first-mover advantage, I draw parallels to my own group’s Feedly presentation. The market having been dominated by the free Google Reader was simply not receptive to alternatives. Feedly however developed the product incrementally over time in the background. When Google Reader shut down, they had the infrastructure and were primed and ready to gain the first-mover advantage.

So maybe if the market is not ready, just develop your product first but not publish it at a big bang with celebrities like Airtime.

Bjorn’s talk

The talk on Monday was indeed an eye-opener into the marketing strategies employed by businessmen like Bjorn himself.

I was actually ok at the first half of his presentations. Those like selection of the right platforms and creative advertising are still within my personal ethical boundaries. I shall not touch on them. However as he proceeded to the second half, I began to cringe in my seat.

The point that I was personally aghast was fake it till you make it.  He cited the precedent of Reddit and their success to bolster his point. I agree without the fake accounts, Reddit wouldn’t be what it is today. Even so, I wonder, are there no other alternatives to creating fake accounts to talk to each other. Such as using their real accounts, getting friends to join in. Hmmm, maybe not, and probably I should not work in Reddit during its startup period.

His point on forum seeding reminds me of subliminal advertising although they are not the same. Where people inadvertently purchase your product without consciously thinking about the purchase. This seems like a very “mind-trick” method to me. The cost of the apps amount to just a few dollars so I guess very little harm is done. I doubt this method will work on higher cost items.

Call me idealistic, but there are certain points I may not employ. However, I’m willing to close one eye if my marketing colleagues are doing the dirty work. That is the most I will relent. That is why, I probably may not be cut out for a businessmen/marketing career.  I can imagine people telling me “staying firmly on the ethical side does not bring in the bacon in the business world, no bacon, no ethics to talk about”. I shall see, I may change my views someday.

At least one major takeaway now that I’m aware of these marketing techniques is not be so easily fooled by them. Next time if I see a list of discounts, I’ll be sure to scrutinise each one to ensure that the seller is not trying to slip his product in the same net.

Kheng Meng Week 3: Barely threading above the water surface

(I wrote this blog entry in parallel with a longer post on my main blog. If you are interested, check out this link. )

Having nearly zero web programming prior to this course, describing the first Facebook app assignment is tough is a mere understatement. With the second assignment now out, I feel like I’m barely threading above the water surface. Nevertheless, I feel our team has something reasonable to show for our first milestone on Monday.

I have to give credit to the Twitter Bootstrap workshop. Having been exposed to this library, we were wondering why we didn’t use this earlier. The silver lining is that having not known about this, we were forced to go back to fundamentals during the initial process to code our UI. If I have a suggestion to make, it is that this Twitter and Photoshop lesson should be conducted on the first workshop instead of the Github one. After all, we have to make something first before we can commit anything to the repository.

The learning curve for this module is indeed high. Unlike CS2103 where knowledge in Java/C++ in prior modules can be applied, there is no web module before this to equip us with the skills. We have to learn and apply in a shorter time span. But hey that’s why I’m here for right?

Finally, let me end with a complaint. CS3216, why are you worth only 5MCs??? This module deserves at least 8MCs.

First week: First assignment

First day of school, first assignment released. Not a very good start to the semester I suppose.

Let me declare that I have negligible experience in web programming prior to this course. The Facebook assignment seemed rather tough when I first read it. Nevertheless, my team comprised a good mix of a guy from business, a CEG person who was rather good at design and a web guy whom I worked with before in other modules. I’m actively brushing up on my web skills as we speak.

The first workshop was brief and concise. I did managed to grasp the basics of web programming and setting up of the necessary environments. I however felt that the workshop was seriously too long. Eating up a better part of our Saturday means less time for other stuff. But anyway, all worth it in the quest for knowledge.

My team and I have settled on a centralised photo management app for Facebook. Let’s see how things pan out in the weeks to come.

 

 

What I hope to learn in CS3216

From my freshman year, I have known that the reputation of CS3216 and its companion module CS3217 precedes them. Depending on which senior I spoke to, they have either taken and loved or shunned this module because of the tough workload. Those who loved them craved the experience and knowledge. I told myself if the opportunity presented itself, I would prefer to take the rough road to the usual well-trodden one.

Having made this choice, I have “resigned” myself to the many and tough assignments that will soon come my way. My goal is to gain as much web-based skills as possible from this semester-long module. What attracted me to this module as well was the extra supplementary weekend courses. Call me cheapskate, but those courses are not cheap if taken externally!

Not to forget the soft-skills. In my summer-internship, I learned that although hard-programming skills are a prerequisite for the job, it is your communication skills and ability to work with people that will determine how far you and your company will rise.  Working hard is useless if nobody knows you are working hard.

Unlike CS2101/CS2103T where the group members are fixed for the entire semester, the opportunity to rotate group members across different assignments should test and imbue my skills to give a reasonably good first impression and hit the ground running with people of different backgrounds.

Finally, my last takeaway is to get better at working well under pressure and tight deadlines. Since the technology industry is an area where who is the first-mover takes-all, CS3216 should prepare me that much better and closer for my future.