Pages

Friday, March 28, 2014

Today is my Last Day at Hookt!

Well, as the title says, today is my last day at Hookt. What is Hookt you say? Well, it's a start-up company that I joined about a year ago. Hookt is basically a private social network, unlike Facebook which is very public. The hypothesis is that, you don't need hundreds of friends - because most of them are probably not your real friends anyway. Instead, maybe you only need a quarter of a quarter of them as most likely, these are the real friends that you'd interact with often. In theory, it sounds all good. In practice, we found that building a small circle of network is a very tricky proposition. It's like asking somebody to enter a party room - except that party room is empty and you are the first person inside.

Anyway, back to the point - working at Hookt was very enjoyable experience for me. Why - you ask? Simple - I've made a lot of mistakes - and I learned a lot from them:

  1. S40's heap size is at most, 2MB. Some have 1MB. RMS storage (data store) is measured in kilobytes - at most - 512kb. These resources are not a lot to work with. Social network clients are image-centric by convention and learning how to work around these very limited constraints and still have an attractive product is a very challenging proposition. And yes, I've managed to build a product that works really well with those limitations. I've learned how to build LRU caches and using Weak References in building scaleable resource caching system.
  2. Hookt is my first ever published app. Back at Nokia, I worked on a lot of projects - but 90% of them did not ship because some guy up in the hierarchy suddenly decides it is no longer relevant. It's pretty draining when you invest a lot of heart and effort into something that will never see the light of day. That's why am so glad that Hookt S40 shipped!
  3. Threading. Yes, I am ashamed to say that I've never used threads (explicitly) in my entire life until I joined Hookt. I remembered an interview that I had in one company telling me: "How come you've never used threads - are you sure you are a developer?" - Well, now I know how he feels. Now, I can now hold my head up high and say, "Yes, I've developed a list box that's got tons of images inside each cell and when you scroll it, it does not lag. Why? Because I used threads!". Lol! I've also used them in things like networking and resource caching. I got burned a lot too before I learned how to properly use it (yes, databases got corrupted, UI flickered a lot, race conditions here and there, and of course - the deadly deadlocks!).
  4. Sockets. I was a complete newbie at developing networked apps before I joined Hookt. Now? Well, still a newbie, but I now know more! I can still remember suggesting a solution with my boss to just use the push notification feature of Nokia as a channel to deliver Hookt messages to other Hookt clients (to which Nokia said - "Hell no!"). I've also proposed using web sockets on S40 as opposed to using plain sockets. Now I know it is a bad idea. YAGNI (You ain't gonna need it) and KISS (Keep it Simple Stupid) lessons reinforced! And then there were problems talking to very experienced networking guys about SSL, certificates, and security - all of which I am entirely clueless about! But I am proud to say that after all these rough patches, I have managed to develop a very decent, sturdy, and reliable network layer based on sockets that serves as a backbone of Hookt.
  5. Database. Before using a 3rd party framework on a very important layer of your application like a database, make sure it's reliable and that there is a lot of support for it. Yes, I've made a stupid mistake of picking a crappy framework for my database layer! Why? I mean it did a decent job of indexing fields and making sure you don't work with correctly ordering of bytes directly when persisting records. Well, it's because the framework relied on a proper application shutdown in order for it to ensure that records will not be corrupted. That's completely unacceptable! Why? Because applications can crash sometimes - but that does not mean that it should corrupt the database! It still needs to be usable, with the data all intact! Also, another lesson learned is that you should not try to build relationships between tables - relational db style - if you cannot enforce the referential integrity between the two tables (especially true if you are not using relational db).
  6. O(c). If you have a phone running with a CPU of 300mhz, you'd better make sure that processing thousands of data would not result in a wait of 10 minutes. Yes, I've pushed my brain into thinking of solutions that produces constant runtime - and it was not easy - but it was fun!
  7. Test your application with loads of data. It will help you identify bottlenecks and thread problems that you would not detect easily.
  8. MVP. Yes, a polished app is nice. But a working app that's released earlier is better. Customer feedback is the key to building features that will actually be used by the customers.
Yeah, I'd say that's 2 years worth of learning, packed into a year! I definitely made silly mistakes along the way, but I learned a lot from those mistakes. I am very happy of what I have achieved and learned at Hookt. And to top it all up, I've shipped an app that's really responsive and memory efficient! I feel like a battle-hardened Level 30 Monk now, ready to take on that boss in the Dark Forest of Asgarth!

So, going back to the title, yeah, today is my last day at Hookt. Did I get fired because of all the mistakes I made? Well no, I actually resigned. Why you say? Well, I am in the process of trying to find my passion in life. While my stay in Hookt has been very enjoyable, I feel that I need to get out of my comfort zone in order to find what I am truly passionate about. I think this is what they call a mid-life crisis.. But whatever it is, I know that I won't find my passion if I don't do anything about it. So yeah, I'll be joining Global Relay on April 7, working with a data processor that processes billions of data. Sounds exciting? You betcha! 

So with that, I say.. Farewell Door #20.. And thank you for all the fish!


No comments:

Post a Comment