About Me - My Journey from Yunnan to Software Engineering

About Me

I was born in 1999, in a small city in Yunnan, China, called Zhaotong. It's the kind of place that's easy to forget exists if you're not from there. I grew up there, went to elementary school, went to middle school. Honestly, I wasn't a good student. I wasn't some smart quiet kid in the back of the class. I was the opposite. I smoked. I got into fights. I wasn't tough though—I never stood at the front. I was scared of getting hit. I had bad grades, and my English was terrible. On the high school entrance exam, English out of 150—I got 19. That score pretty much sums up who I was at the time.

But my dad has always been someone with more global vision. He made a deal with me: if I scored well enough to get into one of the good local high schools, I could choose my own path. If I didn't, I had to follow whatever they arranged for me. I didn't know what that meant, and I didn't take it seriously. Until three days before high school started, they took me to Kunming, Yunnan's capital, and dropped the bomb—I was going to an international school.

The Turning Point

That school changed the trajectory of my life.

I started picking up English seriously, and later, I got the chance to study in Hamilton, Ontario, Canada, for the final year of high school. Somehow, and I still don't really understand how, I went from that 19/150 to scoring a 7 on IELTS. Now, I can talk fluently with native speakers. Looking back, it feels like I stepped into an alternate timeline.

University Years

When I first entered Carleton University, I enrolled in Marketing. Growing up, I always wanted to be a "big boss"—in Chinese, we call it 大老板. In English, the correct word is entrepreneur, and that's what I was aiming for. I thought Marketing was the way to get there. But once I was in the program, I realized the stuff they were teaching had very little to do with real business. It all felt disconnected from reality. You don't learn how to build something people want in a classroom with slides. That's when I decided to switch to Mathematics.

I chose math partly because I thought it was cool, and partly because I was decent at it. I thought learning math would be hard, and that made it meaningful. If I could pull it off, I'd feel proud. And yeah—turns out, I was right on the first part: math is hard. Even though I kept a high GPA—around 3.7 to 3.8—I never really felt like I understood any of the subjects I studied. I still don't. Math gave me structure and the ability to reason with precision, but I won't pretend I'm some genius who masters theorems in one go. Most of the time, I was just trying to survive.

Finding My Path

Over time, I realized that as cool as math is, it doesn't get you a job by itself. I needed to be practical. My family helped pay for my education abroad, but our financial situation was unstable. I really wanted to be financially independent, to start earning money and not rely on my parents anymore. That was the top priority back then.

Thankfully, Carleton had this program: Math & Computer Science Double Honors. I could stay in my math program and add about 20 credits of core CS courses—basically, I'd study CS from first to third year, and add a few fourth-year ones. I jumped in.

And that's when I discovered something unexpected: I was good at programming. Of course, like most programmers, I always felt like I was switching back and forth between thinking I'm a genius and thinking I'm a complete failure. But deep down, I knew I had something.

Early Career

My math background helped me land a position as a Teaching Assistant for the Data Structures course. I did it for two years straight. That course is usually tough for students, so it felt good to be in a position where I could help. Around that time, I also applied for co-op—and barely before the deadline, I got an offer from Snow Software. The person who interviewed me, Doug Koczynski, gave me a Java coding test, and I remember clearly: the test case had a bug. My code was correct, but the test failed. Doug asked me why. I looked at it, told him straight up: "Your test case is wrong." He paused, then said, "OK, I'll give you the offer." Later on, I found out it was intentional—they were testing whether candidates could think outside the box. I passed.

At Snow Software, I worked in Java and J2EE, doing real enterprise software development. I wasn't just some intern fixing typos—I was actually assigned as a Story Owner on some tasks. I was the only co-op student to ever take on that role, at least while I was there. And that year—2021 to 2022—was during the early stages of COVID. Everything was remote. I actually wanted to go into the office, but almost no one was there. Still, that didn't stop me from growing. I met someone who became one of the biggest mentors in my life: James O'Connor. We're still in touch. James was the one who introduced me to Paul Dumas, and that introduction eventually landed me my job at Devolutions.

Professional Growth

I returned to university in September 2022, finished my last year, and graduated in April 2023. But finding a job wasn't easy. It was post-COVID, and the economy was in a rough place. Companies were downsizing. I graduated in April and didn't start at Devolutions until July. That waiting period was rough—uncertainty, pressure, self-doubt. But I got through it.

At Devolutions, I finally had the space to go deep technically. I wrote a lot of Rust, a lot of TypeScript, some C#, and explored multithreading, protocol-level systems, and lower-level networking stuff. I was lucky to be in an environment where I could really stretch my skills. On the side, I never stopped building. I've done countless side projects, experimented with Node, Next.js, tinkered with ideas for startups. I'm constantly building, testing, iterating.

Philosophy and Approach

I've come to believe that technical perfection is an illusion. There is no perfect solution—only trade-offs. Everything is borrowed time. That's what technical debt is: we're borrowing time from the future to ship something now. That doesn't mean being reckless. I believe in maintaining strong engineering habits—type safety, good code practices, fallback strategies. These things save time in the long run and let us move fast without setting ourselves on fire.

I care a lot about building things that matter, but I'll be honest—I never know for sure if what I'm building is something the market really wants. Outside of basic human needs—food, water, shelter—everything else is a guess. Especially in software. You can think your idea is great, but you'll never know how many people truly want it until you put it out there. I mean, look at Shopify. Ten years ago, people overlooked that market. Look at Airbnb. Uber. People laughed at them at first. No one believed they'd work—until they did.

So my approach has always been this: build something small, ship it, talk to users, get feedback, and iterate. If people like it right away, great. If not, figure out why. I try to look for friction. I may not always know what users want, but I have a good sense for what they hate. And that's often more useful.

Who I Am

If I had to describe myself in one sentence, it'd be:

"Trust me. Give me your thing. I'll make it work."

I don't claim I'll ever be world-class at programming. I'm probably not going to win any algorithm competitions or design the next programming language. But I'm fast. I get things done. I figure things out. And I care about solving real problems.

If there's one edge I think I might have in entrepreneurship, it's not that I'm visionary. It's that I understand what makes users frustrated. I feel those rough edges. I try to file them down.

That's who I am. I break problems down. I build. I ship. And I keep going.