Half-time, once more.

It’s the semester’s half-time again. This time I didn’t spend it studying my ass off in school. I actually did project after project and went home for a break. Having only two papers next week, I feel strangely confident. That’s a bad thing.

I have a tendency to stay in school most weekends for fear of disrupting my workflow. But this semester has been different, I have not been focusing on what is important.

This half-time was spent productively at home.

I got actually got things done at home. I revised for my papers and finished what I needed to do for my projects. Perhaps I needed a change of environment. A much more relaxed and slow paced environment. Having done a fast-paced internship over the entire summer without a proper break is probably taking its toll on me, finally.

Yet another pain is about me being busy. Sometimes I don’t even think I am busy doing things, I’m busy being busy. This is really worrying because that’s the pathway to being the best procrastinator in the world.

In other words I feel like I should probably get my shit back together for the remaining 6 weeks of the semester.

Randy Pausch said this in his famous The Last Lecture:

When you are doing something badly and no one’s bothering to tell you anymore, that’s a very bad place to be. Your critics are the ones still telling you they love you and they care.

I’ve got people in my life who still genuinely believe in me and I am ever grateful for their existence. Here’s to a better second half of the semester. 🍻


I wrote about not treating school seriously previously and felt that maybe it is time to do some life restructuring.

It’s already 3 weeks into school but I don’t feel like I’ve learnt or achieved much at all. I need to tidy up what’s currently on my plate since I have so many things to juggle at a single time. Mostly CS3216, NOC application and IFG basketball. (Which I didn’t make the team for this time)

Trying to do something on a regular basis develops a habit and I think habit is exactly what I need right now. So just three simple things to do regularly:

Finish up all other tutorials before touching CS3216

This has proven to be a problem so far this semester. I’ve been neglecting my other modules. Thank goodness they’re still pretty easy and straightforward, so not much time is needed to catch up. But building a project while being in school really distracts me from what I need to do. This feels something like CS1101S in my freshman year, but worse. This shall remain as my number one priority because it’s only going to get more hectic as the semester progresses.

Do one algorithm challenge in Python, every week.

Since I’m already doing my Database Management project and Networking assignments in Python, why not master this neat little language this semester? (Together with 3216) Doing algorithm questions in Python kills two birds with one stone. Both having a better grasp of the language and keep my fundamentals fresh in my head. It’s been quite a while since I’ve done any form of sorting, graph theory. I can’t even remember the previous time I used a recursive function.

Software engineering is all useful and cool, but I still need to polish up my fundamentals. Lacking any useful fundamental course this semester, this is the only way I can keep my theory in tip-top condition.

Waste no time on other useless things.

Relax time should be spent on purely resting and relaxing, not on things that will waste more energy. Social media is one huge bane of productivity since ‘social media breaktimes’ usually extend beyond what was initially planned.

Relaxation should be limited to these three activities:

  1. Music, play the guitar
  2. Reading
  3. Exercise

The general rule of thumb that I should follow is that if I’m doing nothing, I shouldn’t be on social media.

I was watching the sunset from my window ledge just now and reflected a bit on what has been going on lately. I might be good at coding, I might have a fiery passion for my craft. But I’m not the best, yet.

There are also other things that I am not good at, my weaknesses and flaws. Nor am I that talented in any other crafts or hobbies like guitar and photography.

If coding is my only talent, I better be damn good at it.

Here’s to more good news in time to come!

The view from my room:


Learning Through Mistakes

Just came back from a CS3216 talk on Growth Hacking by Zopim’s Bjorn (very cool name I swear) and Wei Xiang. It was a pretty inspiring and relatable talk especially after I completed an internship at a growing startup.

One of the more relatable point that was mentioned is learning through mistakes. Several questions were brought up on rewriting the tech stack and choosing the right stack from the beginning. I think Wei Xiang did a great job addressing these concerns that us budding software engineers often have. While there are really ways to learn by RTFM (Read the F-ing Manual), some things can only come with experience. Going through the process of making a mistake and recovering is actually the best process of learning. This gives me more confidence that what I’m doing for my project technically is correct (even though it might be all the wrong decisions made, but at the end of it I’ll learn something).

CS3216 is really fun, but I’ve been neglecting my other modules. Should probably start to take school a bit more seriously. I have no regrets taking this module so early on though. Skills acquired here will definitely be of great value!

