Motivation
I originally wanted to postpone thinking about making programming my career until my senior year. But around my sophomore year, while thinking about South Korea’s mandatory military service, I decided it would be meaningful to improve my expertise through the Skilled Industrial Personnel program (an alternative military service program).
When I started job hunting, I had no actual work experience and faced rejection at the resume and interview stages about 3-4 times. I thought the hurdle was quite high, so I stopped and started looking for internship programs.
Planetarium
Internships are conducted in project units that can be used as portfolios, helping as much as possible so they can be used as references in the hiring process, and allowing you to acquire necessary knowledge for future work with a mentor. — Engineering Intern — Planetarium Talent Recruitment (Korean)
I came across Planetarium’s internship program for making decentralized online games. Unlike the commonly used term “hiring” (selecting and employing people), they used the keyword “talent recruitment,” which seemed different from other companies.
Although the internship program was focused on blockchain-related work, I remembered that their blockchain explorer for their game was built with React + TypeScript. Since this overlapped with the common web frontend tech stack, I inquired whether web frontend work might be needed.
Hello. I’m a student gaining experience in the web frontend field.
I’m curious if I could get help with a portfolio in web frontend, as opposed to the distributed systems domain mentioned in the job posting.
The resume I’m sending is quite different from the domain knowledge Planetarium is looking for, but if you feel it’s a sufficiently appealing application, I’d appreciate a response.
I received a reply that I could help the team as the game launcher built with web technology was transitioning from prototype to official product, and was immediately guided to the next step of a coding assignment.
The submitted assignment passed and I proceeded with the working-level interview. As an icebreaker, I asked for feedback on the assignment, and receiving positive feedback allowed me to respond to the interview with reduced tension.
What I learned from the interview is that just as a company has the right to ask questions, it’s okay to ask for feedback on what they thought when they saw the resume, what parts were good, and what parts were lacking. However, feedback on applicants is a criterion for hiring decisions, so it seems relatively difficult to get overly negative feedback.
Asking for feedback verbally was met with a fairly open attitude not only at Planetarium but also at other companies. It may vary depending on company culture, but if this isn’t allowed, I think it’s interrogation, not conversation.
Blockchain
During the first week after joining, I learned the minimum domain knowledge needed to communicate with company members. I learned basic cryptography concepts (types of asymmetric key algorithms, digital signatures, deterministic computation1) and performed a blockchain prototype creation assignment.
Although it was my first time dealing with blockchain technology, I had already experienced the concept of distributed systems through Git. So it wasn’t too difficult, and I think when abstracted, it’s similar to the following:
| Blockchain | Git |
|---|---|
| Block hash | Commit hash |
| Chain reorganization | Rebase |
Around the time I completed the internship, I also wrote about the unique technical problems of decentralized games on the company’s tech blog.
Achieving Launcher Goals
When I joined, the company was preparing for the official game launch along with CBT.
The game launcher had a strong dependency relationship with the blockchain node2, and when node work unexpectedly stopped, the launcher would also shut down consecutively, creating a serious situation with an initial drop-off rate of around 60%.
In this situation, I participated in an onboarding sprint3 4 to reduce the launcher’s drop-off rate to within 10%.
Contributing to the Team
I originally participated with an interest in UX-related work. However, I directly set quality assurance as my first task. This was because the frequency of code modifications the team was undertaking increased to achieve the goal, and in this situation, I judged that the biggest debt was automating quality assurance.
For specific work content, I introduced static type checking to verify logical errors in the program, and end-to-end test automation to validate usage scenarios. Since machines verified the absence of defects, it felt like getting a seatbelt, and we benefited somewhat from preventing post-facto fixes like hotfixes.
While writing end-to-end tests, I unexpectedly revisited functionality that was missing from the original specification. Previously, the password reset button guided users to a key invalidation function, not a reset function. This page transition had been mistaken by all colleagues as an intended implementation for a long time, and I discovered this omission while writing the end-to-end test.
Contributing with Self-projection
UX Writing and Interaction
I contributed in my own way to the goal of reducing the drop-off rate by making the launcher’s text more user-friendly and appropriately modifying unfriendly interactions.

