Two years ago, I reflected on my experiences developing software from 2017-2018. This is a continuation to that post as I reflect on my learning progress from 2019-2020.
The past two years flew by quicker than expected. A lot happened in 2019; and a lot more happened in 2020. First, let’s address the elephant in the room: Covid-19 turned the world upside-down. What a way to start the new decade (/sarcasm)! With vaccines already distributed, hopefully 2021 will be better and that Newton’s third law applies to time: for every bad year there is an equal and opposite good year.
On a personal level, the most defining moment in the past two years was that I graduated from UWaterloo with an Engineering degree! After five years of hard work, including six internships, eight academic terms, and hundreds of cups of coffee, it’s finally over! Looking back, I’m both nostalgic and relieved. Although I appreciate the good opportunities, I also wish there were less hustling and more time to actually enjoy life.
Entering the workforce as a full-time employee was an enlightening experience. For a long time, I had pondered on questions like ‘why do people tend to settle down?’, ‘why do some people go above and beyond the call of duty while others prefer to skip by with the bare minimum?’, and ‘how could someone bear to stay in the same job for 5 years?’ Although I could have answered these questions at an intellectual level, it wasn’t until I began working full-time did I somewhat start to understand them at an emotional level.
Similar to past years, I continued to practice programming outside of work/school. After reading many books, tackling several projects, and systematically filling in knowledge gaps, my technical skills have improved significantly, to the point where I no longer think I’m bad at software development! Working full-time also provided the opportunity to develop soft skills, such as how to collaborate productively with others and articulate nuanced ideas. I somehow also developed an uncanny ability to detect BS.
Anyways, let’s pick up where the previous post left off: at the start of 2019.
__________________________________________________________
January – April 2019 was my last academic term before graduating. Most of the term revolved around finding a job and then cramming for exams. I had wanted to try out embedded development since 2016 but all my internships were in general software development. Luckily, I was offered an Embedded Developer position at Ecobee.
One topic that’s interested me for several years was compilers and language design. I had tried to write an interpreter in late 2016 but eventually gave up because it got too complicated; then interned at a company that did compiler-related work; and almost took up an internship with IBM’s compiler team (but declined in favour of another company).
After finishing my last academic term, I felt very strongly that despite having completed university with six internships and having built almost 20 hobby projects, my software skills still weren’t “good enough” unless I build a compiler that supports OOP idioms. In hindsight, this feeling was illogical. Think of it from this perspective: after years of studying, you finally have 3 months off to do whatever you want…and you choose to sit in front of a computer to build yet another hobby project?!?! It’s hard to rationally justify the decision but at the time, it felt like the right thing to do.
And so, starting in May, I began to learn how to write a compiler. I stayed in Waterloo and almost every day had a predictable routine: wake up to eat lunch; drink coffee and begin studying in one of the math buildings; take a study break to drink French vanilla; eat dinner and then go to one of the engineering buildings to continue studying; finally, go home. Rinse and repeat. I tried to go to the gym but was annoyed that alumni no longer had free access to it.
In late May, I took a trip to Vegas/Yellowstone and then to New York. It was a good break and upon returning to Waterloo, the grind continued. Luckily, I made some progress and soon completed the parser and parts of the semantic analyzer. I parked the half-completed project, promising to return to it at a later time.
In early July, a friend and I travelled to China. We toured several popular attractions, visited some semi-rural areas, and experienced a different culture. There were several exciting moments. At one hotel, we noticed that the front of our room was scattered with cards, each showing a picture of a pretty girl and a telephone number. We were curious what the conversation might be like. My friend dialed one of the numbers, spoke quietly for 30 seconds, then hanged up. I raised my eyebrows at him, “That was fast.” He returned with a sheepish look and muttered “I dialed the wrong number”.
In a rural town, we got scammed by a tour company and demanded a partial refund (interestingly, none of the other groups who were scammed were willing to ask for a refund). Although we got some money back, the tour was still such a piss-poor experience that we agreed to never travel with a tour company again. When we flew to another city, we lost track of time and arrived in the middle of the night without cell coverage nor hotel booking.
I was impressed with what modern China looked like. Before going on this trip, I had wondered why some international students returned to China after graduation; why not stay in Canada? After this trip, I now understand clearer. In fact, a better question would be, why not return to China?
Overall, it was a fun trip. My only regret was that it was too short. I would have liked to vacation longer.
Soon after coming back to Canada, I moved to Toronto to start working full-time at Ecobee.
__________________________________________________________
Ecobee is an IoT company that builds smart-home products, such as thermostats, cameras, and sensors. It also offers home monitoring services, energy-saving optimizations, and integrates with “the cloud”. Fancy fancy. You can think of it as a smaller version of Nest.
Luckily, there were other new grads and co-ops working at Ecobee and we sometimes hanged out after work. The company also had a ping-pong table that we put to good use. As our table tennis skills improved, our games escalated in intensity; at times, I was genuinely worried that one of us would collide into the glass panel next to the table and shatter it (in the end, we did bump into it but it didn’t shatter).
There were three embedded teams at Ecobee: (1) test-fixtures, (2) a technical-driven team, and (3) a product-driven team. I was placed onto the product-driven team. On the bright side, there were lots of chances to practice teamwork skills and work with folks from other departments. We got to experience the entire product design cycle, from project conception to completion. On the downside, there weren’t many hard technical challenges to solve. As a result, much to my chagrin, in order to improve, I had to practice software development outside of work hours. Sigh, alas, the grind continued!
Like any company, there was office politics, but at least everyone in our team was polite. There were disagreements but the environment enabled us to speak our concerns. However, one time…and this is keeping it brief…I did have to deal with a manager from another team who berated me for 10mins using loud angry tones and even making full-body slicing gestures after I had stayed up to 2:51AM to fix a problem. It was hard to speak without being interrupted. As you could imagine, I stopped doing free overtime from then on. Let work stay at work.
Autumn soon transitioned to Winter. Since we worked with some UX folks, I also took night classes on UX design to learn more about it. Meanwhile, I also developed a love for “Hey Noodles!”, McDonald’s fries, and Timmy’s Iced Coffee. Ahhhhh, those were the good old days…back then, you could go outside, eat at Chinatown, walk next to the harbour, and chill with friends after work. Nowadays, we’re all stuck inside :(.
__________________________________________________________
The new decade started off with a big splash. An armed conflict with Iraq, impeachment proceedings in the US Senate, and an unknown virus emerging from China. What else could possibly go wrong? In early January, I began taking Project Management night classes at Ryerson.
In February, while having hotpot with friends, the news channel broadcasted that there was a Covid-positive person who had walked by a bus station. I wasn’t paying much attention to the news but my friend looked at it warily. “I walked by just opposite to that same bus station at that time,” he said quietly. That’s when I realized the virus was much closer than we had thought.
In March, we got an email that a Covid-positive person had visited our company recently. That was scary. Soon, in quick succession, sports teams were canceling their events and companies were issuing WFH orders. Suddenly, people began to panic-buy and the market crashed. Near the end of March, due to market uncertainty, Ecobee laid off 10% of their employees. It was sad that colleagues you spoke with on a regular basis suddenly stopped showing up to work. Then in April, there was a reorganization and management changed.
With pretty much everything shut down, I stayed inside for the next several months, going outside only for walks or for shopping. Without many memorable events happening, the subsequent months flew by in a blur. I had a lot of time on my hands and increased my pace of learning technical skills, such as embedded Linux, computer networking, and MCU concepts. I set up a custom embedded Linux distribution that supported a wifi-enabled camera. Then in October, I revisited the compiler that I had been building in 2019 and after a month and a half of work, the compiler was finally complete! Hoooray!
Sometime in November, I did a status check on the progress of my career: ever since the re-org, the vibe had changed and I was learning way more technical skills from hobby projects than from work projects. After comparing my career with my friends’ careers, it was clear that I was stagnating.
In December, a recruiter reached out about an opportunity to work in the semiconductor industry. The position dealt with post-silicon software development; it sounded challenging and fun. Not expecting much, I went for an interview and … well, much to my own surprise, the company extended an offer! I accepted it and look forwards to joining in January 2021. I’m grateful for the friends and experiences I gained at Ecobee and now was a good time to move on.
__________________________________________________________
The past two years felt really busy. There was always something to do: new activities to try out; new skills to acquire; new challenges to overcome. This constant stream of staying busy and doing things is called “hustle porn”. (If you’re curious what it looks like, simply take a look at all the chest-puffing in LinkedIn posts.) I’m not a big fan of “hustle porn” because it overglorifies the rat race; at the same time, I can’t help but feel like I also take part in it.
At the start of 2019, I was hustling to find a job, then hustling to finish exams. After starting work, I once again hustled to acquire more technical skills. There’s a trade-off to hustling. On one hand, I learned so much in the past two years that almost every major technical goal on my bucket list has been checked off. On the other hand, there hasn’t been much time to actually enjoy life. An analogy is to tourists who rush from one attraction to the next to take selfies without actually enjoying the attractions. They have good pictures, but did they really enjoy their vacation? Finding the balance between hustling and relaxing will take time.
I do appreciate my curiosity to explore new things and perseverance towards acquiring new skills. It’s almost become a habit to learn more about software development outside of work and aggressively pursue growth opportunities. I used to think everyone else was also learning new skills but now realize that’s usually not the case. It seems that as people grow older, the more they prefer to stay within their comfort zones and become less hungry to try new things.
Looking back, it’s funny. Most of my internships were at Internet companies. Although they were interesting, I wanted to move down the tech stack and somehow landed a full-time job working in the IoT space. Then, through another coincidental burst of luck, my second job will be in the semi-conductor space, even lower in the tech stack. It seems like we’ve reached the end of the barrel; any lower and we’re dealing with digital circuits and hardware.
As the year draws to an end, there’s still a lot of uncertainty, especially over COVID. Who knows what’s in store for 2021 but whatever happens, hopefully it’ll will be a lot better than 2020.
Anyways, I learned a lot during the past two years. Let’s see what happens in the next two years.
Happy 2021!