“I have always wanted to go to Japan, Singapore or America to work. The first two things I think of are learning English and good coding skills.”
Dung Ngoc Nguyen - Software Engineer at Wolt/ DoorDash (Japan)
When I was working in Vietnam, I always wanted to go to Japan, Singapore or America to work. The first thing I think about is to learn English, and secondly, coding skills must be good. If you’re at the same level as others, companies will naturally prefer local candidates to avoid visa sponsorship. So, I had to excel both in algorithms for interviews and technical skills to be the chosen one. Balancing these two things is challenging. In the evenings, I practiced LeetCode and algorithms. The rest of the time, I focused on improving technical skills by working on side projects and addressing issues faced in my main job. These solutions could often be generalized and shared on open-source platforms with the company’s permission. Creating high-quality open-source projects not only improved my technical skills significantly but also allowed me to gain experience and understand why certain best practices were followed. It was a great feeling when I finally understood the underlying principles.
For technical skills, besides gaining experience through building and researching, curiosity is key. Don’t stop at completing your own tasks! For example, if a task is related to another team, it’s essential to understand how all the features are interconnected. Why does this API endpoint relate to that one, and so on? Once you understand the bigger picture, you can work much faster because you have a clear mental flow. I believe that no matter which company you work for, you should strive to learn, study, and work a lot. This is the foundation for being successful in large companies.
During my years working in Vietnam, I can say that my time at Chợ Tốt helped me learn and accomplish many things. When I first joined the company, I was placed in a team of about 6 people with the task of rebuilding Cho Tot website because users tend to use the mobile version on smartphones more. I clearly remember that the product was officially released at 9PM, but by the next morning, the system couldn’t stand it. Our team had to shut down the system to investigate the cause, and we discovered that the server couldn’t handle high traffic. For e-commerce websites, server side rendering is very important because it determines whether the company’s SEO results are effective or not. Our team came up with a temporary solution: splitting the system into two parts. Since the traffic from the Google search engine was not high, we checked whether the traffic was from “organic” users or from the search engine. If it was from the search engine, we redirected it to a separate server that only supported server-side rendering for the Google bot, while the server supporting organic traffic disabled server-side rendering. This temporary solution worked for about a year.
After that, in the second project, my boss and I tried out a very new technology - NextJS, which had just released version 3. Cho Tot was the first company to use this technology in Vietnam. We had high traffic, and we even communicated with the NextJS team about development and bug fixes. After completing the second project, I wrote a blog post about the development process with NextJS on Twitter, and to my surprise, the founder of NextJS retweeted it. Overnight, I gained many new followers :D
Then I continued to develop projects for Chợ Tốt, and the project that impressed me the most was building a dashboard for the marketing team to prepare SEO content. When I joined the company, I noticed a significant and long-standing issue. The marketing team was writing SEO content in a JSON file, but the amount of information was too large, making the process slow. And when they made mistakes like duplicate content, they couldn’t detect them. When they handed the file to engineers for integration into the code base, it resulted in many errors, requiring a lot of time to fix.
I couldn’t bear such manual tasks, so I spoke with the current CEO (Head of Business at that time) to find a way to improve it and promised to complete it within one month. I made the promise without knowing how to do it and without any support. First, I followed the software development process and then went to the marketing team to understand their needs, which I wrote down on an A4 sheet of paper. After understanding each item on the list, I analyzed it to design the database. I reviewed it multiple times to ensure that I understood the requirements clearly and was heading in the right direction. Once everything was finalized, I talked to the infrastructure team to create the database on the development and production environments. I designed and developed the API myself. Then I started developing the frontend and even designed the UI myself. I constantly sought feedback from the marketing team to ensure the UI was user-friendly. Once it was done, I checked that everything was connected and running smoothly before handing it over to the marketing team for testing. I debugged and fixed it until it was usable.
Another new issue arose when there were thousands of keywords for the content, and it was not feasible for the team to enter each one manually as it would take too much time. So, I took the existing JSON file and wrote a script that would populate the data into the database and automatically integrate the SEO public API with the main product. Once everything was running smoothly, I created a slide presentation and set up a training session for the marketing team to teach them how to use the tool. The Lunar New Year was the testing period. After one week, the Head of Business showed me that Chợ Tốt’s keywords had reached the top of the search engine without any marketing campaigns. There was a sudden surge in traffic with 100,000 visits in just one week. I was very proud of this project because I contributed to the company and solved a long-standing operational issue at Chợ Tốt.
During that time, it was quite stressful because it was truly a gamble. I gave my all to this project, sometimes working until 8 or 9PM. So, when the project yielded positive results, I was very happy. I also received a significant bonus that year, equivalent to three months’ salary, and used the money to trade in my 20-year-old Dream motorcycle for a new one.
However, when I moved to Japan to work at Rakuten company, it was very different, from language to culture. Not necessarily disillusioned, but I had to rebuild from scratch, get acquainted and build credibility in the first year. In the second year, my boss trusted me more and assigned me a big project because I was the most knowledgeable about the framework. I was responsible for training and supporting them in rebuilding their product using the web team’s framework. The project was very interesting because Vietnamese and Western users are used to simple interfaces, but in Japan, it’s different. It involved creating a UI for sellers to input product data for their shops. Instead of a typical form, they made it into a table with about 20 rows and 20 columns, totaling 400 cells. Each cell was a form for entering product information, making it quite complex. If users were not familiar with the framework, even making a small change in one form would trigger the automatic rendering of all 400 cells unnecessarily. So, I sat down and thought about how to optimize this, and in the end, I succeeded. In this project, I had to communicate frequently with the backend team to determine the data format for storing in the database. As for the UI, the UI team built it for me, and my role was to add columns, rows, handle forms, and process the data accordingly. The data provided by the UI had to be converted into a format that the backend could understand because it was quite complex. After that project, my boss recognized and evaluated my excellent performance, resulting in a salary raise and bonus. It was a joyous moment! 😀
During my preparation for job interviews at US companies, I unintentionally developed a small tool to help me effectively control Spotify on desktop. I didn’t expect it to be so well-received by others. You can check out the detailed development process in this podcast episode techwaves-lets-build-a-side-project.
After that, I joined DoorDash and up until now, I’ve been working here. When I first started, I collaborated with a colleague on a project to optimize the performance of the discovery page. We discovered many valuable insights along the way, so I decided to write a technical article about “improving performance on high-traffic web pages”. Writing technical articles isn’t new to me, as I had my first article published in a major tech magazine in Australia back in 2015. I’m really happy, not because I received compensation ($100), but because I’m proud that my article has been published for the world to see. It was a starting point for me to learn about the process of writing articles and how to write technical articles. Since then, I have written many articles on my personal blog and even for the company.
Looking back on the long journey, I have realized many things. I believe that every engineer should have a goal to act as a guide for themselves. Each person will have a different walking speed, but that goal will help you not get lost. Each person has their own path, just focus on developing yourself, don’t compare yourself with those around you and get peer pressured. You should control what you can control, otherwise “let it go” to save yourself the headache.