An active game community on Discord. You can directly reference the above chat.
I mainly worked on the settings page and thought about better wording, and for other pages, I reflected contributions from the game community. Below are 4 interaction elements I remember improving:
- Launcher restart when saving settings values; previously asked users to manually restart.
- When entering an invalid password, a red border appears on the input field, which I reset this style when typing again.
- Providing password strength hints during registration; considering the above item as well, observing two input fields required dividing cases which was quite tricky.
- Changed links that were used as text-style buttons to button components to ensure accessibility for keyboard users.
Semantic Markup and Over-engineering

Markup compared by opening the developer panel. The left is before, and the right is after. Reduced excessive markup depth like #root > .layout > .container to a single level with just #root.
The launcher’s UI, which started as a prototype, was closer to code composition that “ended up that way through this and that.” All layouts were physically set using margins and padding, and markup wasn’t written meaningfully.
I prioritized refining the common markup skeleton for each page. When dealing with a commercial service, I wanted to pay attention to web accessibility, so I worked while being mindful of accessibility hints like the alt attribute and WAI-ARIA.
However, I received feedback from colleagues that accessibility was a low priority since it’s a desktop app. I could argue that edge cases should be considered, but I stopped that work thinking that the code might not be maintained or could become legacy after I left.5
There’s a concept called Egoless Programming, which tells you to think separately from yourself and the code you write. This is because even if the code you wrote is criticized, your self being denied is separate. Similarly, some element of my ego and the product’s goals may be separate, and desires projected from that ego may not be very helpful to the team.
Contributing to the Game Community
I volunteered to take on internationalization work among the launcher’s detailed goals.
| Korean Screen | English Screen |
|---|---|
![]() | ![]() |
I did initial work replacing hardcoded launcher text with formats compatible with internationalization modules, and whenever new text was added, I notified the game community’s translation participants.

I’ve participated in game translation publishing as a community activity before, so it brought back memories. Thanks to this, I worked on it more enjoyably.
Conclusion
The launcher’s drop-off rate reduction was set at 10%, but I recall it was actually lowered to 40% when I completed the internship. However, setting it higher than actual possibility is what OKR aims for, so I’m not too disappointed.
What I personally found disappointing was that the company strategy mainstreamed blockchain work, pushing the frontend work I was handling to the back. However, considering that the company strategy was reasonable6 operation that even gamers could accept, and that the onboarding ‘sprint’ was a temporary organization, it was an inevitable situation.
Nevertheless, I was proud that as an intern, I didn’t just do prototyping but proactively engaged with the service, experienced communicating with the game community, and got my name in the commercial game’s staff roll.
Although blockchain-related work was open during the internship, I judged that the workload of concurrently mastering blockchain technology, which is completely different from web frontend work that I aim to specialize in, would be too burdensome during the 2 months. 7 If I had also been involved in blockchain work, I probably could have done only half of the given frontend work.
Anyway, thanks to the company culture that’s generous with information disclosure, I’m grateful that I can write about the work I did.
Afterwards
- Thank you for introducing my post as a “worthwhile link” in Outsider’s tech news on November 15. (Korean)
- Even after completing the internship, I continued to be interested in and contribute to the Open Source launcher as an external user.
- A year later, I was invited back to the company office by Akamig, who was in charge of launcher development. I received a warm welcome and experienced the still horizontal (physical) organizational culture. In the photo below, I’m the person lying face down on the chair on the left.

A visitor has arrived.
— @_Akamig (Twitter) August 25, 2022
This means that the hash target must be provided in a single format
1234, not'1234'and1234. The first example produces two different hash results and is not deterministic. ↩︎Refers to a computer participating in the blockchain network. ↩︎
A sprint refers to a group working together to achieve a goal. Planetarium uses OKR. ↩︎
Goals can be set at an individual level, not just organizational. I set “Make contributions that help the team” as my goal, with “Improve product quality” as a key result. ↩︎
Similar to accessibility work but with a different outcome, the team wasn’t familiar with logical property concepts, so only the login page and parts of the settings page that I was involved in used Flex layout. I thought about deferring properly changing all UI layouts to contributions after it became an Open Source project, as the work amount was relatively low in importance. ↩︎
The company’s goal is to create a reference product pioneering decentralized gaming experiences, and the blockchain network system that forms the basis of the game is really important as it directly relates to the product’s reliability. ↩︎
If it had been a traditional server with best practices, the story might have been different. As the company blog introduced, Planetarium’s blockchain work involves developing their own P2P library specialized for games — libplanet, game client SDK — lib9c, and blockchain node service dedicated to game clients — NineChronicles.Standalone, encountering new technical problems. ↩︎


