My Itinerary of Software Development
Summary: I started developing on the internet in 1998. Pausing and then resuming my CS undergrad degree, I started two startups, and worked as a SWE for three years, conducting projects with diverse programming languages. Under the circumstances of the rapidly-changing tech industry, I kept thinking about how should I deal with this quirky, techy industry. My answer- continuous learning about whatever I liked.
==
I was born in the countryside in 1987, in Ansan, a town near Seoul, South Korea. I spent my childhood as a naughty boy who loved his bicycle. I was brought up by great parents. I liked Tae Kwondo, and enjoyed swimming, as well.
1994-1996: MS-DOS, Windows, and Quick Basic
In 1996, I had an i286 PC that my father used. As an elementary school student, I was amazed by this computer and played with it every day. It had MS-DOS (even hidden Windows 3.0.) Through the Mdir (GUI file management application), I had fun looking at various hidden files and directories and running them around.
I somehow found Windows 3.0. Similar to 1990’s software, I needed 5.25 floppy diskettes to run it. When I was able to run it, it was a mind-blowing moment for me. I discovered Paintbrush, drew a line, connected a printer, and brought it to my parents. They were so happy with my work.
Then my next intention was to do programming, thanks to Quick Basic that I had suddenly found. My first program was a RGB colored line, not “Hello World.” I could only study with an old textbook, but I liked the more graphical way. I realized it couldn’t be written if I don’t know the mathematical background.
In my 3rd year of elementary school, thankfully, I was selected to participate in a summer coding camp. Here, I learned basic procedural-oriented programming, using C language, and soon the lecturer forced me to learn about something called an “algorithm.” I really didn’t know why I had to study this. The truth was, the camp’s aim was to teach students, in order to award them with the Korea Olympiad in Information (KOI). However, I was not very attracted to algorithms, math, and problem-solving skills, though I felt I should learn about them sometime.
1996-2000: Internet, Web Development (HTML, JS, CSS, and PHP)
My programming interest was somewhere else than an algorithm. In 1996, unlike a popular telecommunication service among my friends like electronic Bulletin Board Service (BBS), I suddenly knew how to access the Internet via a modem and my Internet world was just started.
I remember my first web browser. It was Internet Explorer 3 which was eventually replaced by Netscape Navigator. My first successful website was the Official Titanic Movie Website. At that very moment, western digital culture and I officially met although separated from Hollywood by thousands of miles. It was a mind-blowing moment for me. The Internet brought me so much information including a lot of phishing. Because of limitations, my family couldn’t use both the internet and telephone at the same time, so I usually connected to the internet at night or at dawn when my parents slept.
In 1998, high-speed internet reached South Korea. Once I was able to have unlimited connection to the internet, I became fascinated by web development. HTML was a exciting to me and was my only friend at that time. Thanks to my parents, I was given my first package of software, Microsoft FrontPage 98, and was so excited. I especially liked its navigation design and theme features although I didn’t know that I could develop interactive websites using ASP. I was able to earn some money thanks to a banner advertisement on my website, and then learned CSS, JavaScript, VBScript and even Adobe Photoshop and Paint Shop Pro (PSP) to create images.
Thanks to my web development skills, I won several web design awards before I entered middle school.
2002-2006: C/C++/Win32 Programming
In 2002, my dad bought me a Compaq laptop for my 16th birthday. With Windows XP, I learned basic languages, like C++ and realized that I could develop software rather than building websites. I learned Win32 API and MFC through Visual C++, but there were not many side projects. Honestly, I learned PHP and MySQL to build my first web service with a community and user management system.
Although all of my interests were in web development, my parents wanted me to learn algorithms and data structure and to enter college as a special admission. To do that, I studied and improved my math and problem-solving skills. Finally, in 2006, I gained admission to Chung-Ang University as a student in its Bachelor of Computer Science program.
I remembered that my entire college freshman life seemed to be all about alcohol. I joined every party at first and made so many friends. Before college, I was kind of nerdy and had only a few friends. Anyway, due to the debauched way I lived my life, my grades were not so good except for programming courses. Rather than study, I spent a lot of time with my best friend Lee, starting a business.
2007-2009: Starting a Game Business
Lee and I met in the game developing club in high school, and became extremely close to each other whilst developing software. Lee learned the C language before entering elementary school, and taught object-oriented programming and C++. Of course, he is one of my best coding mentors so far. We discussed a lot of game developing ideas, and we decided to go into the game business when we entered college.
In 2007, I applied for a leave of absence from my college and built a game development company with Lee. We were trying to build an RPG game that would change the so-called “God Game”. Thanks to there being a great deal of investment into the game industry, we easily raised funds with only our idea, and then tried to hire more team members.
It seemed like everything is doing well – and then I realized my critical mistake. I took on the roles of CEO and Project Manager, even though I could just work on developing the game. I had interviewed candidates, managed business, researched markets, and organized team meetings. Six months later, our team was up to 15 members – that made our project slow down, and there were complaints from team members that I was too busy to take on board. Two years later, I had to leave our business after several delays.
2009-2012: Working as a Software Engineer
It was a tough time for me, but my military duty was able to help me to overcome the experience. In South Korea, every young man is required to serve in the military for up to two years. Thankfully, I found an alternative one in which I could work in an IT company, and I started my career as a junior software engineer in 2009.
The company I joined was a sort of web development agency. They hired developers, designers when they got projects from clients. Afterward, they keep maintaining the web services for a while. I dispatched for that projects and I remember I was in charge of five different websites for my first day. Due to its alternative military work, I had no choice. The problem was, every website used different tech stacks like PHP, ASP.NET, C#, and JSP. It was tough to get used to it but finally, I could afford to them.
While I was getting used to those different websites, I was facing the fact that I couldn’t change the main development framework. Most of them used old versions, like J2SE 1.2. I was tired, but I kept learning from those old stacks. Coincidently, I was able to join a new project that was building thousands of websites, with more than 100K active users, using Spring Framework. It was a great chance for me to narrow down my tech stacks to Java.
In mid-2010, I had a health problem due to overwork. I was handling at least 20 different websites, but my manager would not hire more juniors. I could only go home twice a month due to being overworked. I couldn’t afford this, and I tried to find another opportunity.
I moved to FinTech company, that was in charge of at least 80% of the internet financial traffic of major financial vendors. Here, I could luckily use Spring Framework and Java. Maybe they thought finance should be backed by high security.
Like any junior, I made some huge mistakes, which directly affected the customers’ assets. For example, I updated the frontend code without reviewing it, and it showed the customers’ money with the wrong digits. It was critical for my product and customers, and the salespeople had to meet with customers to apologize for my mistakes. I was really sorry about that, but I learned that I should make a testing system before I uploaded code.
We had no version control systems (VCS) or testing procedures, although the company had 150+ employees. Without VCS, developers shared source-codes via Messenger and nobody knew where the original code was. I really wanted to build a code-management system, like continuous integration (CI.) I studied it and learned Subversion and Jenkins (Hudson). Then I built a CI system that automatically built and integrated codes and ran the testing scripts. A team member could receive task reports once they committed the source code. After a couple of months of using CI, my manager and CEO liked this system. He asked all the departments to use my system and told me I should let them know about it.
2012-2014: Undergrads
In 2012, my contract expired, and I went back to college. Throughout my career to that point, I realized that I should learn algorithm and data structure to build a core system, rather than creating a copy-and-paste business with domain knowledge. I studied computer science by taking more than 20 courses, and I found what I really want to study. I especially liked the subject of Artificial Intelligence, and I wanted to study data mining. Then I started a side project based on my interests.
As with many other people in their twenties, I was also interested in my appearance. While working, I had gained a lot of weight. I successfully lost this weight, and I tried to be more disciplined by waking up at 4 a.m. and working out. I also recorded health data like weight, steps, calories, and even hours of study using a spreadsheet. At the same time, I planned my entire life from my 20’s to 100’s. I wrote down everything I wanted to do in my lifetime, such as learning English, earning a Master’s degree, studying abroad, following a healthy diet, and getting married. I made 10-year plans, annual plans, and monthly plans, and then identified what I needed to do each day, in the form of a daily checklist.
My efforts had some problems. First, it’s hard to check data every day. Second, it takes too much time to make a new spreadsheet. Third, I had no methodology for data analysis. So I planned to study data mining and analysis while studying abroad.
2015-2019: Graduation, 2nd Startup, Move-in California
I graduated in 2015, and I applied to several graduate schools. I was rejected at all of the universities where I applied, but I did not give up. My “Plan B” was launching a startup in Silicon Valley. I wrote a business plan and found an investor. I applied for a startup visa in the United States, and I got approval. I got married, moved to San Jose, CA., and started my US career.
This was my second business, but as expected, the business was not going well. In my first project, I did not participate in the development but hired many engineers and designers. I thought business would fail if there were many team members. So I wanted to do business on a minimal scale but I mistakenly trusted myself too much. Apparently, I did everything from business planning to development, design, HR, accounting, etc. I couldn’t manage my time at all and the milestone was delayed continuously. After three years, the project failed to fundraise, forcing it to close.
For 3 years, I learned a lot. First, I learned about microservice architecture and designed it. For Agile development, I actively used and documented with JIRA and Confluence. I designed and built REST-based API servers, which created a backend consisting of the Play Framework with Scala. It established ETL of GCP for data collection based on microservice with a simple data analysis model. For the backend, I built an auto-scalable server using Kubernetes and Docker on the GCP. In terms of frontend, I first used AngularJS but I soon changed to ReactJS due to component reusability. I also used many JS libraries and learned ES6 functionalities. Later, I used Server Side Rendering to boost up the frontend with some Serverless API like a data streaming server.
Technically, it was perfect, but the business wasn’t. I tried to make too much and was in charge of too much without having the necessary capabilities. Of course, I hired part-time workers, but they were mainly focused on marketing and other areas. In terms of programming, I was extremely reluctant to disclose my source to others. So when I faced a programming problem, I would spend a few days trying to solve problems myself by Googling. I thought of myself as an individual distributor, but I was just dreaming of a jackpot startup.
Later, I joined another startup as a CTO, but a similar problem occurred there. The CEO, who saw me do many things alone previously, didn’t hire a professional developer and assigned me all the work. In the end, I was forced to quit due to persistent micro-management and overworking. By the end of 2019, I was completely sick of startups and concerned about repeating the same problem again. I needed a change. I need to learn how to work as part of a team. Finally, I decided to enter graduate school and started studying TOEFL.
In 2020, I received an offer of admission from Carnegie Mellon University to study for a master’s degree in Software Management. I chose this program because I liked the fact that the curriculum would allow me to learn both development and management. In particular, I thought it was an opportunity to learn about teamwork and management, which I had avoided. I also wanted to take CMU’s high-quality CS and ML courses, with a special focus on distributed machine learning and learning software development theory and management.
I looked back on my personal and professional development through a series of processes. To summarize, I chose to study abroad as an undergraduate because of my concern about poor working conditions for Korean programmers (low wages, long hours) and my need to build my core knowledge as a software engineer. After two start-up failures, I learned that no matter how much I wanted to succeed, if I didn’t review my product countless times, it would eventually fail. I also realized that the reason for a startup’s success was not any one individual but a team. I decided not to go back to a startup without knowing how to be with people.
I am interested in creating an optimized cloud infrastructure model that fuses the cloud environment with machine learning models. Machine learning has been only a personal interest so far, but I know that the optimized cloud infrastructure could be combined with any technology. Ever since I came to the U.S., I have been thinking about system design, working tirelessly to create low-cost, high-efficiency systems. My lifelong goal is to experience various businesses’ domain knowledge.
To live as a software engineer, I have to study constantly. I first connected to the Internet in 1998, and I have learned many technologies and programming languages since then. However, the business environment and technology develop quickly. How should I deal with this situation? The answer is continual learning. Now I am looking for a full-time job to work from August, but I will continue learning when I return to my current job. Continuous learning of my interests, that is my goal in life.