Foreword

Before I graduated, I wrote down my thoughts and feelings throughout my student years. After graduation, I decided to start this new series: “New Software Engineer in Training.” “新米” (shinmai) in Japanese basically means “newbie.” In this series, I’ll record my journey from a New Grad newbie engineer, slowly accumulating experience until I can finally grow out of the “Junior” stage. Even though the main character here is a software engineer, I believe engineers are engineers at their core. Beyond the skill tree itself, the challenges any engineer faces are similar: interpersonal dynamics, adapting to the environment, learning strategies, and so on.

When it comes to career growth for software engineers, before I joined the industry I kept rereading Vgod’s “Training and Growth for Software Engineers.” But most of what he wrote still felt far away to me—it’s mainly advice for engineers with a few years of experience. I also felt his description of the newbie stage was a bit too understated. After all, he’s looking back in hindsight; the setbacks he once hit probably feel minor now (and the key point is: he has a PhD from MIT!). What I want to share instead is how I truly felt in each moment: recording every frustration and every bit of growth. I believe this series can help others. In particular, I think very few people share the details of the path from newbie to senior—and those “small details” are often the key factors behind real transformation.

This series (ongoing):

Skiing with coworkers
(Skiing with coworkers)

Starting My Career

Japan’s Mujin is my first full-time job after graduation (background: my 2022 experience finding a software engineer job in Tokyo as an overseas new grad). In the blink of an eye, I’d been working in Japan for nearly half a year—and suddenly it was already 2023. Since joining Mujin, all kinds of things have happened. For a newbie engineer, it has all been “shock therapy.”

To describe it briefly along a timeline: starting work from day two, I fixed a simple bug in the first week. In weeks two to four, I implemented a small new feature. It felt like I was gradually getting on track, and I gained some confidence. Early in the second month, I built a few small features. They all “worked,” but after my manager’s code review, he basically refactored everything I wrote, and my confidence took a hit. From mid–second month to the fifth month, the company happened to be in the middle of a major project. Almost every engineer was involved in rewriting the company’s core codebase. It was a great opportunity: I could participate in a big plan, touch a wider surface area, and for the first time experience how long a single piece of work can take. At the beginning, I was stuck for more than a month. Later I gradually started to “get it” and finally felt like I was doing real work. But as the scope grew, I still felt I was far from being able to make truly major contributions.

Life at the Company

I always wondered what you do on your first day at a company. Mujin wrote a blog post specifically describing that, so I won’t repeat the details here: Let’s find out how is your first day at Mujin. In short: the entire day is HR onboarding. At the end of the day, you return to your team, and coworkers start helping you set up the development environment and work through your first task.

I don’t know if all companies treat foreign hires this way, but Mujin took great care of things from recruiting to pre-onboarding—I was very satisfied. They found short-term housing for you before departure. After arriving in Japan, they take you to the ward office for administrative procedures and to a bank to open an account (though I found scheduling with HR annoying, so I went to the ward office with my girlfriend instead. Also, in Japan, if you’re a foreigner and not going through company channels, you basically can’t open a bank account by yourself—typically you need to have stayed for at least half a year). I didn’t run into major issues. Even without a Japanese girlfriend, I don’t think it would have been a disaster. Still, there are things you end up relying on your girlfriend for: often it’s easier to have her translate Japanese. And HR isn’t reliable 100% of the time—sometimes they tell me the wrong thing, so I often have my girlfriend double-check.

Mujin is probably best described as a Japanese–American hybrid (the founders are Japanese and American). The overall vibe leans more “foreign company,” but many small details still feel very Japanese—at least it’s not like a traditional Japanese company. Most engineers are foreigners. Other departments have more Japanese employees. But in the company, people basically speak English. What surprised me is that many foreigners here also have Japanese around N2/N3 level. There are also quite a few Chinese people, and sometimes we just speak Chinese at lunch because it’s easier.

The company provides free lunch—it’s like an upgraded version of school lunch. It’s nice to have, but you get tired of it over time. The main reason lunch is provided is that the company is by the sea: the area is basically empty and there are no restaurants nearby. Eating out is usually over 1,000 JPY per meal, so you can save about 20,000 JPY a month on lunch. There’s also free coffee, drinks, and snacks. I’m probably the person who eats the most, and I’ve gained some weight. Every noon I play table tennis—usually for 30 minutes to an hour. It’s honestly awesome and makes me feel like I’ve already hit my exercise target for the day. After moving around, I go back to work feeling refreshed. When I want a break, I slack off a bit—sometimes I go to the gym, or play table tennis after work. Occasionally I play board games with coworkers after work, or go out for a meal. Sounds pretty chill, right? But in reality, a lot of people in this company still work overtime. Japanese employees, in particular, feel more intense. I prefer a comfortable pace, so most of the time I leave on time.

Technical Skills

Even while preparing for interviews, I constantly felt like I didn’t know anything. After joining the company, I could clearly feel that I really didn’t know anything. At least I know how to use Git, GDB, and CMake? Sorry—those are as “obvious” as knowing how to type as a software engineer. A long time ago, I wrote “The basic essentials for CS students.” Having the fundamentals is just your entry ticket to a good company—once you’re in, that’s where learning truly begins.

I’m not confident I could get into top-tier companies like Google or Apple—that’s still far away for me. Mujin is probably just a bit above my current level: enough to pressure me into growing, but not so much that I get crushed. I can feel that my boss and coworkers are very smart. I enjoy working with capable people, but at the same time, my lack of experience makes me feel insecure and frustrated. One thing I feel lucky about is that my manager is patient and willing to teach. I’ve learned a lot from him—not only technical things but also how to handle people and situations. The most impressive moment for me was watching him review my code and edit it on the spot. In a very short time, he understood what I was doing, then rapidly switched across multiple files and connected different parts together—almost without thinking. That was when I truly realized how far I still was from being “senior.”

In my first month, I solved two problems. I spent tons of time reading the company’s code and finally completed the tasks, feeling proud of myself. Later, in a 1:1 with my manager, he said those first two tasks were actually very simple: one was fixing a known bug, and the other was writing an API within an existing framework—neither was truly challenging. I felt a bit embarrassed. I was overjoyed at finishing “simple” tasks, not realizing that what I considered “hard” was seen as easy by others. But then again, I had only just joined the company—everyone has to start with the basics. Soon after, I happened to get pulled into the company’s major project. I spent a whole month staring at code every day with no real progress, and I was frustrated. I kept staring at code in a daze. Then after another month or so, something suddenly clicked. I started to understand how the company’s code interacted across components, and I slowly began to produce real output. I finally understood why you need to stay at a company for two or three years: it took me three to four months just to feel like I vaguely had a handle on the codebase. To really become productive efficiently probably takes six months to a year. Early on is mostly “hitting walls”: learning the internal development process, internal tooling, and how to work with coworkers.

Many people told me not to rush—and they’re right. You can’t become good overnight. Technical ability accumulates gradually. After half a year in the company, I did start to understand the high-level architecture better and how the organization operates. If my manager assigns me a task today, I’m confident I can get oriented faster and complete it faster. At the same time, I can also feel that I’m gradually gaining influence. As I write more code, more people come to me to discuss or ask about the features and projects I own.

In school, you improve through homework and classes. In a company, you grow by taking on more and more tasks. The faster you complete your manager’s assignments, the more work you can touch—and the faster you can improve. In the beginning, tasks are always the simplest ones, even “grunt work.” Over time, as you touch more parts of the codebase, you gradually get access to harder tasks. Reading a lot is extremely important. A company codebase of any scale is easily hundreds of thousands or millions of lines—don’t be afraid to dig into code. The more you dig, the deeper you go, the more you understand the relationships among modules. Don’t just “skim”; try to understand the details. Also, remember where each piece of functionality lives in the project—later, when you need to modify related code, it helps a lot. I also think curiosity matters. When I don’t understand some code, I try to ask. Usually it’s either genuinely advanced and requires explanation, or the design itself has issues and needs improvement. In either case, asking is beneficial.

As a newcomer, my feeling is: in three months, you can roughly understand how the company works; in six months, you can grasp the high-level architecture; after that, you can start making more valuable contributions. At the beginning I was impatient and wanted to contribute immediately. Later I accepted that I’m a newcomer who still doesn’t know much, and the only contribution I can make is to learn as quickly as possible. A healthier company should be able to give newcomers about half a year to get on track. Still, what frustrates me is that even after half a year, my manager said he still didn’t think I could “own things end-to-end,” and he still didn’t dare to assign me truly critical tasks. I guess I just need to keep improving.

As a side note: whether it’s managers or senior engineers, many have told me the fastest way to improve is to build and learn outside of work—do a side project you’re interested in, or contribute to open source. That lets you learn technologies you might not touch at work, expanding your learning surface area. I’m not extremely disciplined about studying in my free time; most of the time I just want to slack off. But I still spend some time reading technical books or contributing a bit to open source projects.

Language Skills

After spending a year in Europe, I thought my English was “fine”—as long as I could communicate. But I realized my English still needs a lot of work. Mujin’s official language is English, and many people are American or simply have very strong English. Often I can’t keep up with what they’re saying. Missing something occasionally is fine; missing things frequently makes communication inefficient. I can’t keep asking people to repeat themselves. When I’m thinking through more complex logic, even expressing it in Chinese can be tricky—doing it in English is a disaster. And that’s not even the worst part. The worst part is accidentally saying something mildly offensive to a native speaker. This is a “language intuition” issue: when your English isn’t strong enough, imprecise wording—or outright wrong wording—can directly cause misunderstandings or even offend someone. With friends, sloppy English is fine. In the workplace, you have to speak carefully and correctly. Fortunately, as people got to know me better, coworkers understood that my English wasn’t strong and didn’t hold my language mistakes against me. I also sincerely told them: if I say something wrong or impolite, please correct me directly.

At the same time, since I work in Japan, in daily life I still have to speak Japanese constantly. Right now I rely on my girlfriend to translate. Honestly, it’s annoying and inconvenient. Japanese people basically don’t speak English. Unlike in Europe—where you can often just start with English—in Japan you really have to learn their language. But after working for a while, I didn’t study Japanese seriously anymore: work is in English, daily life doesn’t require much Japanese beyond the basics—like how to pay, whether you need a bag, whether you want something heated up. Still, if you can’t speak Japanese at all, you’ll always need your girlfriend when you have to do anything official. Sooner or later, I have to learn it. Also, not speaking the local language gives you a constant feeling of being a second-class citizen. That feeling is very uncomfortable—for example, it’s hard to communicate at the doctor’s office, or you get pulled over by the police and can only stammer.

I think the most important point is: weak language skills seriously affect confidence. Because my English isn’t good, I started to dislike talking to coworkers. Every time I need to speak English with someone, I feel a lot of pressure. I can communicate, but I can’t do it as effortlessly as in Chinese. Being in Japan without Japanese makes me hesitant and timid. When I go out, I only want to be with my girlfriend or friends so someone else can speak Japanese for me. When I’m alone, I only want to go places where I don’t have to talk. Bad English and no Japanese makes me feel inferior all the time. If there were one reason that would make me leave Japan, it would definitely be my Japanese ability. I know in my head I should improve—but after work I still spend my time slacking off. When I get home, I just want to rest.

Working with People

Harmony is valuable. Getting along with people is hard. In school, if you can’t get along with someone, you can just avoid them. In a company, if you run into a coworker you don’t click with, you still have to find a way to work with them—there’s no reason to make life difficult for your own paycheck. Interpersonal dynamics are also strongly tied to language. Not everyone has the patience to explain slowly or repeat themselves. If your English can’t keep up, or you can’t explain clearly, impatient people can get irritated. And if your wording is imprecise—or worse, offensive—conflicts happen more easily. When I first joined, I argued with coworkers a few times. Fortunately, no one wanted a toxic atmosphere. Every time we had a conflict, we reconciled and communicated quickly. Over time, I figured out people’s personalities and learned how to work with them. One coworker I used to argue with is now the person I vent to.

Leaving on Time

Whether you can leave on time mainly depends on the overall workplace environment. If the culture demands overtime, you can only comply—otherwise you either get pushed out or you quit.

When I first joined Mujin, I noticed that everyone on my team left very late. I thought, “I’m doomed.” But my manager told me he wasn’t trying to keep people late. People stayed because they found the work interesting or felt a sense of mission. At first I wasn’t sure I believed him, but after a few months, I genuinely do. Some of my coworkers’ passion for work and technology is beyond what I imagined. They stay late every day; some even work late at night or on weekends. I sincerely respect that. The company doesn’t pay overtime, and I personally want to keep my time for myself.