Fingers crossed that all will go well! :)

ShopBack Post Mortem

Well I didn’t exactly die in ShopBack, but I’d want to document what I’ve experienced from the 3 months spent here. My official end date is next week and I think it’s the right time to do some reflection (again).

I like to split what I’ve learnt into three different categories. Mainly:

  1. Software Engineering
  2. Business Operations
  3. Work Ethics

Software Engineering

I took up the biggest project so far in my software development career here. Rewriting the entire ShopBack website from near-scratch. The development has exposed me to really complex codebase with messy chunks of code here and there. Managing complexity and scalability is one of the key takeaways from this part of the internship. Writing code that works should not be the main concern as I progress on as a developer. It should eventually lean towards writing scalable code. In my 3 months here, I have been taught the right way to do things, while being forced to deal with the wrong way of doing things at the same time. It contrasts why the correct way is so much better by reading an example of poorly organised code.

The next step in writing code that scales would be automated tests. Testing allows developers to deploy with confidence and ensure that new features do not break the existing ones which works. As a frontend engineer, testing is rarely implemented due to the difficulty in testing user interfaces. (I mean seriously, there’s 1001 ways that a user interacts with your product) The next big project that I took up was to implement an integration test framework for the site I’ve written. I’ve spent two or three weeks on this so far and I hope that it could be finished before I leave the company. At least provide some documentation on how the testing framework works.

Other small improvements I’ve made as a developer will be my Git skills, familiarising myself more with Vim and most importantly, code style. My mentor was really big on writing code that looks pleasing to the eye so I guess it has influenced me. (Not as if my OCD wasn’t serious enough)

Some of the main code style mini-practices that I’ve taken away:

  1. No trailing whitespace (Vim tells me about this all the time)
  2. Newline at the end of the file
  3. Spaces, not tabs
  4. Consistent indentation
  5. Naming conventions
  6. Follow a style guide (Airbnb JavaScript, PSR etc.)
  7. (and the list goes on)

These small mini-practices will affect the way code is written and how other people perceive my programming abilities. I hope I’ll be able to maintain the same level of code discipline in my school work as well as for future work opportunities.

Last but not least, understanding the deployment process and how scary things can get. Deploying has always been an exciting process. The DevOps workflow of separating different boxes to perform different functions, such as separating ‘feature’, ‘staging’ and ‘production’. These are deployment best practices that cannot be acquired by simply doing personal side projects. NUSMods follows almost the same convention but I’ve never tried to deploy anything there before.

Business Operations

Gaining knowledge in this field was not part of my main plan, however there are certain things that are good to know. I’ve been exposed to different ways that the company functions as well as the plans that they have to grow and scale at a fast pace. Mainly via data-driven processes and business operations.

Of course the secret formula is not to be divulged here, but gaining exposure in this field really opens up my eyes to how a company works on a lower level.

Work Ethics

Working in a startup has been really exciting. New features get shipped on a daily basis. There is deployment on every single day and there are always ad-hoc issues to be fixed on the fly while working on improvements to the product at the same time.

As a result, we constantly work after the standard office hours. Personally, I do not mind working the extra hours since I’m learning a lot in the process. However I think there should be some lessons learnt in work ethics here as well.

Over-promising is a dangerous habit and would more often than not land one into a very bad situation. If something seems unreasonable or unmanageable, it should be brought up and be negotiated with. Furthermore, since there are most likely different teams in a startup, it is also important to manage effective communication. At the end of the day, miscommunication will always lead to time and effort wasted.

Overall, I have enjoyed my time working for a growing startup that values hard work and passion. In fact I am really thankful for this opportunity and the important project that was assigned to me. As much as I want to stay for a longer period of time to take on more exciting roles or projects, it’s time to move on to greater things in life. (CS3216) I plan on touching up on my algorithms once more before the school term starts.

It’s been an enriching summer internship and I hope to recharge my batteries over this long weekend before the semester begins. Happy SG50! :)

Goodbye Summer, Hello Year 2!

Summer is coming to an end soon and I’ve grown so much both as a person and as an engineer. School is starting in a mere 2 weeks’ time and here’s what I hope to achieve for my Sophomore year’s first semester!

CS3216: Software Engineering on Evolving Platforms

