I started working at Uber full time a Software Engineer I at the peak of covid (January 2021) and in the received the promotion of Senior Software Engineer a few months ago (August 2023).
Similar to the motivation behind starting cscareers.dev, this post aims to assist individuals who are in a similar position of starting an entry-level role. As you gain expertise in any field, you may gradually forget the challenges you initially faced. This post serves as a brain-dump of the challenges I encountered, allowing me to preserve my beginner's perspective before it inevitably fades away.
With that, there were certain challenges around being an entry-level engineer in a remote environment. It’s a important to note that these lessons are based on my own experiences. These may not map 1:1 to your own career growth, but I did try to make them as objective as possible.
When getting assigned a task, you may receive some push to give an estimate. This was largely difficult for me. I was still relatively new to the codebase and felt the need to prove myself, so I would aim to give small estimates. This would prove to be brittle when something would pop up and cause the timeline to derail.
Look to double any time estimates you communicate to people. When you are able to deliver faster than the timeline you communicate, your stakeholders will typically be more happy than they would be when you need to communicate you need more time because you got blocked by X, Y, Z.
It’s important to call out that despite the success I’ve experienced, imposter syndrome didn’t go away for me. If anything, with every title bump it got “worse”. The key distinction though is I’ve learned to manage it better overtime and use it as a forcing function to become a better engineer.
Using your imposter syndrome in a healthy way to force you to become 1% better than you were the day before will have tremendous impact to you over time. And because you are so early on in your career, you have more time to reap the benefit of your hard work early on. It’s important to respect yourself, but I would take time to learn how you are able to get your imposter syndrome to “work for you”.
When starting as an entry level, it won't happen very often that people are coming to you to ask for help, but this will quickly change the more time you spend at your company and establish yourself as a credible resource. When you have to switch tasks to assist a teammate, there is a ramp-up time needed to return to the focused "flow state". Try your best to get some heads down time in a contiguous time-block with notifications silenced (update your Slack status if needed!).
Becoming a subject-matter expert for something that your team commonly works on currently or will be in the future can provide you with a competitive advantage. This does not need to be strictly related to engineering but can also be relation to product management/product design if your team is lacking those resources. Identify what the team lacks and aim to jump into that when the team could benefit from it. Be sure to communicate what your goals are to your manager and a good one should be able to let you explore the surface area.
In any software engineering role, you will be needing to write code to successfully do your function. But one helpful exercise I would often do is reading the senior engineer's code on my team. Understand what makes a good pull request and clean code looks like. Ask questions when you have them. This should be a recurring activity. If you only spend your time writing your own code and never reading other people's code, it’s more difficult to grow if you are only ever seeing your own output. Perspective is invaluable and reading code is included in this.
Being able to crack into a tech company that has a rigorous interview process is no joke and deserves its recognition. But at the end of the day, after you get into the company no one really owes you anything. With this in mind, it's on you to create a plan for you to get to your next goal.
If that's a promotion, look up the level expectations internally and/or have a conversation with your manager where they can help push you in the right direction. Getting a promotion requires tactical work from your end and letting your manager know as far out in advance as possible that this is of interest to you is critical. If your goal is to work yourself into the management track, express interest of wanting to manage an intern (though I think everyone should do this at least once at some point in their career).
If you aren’t sure what your career goals should look like, have conversations with those that are more senior than you that you respect. It is important to set goals that go beyond your daily work requirements. This ensures that you are gaining more than just the value of your labor in your job.
I’ve been extremely lucky to have worked with great managers during my time at Uber that align with how I work best, so this came a bit more naturally to me. But it’s extremely important to communicate what your needs are and to genuinely be transparent with them. A large part of the manager’s success is dependent on their reports, so if you are trying to put good work in and aren’t sure about how to execute a detail / getting blocked on something, communicating this should help you in some capacity.
In a similar light as the above point, you should aim to build authentic relationships with the people you work with closest. This helped me become more comfortable when asking for help because I made it a priority to build a relationship with the person outside of just asking them for help.
While people might have different expectations around work relationships, this is the one of the top things that have kept me around at the company. It’s extremely important to build trust with those you work with most.
This can involve striking up a conversation about a personal interest that they mentioned or reaching out to them after they have just provided a standup update indicating that they are blocked on something and clearly frustrated about it.
There are many ways to kickstart a relationship with someone and it is largely contextual on the other person about how to go about it. At the end of this post, there are a few books I recommend that can help on this front.
Being a remote employee in a company that has a subset of employees attending in person is an extremely easy way to be siloed off. This isn't desired when you want to build relationships with your teammates. Some interactions are incredibly difficult to reproduce organically over zoom, and a lot of people are harder to learn more about over remote. Strive to work in an in-person team that has interesting personalities as well as interesting work.
A brag doc is a document lists all that you accomplished in the past. This should include artifacts from helping other teams/your teammates (e.g. providing thorough code review/leading a part of a project/etc). The reason why this is important is for a few reasons:
At least for me, it was very easy to forget a lot of things that I do throughout the week and this document served as. Set up a 15 minute weekly event on your calendar at the end of every Friday to document what you have done in the last few days. This document will also come extremely useful when it comes time for performance/promotion season.
While I reflect on the progression I have had in my career, a lot of it has come to being at the right place at the right time. Macro decisions at a larger company could have completely derailed this timeline for if I were to be on a different team. With this in mind, it’s important that you remain focused on your inputs rather than the outputs.
A list of books that I read and found valuable in my early-career progression (technical and non-technical) - no affiliate links: