Its been a couple of months since I left my engineering role at Amazon, one of biggest tech companies in the world. Working at a big tech company was one of my top goals while pursuing my bachelors and both Samsung and Amazon helped me fulfill it.
In this article I want to talk about my experience at Amazon and what I learned about software development.
Amazon has many organizations, some of them large enough to be independent companies (Amazon Prime, Amazon Alexa, Amazon Web Services, and many more). Some orgs have different culture than others but all of them follow the famous Leadership Principles that Amazon’s culture is based on. I have observed the following things based on my experiences and that of my friends from different organizations:
An Engineer plays many roles
Depending on the project and deadlines an engineer plays a lot of roles at Amazon. Following principles like Bias for Action and Customer Obsession an engineer developing a feature is supposed to work with TPM, EM, PM and engineers from their own and other teams to get their project to completion. This is very different from other companies where only the senior engs / tech leads interact with product and business teams and new grads are supposed to do only the coding work. Not at Amazon, here you are the feature lead just 6-8 months into the job. Of course there are other mid level and senior engineers providing you guidance and support but you are solely responsible for talking to different teams, identifying blockers early on and reporting them to your manager / sorting them out.
This is one of the many reasons Amazon is a good company for people early in their careers. Getting so much ownership and varied experience early on helps you develop both your technical and people skills.
Which brings me to my next point below:
Soft skills are as important as technical skills
Well, soft skills are not soft. Most often than not, us engineers focus so much time honing our tech skills that we hardly focus on developing our people skills.
We develop software for our customers. These customers can be our end users, other internal teams, or other business partners. It’s important that we understand the business context, understand our customer’s needs and work with our teammates to give our best output. All of these things require a lot of communication, empathy, teamwork and emotional intelligence. It’s very important that we focus on developing these early in our career and at Amazon I got a lot of opportunities to do so. Working on large projects and closely with product and business teams, helped with me develop strong communication skills and product sense.
The technical skills are important and describe the HOW of the software development process, the soft skills help us understand the WHY.
Impact and Visibility > Longer and harder hours
Some teams at Amazon are notorious for long working hours. Creating and managing a Tier 0 / 1 service with millions of customers and an SLA to stay up and running 99.99% of time, sometimes bring long hours and too many SEV 2s.
I am not saying this is always the case, but yeah won’t deny that some teams have worse than others. Though from my limited experience at company, I have seen that working on high impact projects is more important than pulling longer hours. These projects usually have visibility which might mean tighter deadlines and high ROI. Usually, these are projects one should aim for as they result in the deeper learning and puts your out of your comfort zone.
Side note: In some cases, the engineers themselves have to prioritize these projects and bring it up to leadership and product teams. Too many SEV 2s? The root-cause might become a project which should be worked upon. Bringing attention to stability and performance of a product is also an important job of an engineer.
Not to forget, high impact and high visibility projects is what gets us promotions. Whether its a new product feature addressing a dire customer need or a refactoring project to improve stability and scalability of the system, these projects push us to learn more about different parts of code-base, frameworks and sometimes even languages!
Not to mention the system design, documentation, communication and project management work which comes along with development. These situations push you to perform at the next level as well as improve as an engineer… landing you a promotion.
Your manager is very important
to how well you perform your job. A good manager is a force multiplier. As a developer one of the best things you can do for your career is finding a manager who cares. Cares for the product you’re building, the team’s overall health, your career and ambitions as well as the team’s overall impact.
Of course this is hard to gauge and you can only check these qualities after working with someone for some time but keep an open eye. Observe how they handle tough situations, failed deadlines, career growth conversations, inter team communication and so on. Do they just manage down or also manage up? Are they technical enough to understand the project and architecture deeply. Can they help you make tradeoffs between short term project features and long term product health? How do they handle your 1:1s? The right manager is friendly enough that you can open up to them but professional enough to give you constructive criticism from time to time. A manager’s job is a hard one for sure so it’s important to give them feedback from time to time too. Though if you feel your manager is lacking in some key aspects and there is little to no improvement over time, change teams.
You should keep looking for the right manager till you find one.
Invest in developer tooling and improving processes
Usually developers at big tech companies don’t pay heed to the vast number of resources at their disposal. You write your code on a code editor, build it with a build system and use a code management workflow to build and run it on productions machines sitting on some far away server. These are just of some of products a developer interacts with daily. Good developer tooling is very important. What will happen if running your unit tests takes twenty long minutes or you have to patch your test environments with security updates once a month. It’ll terribly slow you and your team down. Thank god there are teams which takes care of all this. Thank god there are tools and software that takes care of this. Good software development tooling and processes saves you so much time and incredibly fastens development cycles. It’s important to invest in them.
As I mentioned, not only tooling, but processes play an important role too. Everybody think a 10x engineer is someone who generates 10x code. Wrong! A 10x engineer is someone who develops the product and processes that increases productivity for 10 developers. Be that engineer. Setting up the right engineering process and investing in developer tooling for your team is important. Focus on improving your code building time, testing and review process, improve your oncall processes, invest in applications which help you write secure and stable applications. Keep optimizing processes which save developer’s time and energy.
This one is a cliche advice but important to mention. Keep learning!
No matter how much you know about your service and product, there are always ways to make it better, to make yourself better. No matter how busy you get with your work, take some time out to learn about a new technology or language. If you think it’s a huge time commitment, just read code from your sister teams services. Read different design documents and understand why they are written that way. Read the source code of the daily tools you use. The purpose is not to know everything, it’s to keep an open mind and always be in learning mode. As you grow in your career, being curious will keep you interested in the game and save you from burnout.
Network with people
People you work with today will move to other teams, companies or may even start their own ventures. Making long lasting relationships with your peers will not only help you in your current role but also you’ll also reap its benefits many years down the line. I found mentors at Amazon who were very open to give me honest feedback and valuable advice. Some of them moved on to different companies and I still get to interact with them every now and then. Networking with people at your current company who are from different teams or even different roles is always a great way to learn about different parts of the business you’re in. I can go on and on about this but you get the point.
There are many other things which I have observed and learned but for now, that’s it folks. Hope you find this article helpful.