After getting my H1B visa after four years’ lottery (finally…), I moved back to the States from Canada, and eventually moved from San Francisco to New York. Yep, literally a mobile engineer at heart.
I still remember how anxious I was in the autumn of 2018, digging out the winter coat, gloves, and boots that I never get a chance to wear in San Francisco, and taking a red-eye flight to Kitchener-Waterloo, where my (previous) company has an office and where the only other thing I know is there’s nobody I know. But when looking back I can’t feel more grateful that I did make that move. I’ve met so many smart and nice engineers there, and the culture around the office that’s fun and compassionate is just incredible. As a small college town missing all the metropolitan vibes, it deeply strikes me with its self-sufficiency where people really know themselves by looking inward instead of seeking external validation. This has always been a quality that I wish to see more on myself.
All that being said…after back to the States, I moved to New York :homerhide: - a long-planned plot executed by some spontaneous flames. “Chapter 1. He adored New York City. He was as tough and romantic as the city he loved.” - Fascinated by those NYC-tagged film settings, I’ve always been wanting to experience the New Yorker life. But relocating from the west coast to the east coast just feels too much overhead and uncertainty, especially as a software engineer the bay area just seems to be the place I should stay forever. But when I was forced to make the move to Canada, bringing only two suitcases, leaving all households in my San Francisco apartment, starting a life in a place full of strangeness, I realized such a move is probably much easier than I imagined. So here I am.
Moving is always bittersweet. I do miss all my friends in San Francisco, all the workspace memes, all the Embarcadero runs and farmers market retreats. But New York is indeed an incredible city, with tons of cultural events happening around and tons of interesting people to meet. It’s not perfect for sure - it has its craziness and overwhelmedness, but with all that, it kinda forces me to look inward (Yay!) because if I don’t it’s just really easy to get lost in the crowds. Living out of conflict is always better than living out of fantasy, I’m glad I did that.
Work & Career
Launching Investing is one of the proudest moments of my year and my career so far. It’s the first end-to-end product I built and shipped from 0 to 1, involving lots of crucial technical decision makings that I had never been exposed to before. It’s those stressful days and nights that make me realize there’s no silver bullet in the world of software engineering - we have to work out of various constraints (so is life, no?). Tons of lessons related to project management and X-function collaborations learned as well. Like most of the engineers, I like writing code, lots and lots and lots of code - that just makes me feel productive. But building a product is far beyond writing code. It’s about getting things done with people with different characters, about (over-)communicating with shareholders and holding yourself accountable, about leveraging others instead of being “the coder in the corner”, and about handling “change is the only constant” gracefully.
I learned RxSwift and reactive programming in general when working in my previous team before working on Investing, and then turned into a big fan naturally. “All the world is a stream, and all the men and women merely observables” - IT ME. Like Google’s 80/20 Rule, my team encourages everyone to take the first 2 days of a 2 weeks sprint to work on whatever they want, could be addressing a tech debt, improving a UX, or experimenting with a new idea. I took this slack time to rewrite an existing feature with RxSwift and then started taking the initiative to introduce it into our tech stack. I didn’t really succeed at the end, but the whole process of shepherding this initiative is so inspiring and worthy. From prototyping on my branch to giving a tech talk within the team to sending out developer survey collecting concerns, it’s a very educational process where I learned how to better sell ideas and get buy-in, which is the very basic step of “leveraging others”. People have opinions, and software engineers are among the top of them. But at the end of the day, it’s probably not a bad thing. “The best way to break the rule is to fully understand the rule first”, with all the opinions and concerns, it forces me to revisit and critique my solutions, which usually brings up a broader perspective. Like previously I’ve no idea about ReactiveSwift, but later I know it and know its strengths compared to RxSwift. When Apple announced Combine in WWDC this year, which embraces a similar API design philosophy with ReactiveSwift rather than RxSwift, I got that “aha!” moment again.
Product -> Infra
All that being said…with all the sound “constraints theory” in product development, as a human being in nature, we’re good at deceiving ourselves. Sometimes I try asking myself: is it really because of those deadlines that I can’t make it better? Or is it just because I get lazy and take it for granted and not aim higher? We start to pay more and more attention to “technical debt”, but how about “technical knowledge debt”? I think it’s probably the time to step back a little bit, not shy away from hard problems, and dig into some rabbit holes. With all the years staying at the front and enjoying the super visible product launch, I don’t know if I will enjoy infrastructure work or not. We’ll see.
Stuff I like in 2019
- Productivity boost:
2020 Goals (tech-wise)
Ship an app to App Store
This year I’ve brainstormed a couple ideas with friends and it’s a shame that none of them became a reality. I feel the urge even more now given I decide to switch to infra but still want to build things that delight myself. Also, I still want to keep up-to-date with Swift and other cool new things provided by Apple. I don’t know if SwiftUI is now mature enough to ship a production app, so it still needs some investigation there.
Learn a new programming language (Haskell)
I’ve struggled a bit between Kotlin and Haskell, and decided to choose the latter (for now). After tasting the benefits brought by functional programming when writing Swift and Rx, I want to take one more step further. I know it’s rarely used in industry, but it has the reputation that could change the way we think about programming. So sounds worth it.
Follow pointfree episodes
Also related to functional programming, and I subscribe it for 2020! Same as Barry’s Bootcamp, I find myself (as a normal human being) tend to take things more seriously when I pay more for it. So fingers crossed.
As you see, I decide to pick up blogging after dropping it for a couple years. I still feel writing is a natural way for me to express myself and share ideas. Also a good way to document the thought process when learning something new or addressing a technical knowledge debt. Expecting a monthly post!