Building Up

'Seedling' by _sjg_, on Flickr

Seh Hui Leong

Programming

My journey in Mindvalley is definitely an interesting one. When I first joined the company, I’ve been working on CustomerHugs — which is a web service for users to collect reviews and testimonials from Facebook users.

Unfortunately it is a service that didn’t caught on and was now being in hibernation mode and isn’t actively being supported at the moment1. So in October last year, I was being assigned to my second solo project.

The Second Act

The original idea is to come up with a supplementary API service that complements with UrbanAirship‘s in-app purchase service — to be more specific about it, I’m assigned to come up with an API service that would provide just enough tools to create a more flexible in-app purchase store front for mobile apps, while leaving the content delivery and transaction tracking to UrbanAirship.

It was supposed to be a small project — fixing a small pain point and move on to any future project that would come my way in two months. Little did I know is that as months goes by, this small project have become a full stack solution in handling in-app purchases for iOS (and we ended up not using UrbanAirship at all — which they discontinued the in-app purchase service later this year).

Ever since it is live on February with the launch of Omvana, it has been a very treacherous and rewarding adventure. Having to race against time to learn as much as I could, slaying all the mysterious bugs that plagues the service as well as dealing with the stress of receiving an SMS saying that the server is overloaded and cannot handle all the traffic we are getting.

CPU usage chart - before and after panic period

The part about receiving SMSes proves to be quite a stress tumour, in fact. It started off pretty benign — the downtime would probably just last about three minutes and everything would work like magic again after that. As we start to gain traction and our marketing efforts for Omvana becoming more successful over time, the downtimes would occur several times in a day with each downtime lasts for at least 15-20 minutes.

I’m really fortunate that I’m able to work with Gareth Davies — who helped immensely in switching our monolithic setup to a horizontally-scalable setup (read: running across several servers). And ever since early August, all the stressful SMS that lasted for months has finally stopped.

Looking back now, here are the full list of things that I’ve learned so far during my development life in Mindvalley:

  • Learned Django, its internals and a growing number of useful libraries
  • REST API design and best practices
  • Improved my tool set and development environment for Python
  • Unit testing, gone are the days of cowboy programming
  • Dealing with database migrations and all the incompatibilities and nuances (and figured that I don’t like MySQL as much as I used to and prefering PostgreSQL)
  • Managing project time lines and feature priorities (proves to be even more important because I’m managing myself as a solo developer)
  • Planning for horizontal scaling and infrastructure changes (though Gareth most of the heavylifting in terms of actually configuring stuff)
  • Performance tuning and monitoring
  • Using asynchronous task queues and getting bit by all the pitfalls that comes with it

Granted, as the project continues to grow, the bugs are starting to become gnarled and harder to slay and there’s WAAAAY more improvements that needs to be included. This shows how much more I can learn from this project and I’m more than happy to grow together with it. 😊

Contributing Back

Having gone through an intense year of development, I’m now much more comfortable to share the knowledge that I’ve learned so far. Granted that I still have a lot of learn and I’m nowhere from attaining guru status. But the least I can contribute back is to share my learnings from a novice’s perspective and hopefully it’d help someone :).

I really look up to LincolnLoop and would think of them as my role model in this journey.

In fact, to start things off, I have given a talk titled “REST API 101” at Webcamp KL — which serves as a primer to REST API. And this month I’ll be doing another talk at Webcamp KL on my experience in horizontally scaling my API web service.

And in terms of open source contributions, I’ve just recently push a fork to django-tastypie-extendedmodelresource — a convenience library to create nested resources using Django-Tastypie (e.g. creating API endpoints that looks like /api/v1/authors/cslewis/books/).

Other than that, am really looking forward to all the things I’ll be able to learn in months to come! 😊


  1. For the record it’s still working and you can still sign up for a new account, but paying for zero support is something I won’t vouch for. :p 

Written by

Seh Hui Leong

Python programmer by trade, interested in a broad range of creative fields: illustrating, game design, writing, choreography and most recently building physical things. Described by a friend as a modern renaissance man.