This shall be the love of my life for the next semester. I’ll be trying to put skills I’ve acquired at ShopBack into this module. Well I don’t see this module as a class per se. I see it more as an opportunity for me to do something extraordinary. The code that I’m going to write in this module should at least make a difference to somebody’s life out there. In fact that’s one of the main reason why I code extensively. The thought that my product could affect hundreds and thousands of users excites me. However I’ve heard scary stories how this module kills a lot of time, and sleepless night to rush for product launches etc. Well, been there, done that. (Somewhat)

I’ll write more about this in my class blog (which is required by the curriculum) here.

CS Fundamentals

Not to say that my other modules are not important. I’m doing CS2102: Database Systems, CS2105: Introduction to Computer Networking and ST2334: Statistics and Probability. There’s one more Tembusu module which I’m not sure which to take yet. The two CS modules should provide me with adequate foundation knowledge that will allow me to level up into taking up more roles as a software engineer. While the last one is simply for the sake of strengthening my mathematical abilities.

Tembusu Orientation Site

This has been a side project for the summer (I’m pretty sure it qualifies as an orbital project but I didn’t sign up so). So Tembusu Orientation needed a website and I volunteered. It’s up and running well so far, I hope. It was my first time trying to deploy something on Amazon S3 and it’s pretty exciting.

The idea of this project is to make this Open Source. It’s currently private on GitHub but I’ll open it soon. Every year the orientation committee has to go through the trouble of setting up an orientation website for the freshies and I think there should be a better solution to this.

Well during the non-orientation time I hope the website can be used to scratch some of the itches of the new Tembusu computing freshies. Which reminds me, I should probably encourage most of them to get involved in coding for fun rather than coding for school :P

I’ve been growing so much as a person over summer, and I can’t be more grateful for the opportunities and time I had. Both in ShopBack and my personal life.

Still, keeping my University code to live by:

Be yourself, be free, have fun and don’t forget to dominate.

Here’s to more adventures in time to come!

Stay strong. :)

“Engineers Cannot Panic”

This is probably one of the most important lesson learnt so far for my summer internship. After writing code for so long, it should be ingrained into me that software breaks all the time. 

As a new developer, I panic very easily. I will not think properly and logically, and as a result breaking more things than I should have fixed. One day while doing pair programming with my mentor, I was panicking as usual and he said:

“Engineers cannot panic.”

This phrase stuck with me for quite a bit. I didn’t really feel the reason why this should be the case at first, but on the way home today, I thought of the engineers who worked on fixing the SMRT train failures the day before.

Their job was way more tedious and the number of users affected by their fix rakes up to hundreds of thousands. The amount of stress that the engineers had must’ve been huge. But imagine what would happen if they panicked. Engineers are the ones who knows the system best. Keeping a clear mind and focusing on solving the problem at hand is what saves the day, not concerns about the consequences of screwing things up.

Here’s a little challenge to myself, the next time something breaks, take a deep breath and solve it in a calm and peaceful state of mind. Not forgetting to time myself to do it within a time limit. :)

If there’s one thing you could change about your internship

What would it be?

David, our senior engineer, posed this question to me today over dinner and I honestly didn’t know the answer. I may be stagnating after a month of really fast paced work. Now that things are starting to settle, I find myself learning at a slower rate. Maybe it’s time to force myself to learn more. 

The perks of working in a startup consist of insanely fast paced work culture and (somewhat) freedom of doing what you want. Given a project, I had almost full control of how I want to achieve the end product. The pitfalls that comes with this would be the lack of a proper structure of how should an intern learn. Similar to how CS1101S throws us into the deep end, expecting us to somehow figure things out. It’s pretty much independent learning while making full use of the resources you have around you.

Just a few things off my head that I want to achieve in the remaining two months:

  1. Learn to give a short technical talks about side projects, cool new technologies etc.
  2. Have a firm grasp of CSS architecture, and refactor most of the CSS/LESS that I’ve written
  3. Get a clearer picture of the entire deployment process, I’ll need it for Tembusu’s orientation website in time to come
  4. Increase productivity by learning to use my tools well (Git, iTerm2, Sublime/Vim etc.)
  5. Get off caffeine & junk food dependencies

The last one is pretty important. I shouldn’t be fuelled by caffeine and chips all the time.

For a start, I’ve been trying to write in xbili.com more frequently about what I learnt during work. Yes, I’ve bought my own domain just to play around.