I am Lin Zhiyuan. I joined the company as a new graduate in April 2020. Originally, I came to Japan for graduate studies and majored in computer science. As a server-side engineer, I develop the LINE app's Sticker Shop, Wallet Tab, and LINE STORE website where users can purchase LINE-related content.
Currently, I am working on features related to the Sticker Shop and Theme Shop. Specifically, my work involves developing features for campaigns in the Sticker Shop and creating systems to support new types of LINE stickers. Recently, I developed a feature that enables users to receive LINE themes for free when they purchase LINE stickers.
During the internship, I was assigned to a team that was involved in the development of an application that regularly sent promotional messages related to LINE stickers and LINE themes via LINE Official Account for the Sticker Shop and LINE STORE.
My task during the internship was to create a batch job that could regularly send personalized messages based on the data from the Wish List on the LINE STORE, a feature that allows users to save items they want. This was specifically for users who had registered a certain number of LINE stickers or LINE themes in their Wish List.
The batch job I developed mainly consists of three parts: the recommendation service, the message composer, and the message sender.
The target is users who have registered a certain number of items in their Wish List. The recommendation service can extract target users by aggregating the Wish List database and filtering it with other message delivery conditions. The recommendation data will then be sent to these target users.
Next, I used the message composer to create the content of the messages. For sending messages, I used the Messaging API available on LINE Developers. I created the sending layout while referring to Flex Message Simulator. Lastly, the message sender sends messages to the target users. This is the general flow of the procedure.
There were several points that I paid particular attention to while implementing these features. Firstly, I focused on how to efficiently perform data extraction in the recommendation service. Since the recommendation service selects recipients from a large number of users, the volume of analytical data is huge.
To perform data extraction efficiently, I researched the features of MongoDB and found that its Aggregation feature, which enables high-performance processing through pipelining and parallelization of large amounts of data, was well-suited to the requirements. I was able to aggregate and extract the target data quickly by using the feature.
Next is the message composer. The existing code already had multiple message composers for each design and layout. It was set up in a way that required a new message composer to be created each time a new design or layout was made. To implement new layouts, I considered abstracting the message composer to properly separate the layout function from the message composition function. As a result, I was able to organize the code and ensure that the system could easily accommodate new layouts. I think this was a point worth paying attention to.
For the message sender, it was important to determine how to send messages at the highest speed and with the maximum efficiency. I needed to check with the team responsible for the Messaging API regarding capacity, and it was necessary to perform tuning for things such as the number of concurrent processes. I also took measures to improve post-release operations, in addition to sending messages. These improvements included setting up tracking parameters and configuring Prometheus for monitoring purposes.
After successfully completing Beta QA, I encountered an error during the final test of message distribution in the production environment. The cause was a timeout in the aggregation component of the recommendation service. The amount of data differed greatly between the test and production environment, which caused the timeout in the production setting. Adjusting the existing parameters did not resolve the issue, so I requested the Database Administrator-related team to change the timeout settings of MongoDB itself, but even this did not solve the problem. Eventually, I was able to resolve the issue after consulting with MongoDB's official support team and it became clear that there were new parameters that needed to be set.
Although it was challenging to verify and identify the cause of the problem from various perspectives, this was good learning experience. In addition, it took some time to learn about certain Java libraries and internal tools such as RxJava, Armeria, and Promgen because many of the documentation were not publicly available at the time. However, thanks to my mentor and team members who were always willing to help with anything, I was able to make progress on my work without being overly burdened.
The first thing I noticed was the high standard for code quality. When I was working at a venture company in China, engineers did not frequently conduct code reviews. And during reviews, reviewers would generally only point out basic mistakes such as formatting errors. Therefore, the checks were not strict.
However, the review process among engineers at LINE Corporation was very thorough. For instance, reviewers would point out specifics on how to improve the quality, such as suggesting ways to simplify the code by implementing the data flow in a different way. I was quite surprised in this regard and felt it was good to learn about this kind of strict but positive development process.
I was also impressed by the good office atmosphere. There was little distinction in organizational hierarchy, and everyone communicated on an equal footing. The people in the office were also friendly to us interns. I was able to casually interact with senior employees through lunch, which made me feel there was not a strict pecking order. I had thought that a company with a traditional Japanese work style might not suit me, but I found the company to have a true sense of equality and easy to work in.
Mentors are assigned to students working as an intern, and the dedicated support I received from them left a strong impression on me. My mentor was a Russian engineer working in the same department. Having a mentor was helpful because I could easily ask questions about things I didn't understand, such as how to use internal services. Additionally, I am more proficient in English than Japanese, and my mentor was able to communicate in both languages without any issues. Being able to ask questions in English when I didn't know how to say something in Japanese was also helpful.
I also felt that this was a workplace where I could improve my skills as an engineer. Just after joining the internship, the company held a Kotlin workshop. Kotlin is a programming language. While the language is widely used now, it was not a mainstream language at the time as it had just appeared. However, LINE Corporation was attentive to new technologies and conducted study sessions internally, so I remember feeling that this was a company actively engaged in adopting new technologies.
This was because I felt that the company's atmosphere suited me and that I could receive proper evaluations. Through the internship, I realized that everyone treated each other equally, and communication was casual, and I didn't experience any stress while working. I felt that this was a company where I could work for a long time.
Additionally, I wanted to work in an environment where I could be valued and grow as an engineer, even without taking on a management role. Therefore, during the internship, I asked senior employees about the workers benefits and evaluation of engineers during lunchtime conversations. Understanding that becoming a manager is not an absolute necessity in my career was also why I decided to join the company.
If I hadn't participated in the internship, I would have had a much harder time deciding what company to join. Therefore, it was beneficial to participate in the internship before making the decision, as it allowed me to understand the company's atmosphere. Being able to showcase my skills was also one of the advantages of participating in the internship. I believe this experience would be considered as an achievement when applying to other companies, which would have been valuable even if I hadn't joined the company.
When applying for a job as an engineer, many companies require coding tests. Therefore, I think it's better to simulate coding tests before applying.
Writing code yourself is also important. When I was in graduate school, I spent a lot of my private time writing a massive amount of code. Personally, I also enjoyed reading code written by others. For example, reading the code of open source projects and thinking about the philosophy behind it can be a good practice.
If you are a foreign national like myself applying to a Japanese company, I personally think that studying Japanese is important. There are companies that don't require Japanese for certain positions and offer substantial support for working, but it is easier to work if you have a certain level of Japanese proficiency when joining a company. One benefit is being able to understand presentations in Japanese and gain information from them. After joining LINE Corporation, I found that in-house interpreters were there to help, and English materials were also available. Therefore, I didn't have much trouble even without being proficient in Japanese, but I still see the benefit of understanding Japanese. There are also Japanese language training programs, so you can strive to improve your Japanese skills after joining the company.
In addition to receiving support from interpreters during meetings, I was also able to use translation bots for chat communication, so I had no issues with internal communication after joining the company. These things also made me feel glad to join the company.
I believe that there are significant benefits for Japanese employees as well because they can work with people from various nationalities, cultures, and values. I can recommend the company especially to engineers who are considering various options such as working overseas in the future, who want to improve their English skills while working, and who enjoy experiencing different cultures.
I applied to other companies during my job hunting. I faced some rejections from several companies, but ultimately, I was able to join LINE Corporation, which was the company I aspired to work for.
Compatibility with companies plays a role in job hunting, so you may receive some rejections. But don't be discouraged by this. Keep actively pursuing the company you truly aspire to join.