3 months as a Senior Software Engineer
I started a new job as a Senior Software Engineer at Seek in April 2022. For context, Seek is an online employment company headquartered in Australia and has a presence in over 12 countries globally.
FYI I’ve worked at two different startups/small companies before as a junior/mid-level software engineer, and this is my first big company. All I can say is that things are very different here. And more interestingly, this is also my first job as a senior software engineer.
Looking out for a new job#
In early 2022, I started applying for a new software engineer job in Malaysia. This time, however, I’m doing it differently: I’m applying for a senior role instead of a junior/mid-level role. I think that I’m ready for a senior role. I applied for the position at several companies, including Xendit, Setel, and Seek. If I fail all three interviews, I still have several more companies on my list, including BrioHR, Foodpanda, and Grab. I’m not planning to relocate to another country at the moment.
I’m looking for companies that can offer the following:
- Good engineering culture
- Able to offer career growth path for Individual Contributors (ICs). One way to identify this is that there are Staff and/or Principal engineers in the company.
- Has many intelligent engineers in the company. Same as above, I’m looking for a company with many Staff and/or Principal engineers can I can learn from.
- A multi-national company and work with overseas colleagues to help me communicate in English better
- A big company with teams that have Product Managers and Engineering Managers. A company that makes informed decisions before start implementing them. Many small companies and startups don’t have these.
- Using microservice architecture instead of monolithic architecture. After working with several companies, I can conclude that I prefer microservice architecture. Nothing is wrong with monolithic architecture. It’s just my preference at the moment.
- Using NodeJS or Golang in production.
- Has a vast international audience, and my work can positively impact them. I don’t want to work at a small company with thousands of users.
- Actually has scalability problems. I realized that not all companies face scalability issues, and applying my optimization solution seems like premature optimization to them; thus, they may not appreciate my skills/knowledge. Some of them (especially startups) just want software delivered quickly and minimally, and that’s not what I really enjoy.
I take preparations seriously. Many years ago, I used to look up senior engineer opening on the Internet to prepare myself to become one. One of the companies I admire is Doist , a productivity software creator that mainly uses Python in production (I was a Python developer at that time). I applied for their junior position back then, but unfortunately, I wasn’t shortlisted. Nevertheless, I was looking at their job description for a senior role and took that as my guide to become one in the next few years. Here is the screenshot of a section of that job opening .
After reading these descriptions, I started to pay more attention at work and participate in areas aligned with the ‘About you’ section. Here are some exciting things I learned at my company aligned with the points above:
- Understand all the moving parts (DNS, HTTP, DBs, etc.) - I was lucky to have worked in the CDN industry then. We’re self-hosting a lot of our infrastructure, allowing me to dig into these moving parts.
- You are familiar with Python and know both its strengths (and how to capitalize on them) and weak points (and how to work around them) - I was working with exciting microservice services. I stumbled upon several pitfalls with Python, like GIL, race conditions, graceful shutdown, idempotency, etc.
- You are familiar with MySQL or PostgreSQL and have experience with its quirks, weak spots, and workarounds - After reading this sentence, I start to pay attention to database details. Since then, I have learned a lot about the different types of databases (SQL, NoSQL, columnar, embedded, key-value), data replication, data streaming, isolation level, consistency levels, DB transaction, indexing, views, table design, etc.
- You’ve written unit tests long enough to have a taste for what a good test looks like - I was lucky to get involved in a massive initiative at my previous company to improve our unit-test coverage and then safely upgrade our Python version. That’s when I learned about stubs, test doubles, mocking, integration testing, etc.
- You are familiar with OWASP Top 10 web app security risks and know how to avoid and mitigate them - I started learning about security best practices like CSRF tokens, many different authentication methods (JWT and session-based), CSP header, SQL injection, file injection, etc. I also participated in live DDOS incident meetings and learned how to mitigate them.
- You understand the value and cost of abstraction and are versed in current architectural practices - I learned about many programming design patterns. I started to recognize what kind of design patterns we use at work. Since then, it’s easy to reason why we do the way it is.
Bear in mind that I’m far from good at these topics I mentioned above; it’s just that I have some exposure to them, and I started showing interest when they came up at work. These are the hard skills I began to pick up in the previous company.
I was also lucky enough to earn the trust of fellow engineers and the CTO to start leading small projects in the company. That’s where I learned leadership and soft skills, and I made some mistakes and learned from them.
After these experiences, I’m now confident to apply for a senior role.
I submitted my resume to those companies and was invited to all three interviews. I’m surprised that I enjoyed the interview sessions at those three companies. The three interview experiences differed significantly from when I applied for a junior/mid-level position a few years ago. Each interview session took ~2 hours and was really exhausting but meaningful.
Received the offer letter#
I was accepted at two companies, Setel & Seek. They’re similar in many aspects, which gives me a hard time. I asked them for two days to let me make a decision. Both are great companies in Malaysia, but in the end, I declined Setel and chose Seek. Some of the reasons are:
- Many employees stay there for a long time (many years), making me think they’re happy there.
- Seek is more mature and stable because they’ve been operating for 20+ years, whereas Setel is very young.
First few weeks in#
I’m assigned to the SRE squad in the Discover team. We are responsible for keeping the home pages of many Seek brands alive and reliable.
In the beginning, I had some communication issues with the team. I’m not a native English speaker, so I had some problems listening and understanding English conversations, especially with an accent. I also had some issues replying to my colleagues because I worried they might not understand what I was saying. After some time, I realized this is honestly the beauty of diversity in our team, as my team consists of people from diverse countries and backgrounds. After getting some feedback from my colleagues, it turns out that they understand my messages just fine and are okay with my own Malaysian accent.
First few months in#
Being a senior engineer for the first time is really challenging. And I’m not alone. Raymond Gan , Senior Platform Engineer at Tubi, also has the same experience.
This quote resonates well with me. An engineering manager at my previous company once told me that.
When someone joins our company, they will need ~6 months to work effectively in the new environment, and they will take ~1 year to actually start giving value to the company
In saying that, I might need some time to grasp my feet in the company.
This is me doing my best at my job:
me doing my best pic.twitter.com/XqQPBwq85V— cats dont need a blue check (@weirdlilguys) August 3, 2022
I also had difficulty shifting my mindset from startup-y thinking into a big corp perspective. In a startup, you can spawn an EC2 instance in a random VPC, and no one bats an eye, and you don’t even care about managing it in Terraform. You can just deploy a VM in Google Cloud, a database instance in AWS cloud, and subscribe to a cheap random SaaS on the Internet without going through a strict process of evaluating the vendors. You can’t do that in Big Corp. And that’s what I’m trying to get used to.
Not to mention, my team is very supportive of my work, and I really appreciate that. I wish to do the same to the new joiners soon.
I used to think that Senior Engineer was just a developer who writes code on steroids. An engineer who can write and deliver any feature the company wants quickly. An engineer who can fix any codebase bug, investigate production incidents, etc. Unfortunately, I was partly wrong. In my opinion, a senior engineer is more than that.
Again, referring to Doist Senior Engineer job description, here are what is expected from a senior engineer:
The description above resonates well with what I’m currently experiencing at Seek. As a senior engineer here, I’m expected to:
- Drive the project/initiatives for the company, write proposals, convince and consult other engineers on the implementation, etc.
- Actively contribute to other projects
- Dissect problems and propose and convince the implementation of the team
- Provide feedback. Since I have previous experience working in other companies, I can contribute to the team what worked for us before and what isn’t.
What I do day to day#
I spend more time writing documents/proposals, pair programming, communicating with stakeholders, monitoring services, attending meetings, reviewing code & documents, and actually writing code. Writing code is now a tiny chunk of my day.
Most of the time, writing code is not the most challenging part, and writing the correct code is much more difficult. To do so, you’ll need an opinion from others who are more familiar with the codebase’s history and those who will maintain it later.
I am a solver in the team.
Things that I miss a lot#
- Working with databases
- Working with message brokers
- Working with Kubernetes
- Self-hosting our services
- Building with APIs
In my current team, I’m working on a small but critical part (actually, all parts are crucial) of the system.
Things I’m grateful for#
- My colleagues are brilliant, talented, supportive, and helpful. I learned a lot from each of them every day. It makes me feel fulfilled. I like the collaborative culture we have here.
- My manager & team lead are doing their best to ensure we perform well.
- I’m working on a service that has a relatively huge audience: 3M - 5M visits every day, ~70M active users. I feel that my work makes a significant impact on our users. At this scale, even the simplest things can be complex to implement.
- I’m working with AWS and other tools at a relatively big scale (compared to my previous experiences)
- The company has a lot of internal opportunities to offer, including training, recruitment, mentorship, hackathons, bonus compensations, etc.
- Everyone is generally friendly and fun in Zoom meetings and in real life. I felt welcomed since the first day I was there.
- People respect our personal time, and my tech lead once advised me NOT to work at night and on weekends. Get good rest.
What I see in X years#
I wanted to grow as an Individual Contributor (IC) in the company and test water in tech leadership/management/recruitment. I still have a lot to learn here.