Liem Ly

Manager. Engineer. Human

Scaling Myself: 5 Lessons From Two Years as an Engineering Manager

Five lessons from two years going from tech lead to engineering manager.

September 20, 2025 · 5 min · 885 words

Initial experience with Kafka

Before starting my job at Parcel Perform, the usage of Kafka, or message queue in general, would sound ridiculous to me. I thought to myself: “why do we have to add complexity to our system, instead of processing the data, we have to put it into a place, and then later on consume from that”. However, after months of using that, I have started to realize how (mostly) wrong I am. ...

August 2, 2020 · 4 min · 778 words

Docker for local development

I first came across Docker two years ago, when I started working at Chopp. At that time, we are using Docker on our staging and production. Jenkins will run some tests through the code, building the Docker images, and deploy them to desired destinations. Now, after I joining Parcel Perform, I have had a chance to use Docker more extensively, even in local environment, and there are some noticeable changes compared to the old method that I could realize over a course of a month ...

November 24, 2018 · 3 min · 458 words

Finding the right bottleneck

One of my favorite area of software engineer is performance tuning. No matter which kind of software I am writing, a desktop/mobile/web app, or even a script, I always want it to super fast, with as little resource as possible. Yet, there have been some occurrences that I have wrote/failed to detect some bottlenecks that makes me closer to my wishes. In university, when I was doing a website development for event, we run into free-tier bandwidth limit of Google App Engine after a few hours when the number of users spike. I tried to optimize in many ways, including but not limited to: minify source code, optimize process, cache. In the end, I found out that there is one single image that I had not optimized, and it was on the main page of the website. Thus, each main page loading in fact takes MBs of bandwidth. After finding out the problem and optimizing the images, the bandwidth never go over 25% again. In another word, ~8 times less bandwidth used. ...

March 15, 2018 · 3 min · 472 words

Achievement unlocked: Giving a recommendation

This week marks the first time I have ever given any a recommendation on LinkedIn. I know, some people have already been doing this since they are still in university. Why was this considered an achievement for me: I was very strict in giving recommendation or even references. If my friends/colleagues/bosses ask me if I know anyone who can help, I had to ensure that the one I refer would be very helpful. ...

March 11, 2018 · 1 min · 133 words

Migrate from Objective-C to Swift

Disclaimer My background is an engineer with less than two years of industrial mobile development experience and less than a year in iOS (with some experience doing the server-side as well as Android development on the side), so you will probably find this post: Beginner-friendly Containing flaw/nonoptimal/simply stupid/etc solutions. But hey, it works. At least Fabric agree with me (we started migration at the end of March). Nevertheless, I would truly appreciate for any correction and suggestion to make this article a better guide for people who want to make a switch. ...

May 27, 2017 · 4 min · 785 words

Lessons learned from interview engineers (P.1)

CVs are (often) exaggerated After screening and interviewing several candidates, I saw a real difference between what they wrote on their resume and what they truly know/did. I have seen several people claiming a bunch of programming languages on their CV despite having only 1,2 or even 0 years of professional experience. It turns out they have only tried out those in “Hello World” programs. IMO, I will only put a new programming language if I have at least implemented a new feature in a small to medium size program or makes several changes on a large one. Otherwise, it will be very difficult for a candidate to live up to the CV :). Moreover, I also notice this phenomenon more often on fresh graduate. As they have done few projects, they tends to put more programming language and more small programs into their CV in the hope that it will make up for the industrial experience. ...

May 21, 2017 · 2 min · 396 words

Install Opencart on DigitalOcean

This tutorial is based on Chubbable’s post with some modifications and correction. Compared to the original post, there has been several changes since the time of posting. It is still one of of the most accurate tutorials for installing Opencart on DigitalOcean that I could found. Thanks Chubbable All the images in this post are from Chubbable’s article. Step 1: Create a VPS with LAMP Login to your Digital Ocean account and click on the Create Droplet button. If you just want to play around, you may opt to choose $5/month. But if you’re migrating your OpenCart store from a shared hosting service, then $10/month should be minimum. Choose a Region or Location. It’s best if you choose the location of your Data Center that is closest to your target audience. Select Image / Application. Click on the Applications tab and scroll down a bit and click to choose LAMP 16.04. Create an SSH Key Pair to use with your OpenCart VPS (optional). If you’re on Windows, then follow this video tutorial on how to create SSH Key Pair on Windows. If you’re on Linux, this video guide will teach you how to create your SSH Key Pair for your VPS. Copy and paste in the content of your .pub SSH key. Enter a comment or name for it. Finally, click on the Create Droplet button. This should start creating your VPS. That’s all for creating your VPS. LAMP should be installed after your droplet is created. ...

February 25, 2017 · 5 min · 946 words