On December 8th 2018 I did 10 years as a software engineer. This post is a collection of my memories and learnings along this time.
A long time ago, 10 years ago to be precise, I used to live in Brazil. I had just been hired as an intern at a multinational consulting company. Our branch office was pretty small and my main job was to support and fix bugs in a Telecom service. My proudest moment was when the service couldn't process a customer order to create 31,000 new lines. The processing was timing out. I discovered the issue was caused by two nested loops. I was able to refactor the code to extract the 2 loops and thanks to that we were able to finish the processing. Why was I proud of it? It was the first time I used algorithm analysis to solve a real-world problem outside of college. The best lessons learned at Accenture were how to communicate and work together with different people.
Between 2010 and 2011, I moved out from my hometown, worked in 2 different companies in less than 7 months and moved back to hometown to work at Accenture again for the entire year of 2011. At that point, I was really disappointed with my career mostly because I was working on CRUD applications with no learnings or interesting challenges.
In 2012 we moved to Brasilia, Brazil's capital, where there were lots of contractor jobs for Java Developers like myself. There I got my first job as a contractor. It was a new beginning and I felt refreshed to start investing in my career again. That year I took 3 Java certifications exams (Java Programmer, Java Web Developer, and Enterprise Java Developer) and 1 IBM certification (Object-Oriented Analysis and Design). I did hibernate/JPA training and became the expert on my team about ORM. I was mainly working with Java EE stack and Flash ActionScript (RIP). It was also around that time that I got interested in Clean Code, Coding Best Practices and Software Architecture in general.
In 2013, I moved to work in a startup and that really didn't pay off. There was a clear mismatch between the CTO expectations and my own expectations. Two lessons learned from that period:
- One lesson learned here: never work in a family business where you are the outsider;
- Always align your expectations upfront.
On that same year, I moved to a contract in the Brazilian Ministry of Education. I loved that new job. I worked on a project that allowed Brazilian students to go study abroad as the main owner of the reporting module of the system. I was doing requirements, design, development, testing, and monitoring deployment. On that job, I learned to have ownership of my products.
Then in 2013, I got an email from an Amazon recruiter to join an Amazon hiring event in São Paulo - Brazil. I joined the hiring process thinking I had no chances, I was never that good with algorithms but impostor's syndrome aside I decided to try and move forward. For the next 3 weeks, I spent day and night solving questions and revisiting all data structures and algorithms I thought it would be useful: lists, trees, sets, maps, sorting, searching, graphs. Long story short, I passed the hiring loop and I got an offer from Amazon to come to Seattle - WA in October 2014.
Since 2014, I've been working at Amazon. I've worked in 3 different teams so far: Amazon India, Customer Reviews and now AWS Builder Tools. At Amazon, I learned all kinds of interesting stuff: how to look at metrics, how to do monitoring and alarming, how to orchestrate and deploy solutions that communicate with multiple services. There, I was able to write my first API that would be consumed by millions of people worldwide and I wrote and read code in all kinds of different languages. Nowadays, at AWS Builder Tools and I build the tooling that helps Amazon engineers to be more productive and delivery solutions with more quality.
That's the 10,000-foot view of my career. From an intern in a small office in my hometown to a software engineer at one of the biggest tech companies in the world. I hope this article helps other people inspiring them to try and find their own path.