The advice I got was: when you’re new and unfamiliar, it’s fine to stay a bit longer, because you don’t know anything yet and learning more is good. Don’t worry about whether that means you’ll be forced to stay late in the future. If a company doesn’t force overtime, once you’re familiar with the work, you can naturally go back to leaving on time. If a company has mandatory overtime as a norm, you can’t escape anyway. So the conclusion is: worrying doesn’t help. Just stay a bit longer early on to get up to speed. Looking back, that was true for me. At the beginning, I often got stuck on bugs or didn’t understand the system, and I felt my progress was too slow, so I voluntarily stayed to research more. Later, as I got on track, my output during work hours reached the bar, and leaving on time felt totally fine.

What to Talk About in 1:1s

Vgod also wrote about what to discuss in 1:1s, but again—that’s more relevant after you have experience. As a newbie, you’re not going to tell your manager you want a chance to lead a project, or ask them to coordinate cross-team collaboration for you. So what can a newbie talk about? I’ll share my own approach here. Disclaimer: I’m not sure it’s the best approach, but I’ve had four 1:1s so far and I’ve been pretty satisfied.

In the early conversations, I asked my manager what he expected from me: what I should be able to do in three months, and in six months. I also asked coworkers what their learning paths looked like so I could reference them. After working for a while, I asked for suggestions on my efficiency and any obvious weaknesses. I asked how to get familiar with the business faster, and how my manager himself grew over time. Sometimes we talk about bottlenecks and difficulties I’m facing, or about what happened when working with others. Sometimes we just discuss technical knowledge. Sometimes I use it as a chance to ask broader questions about how the company operates.

My approach is: anything directly related to progress, blockers, or technical details—I discuss with my manager immediately. Anything not directly tied to output, I save for a 1:1. For example: once I felt there was a communication issue within the team causing misalignment, so in a 1:1 I discussed how to avoid that. Or I share how I’m feeling—like feeling underqualified or frustrated. A 1:1 is a more formal conversation, and it’s a good time for topics you might feel awkward bringing up during casual chat. It also fits questions where you want a more complete and detailed answer.

However, it seems our company doesn’t have a fixed 1:1 culture. Usually employees have to proactively request a 1:1 with their manager. Recently my manager was busy and we skipped a 1:1, which I found unfortunate. Luckily, my teacher-and-friend 陳永昱 (my numerical software development instructor at NCTU, and a senior engineer at Synopsys) has been answering all sorts of my workplace questions—mindset, ways of working, learning strategies, and so on—so I didn’t need to ask those again in a company 1:1.

Workplace Survival Rules

I think “workplace survival rules” are the second most important thing after technical ability. They include understanding internal culture, politics and factions, understanding your boss and your boss’s boss, how to report to your boss, how to shield your boss from trouble, and so on. I’m still very inexperienced and still learning. But I can feel that if I don’t learn fast, if the company ever does layoffs, I’ll be the first to go.

I strongly recommend reading “4 years at AWS: some reflections from college hire to senior.” It’s all about the “game rules” of the workplace. I feel I haven’t done many of those things well—like not creating extra trouble for your boss. After getting battered a bit, I also realized the importance of protecting yourself and not stepping into muddy waters, and knowing what you should and shouldn’t do. Once you enter society, you no longer have the “student immunity card.” I’m clumsy when it comes to “how to be a person,” and I hope I can learn faster.

Social Life

Outside of work, Mujin’s social activities are pretty good. There’s a free team dinner every month; the team goes out for dinner and each person gets a 4,000 JPY budget. There’s also a “soccer night” every month where everyone plays soccer. In winter, people go skiing together. Many coworkers play table tennis at noon. Sometimes people also play board games together.

photo_2023-02-15_23-12-35
(Hiking with friends)

photo_2023-02-15_23-12-26
(Dinner with coworkers)

photo_2023-02-15_23-12-41
(The company’s monthly indoor soccer night)

Conclusion

To be honest, I don’t think the past half year has been smooth. In most of the areas I mentioned above, I’ve experienced frustration and anxiety: arguing with coworkers early on, being unable to write the code I wanted, being told to rewrite my code again and again. On top of that, I still hadn’t gotten permanent residency in Japan, and Mujin initially signs new hires on a one-year contract, so I was constantly worried about whether my performance was good enough. Also, after I moved to Japan for love, my girlfriend and I entered the “adjustment” stage and we argued from time to time. For all these reasons, the first half year wasn’t as beautiful as I’d hoped. I hope I can do better in the next half year.