My Path to Become a Principal Software Engineer
A few days ago, I was promoted to Principal Software Engineer, it has been a while since I decided to get that title, so I decided to briefly describe my path for that in this blog post. If you are considering becoming a principal soon or moving to management as a side track, this post is for you. This is a more personal post, if you are looking for tips and tricks on becoming a better engineer. I recommend you to read my series of Secrets I use to become a better developer in 2019,or 2020 where you gonna find many of them. If you want to read more about my career, hang around.
How did I get here?
I have been a self-taught programmer since I was 16 in 2005 when I stole a few abandoned books from my older sister (who became my Intern several years later) to learn visual basics while I was an intern at one Bank in Brazil.
Since the first successful program I wrote, called Sophia (What would become the name of my beautiful nieces), I have fallen in love with coding.
In 2007 I started my graduation in Information Systems. After a few internships in 2008, I had my first full-time job as a programmer in a two people start-up called Ormuztech, where I was the main developer for the first company product, “Ebelle” (Ebelle became one of the products of my company in 2011 when I started it).
In 2009 Ormuztech ran out of money, and I left to join a big company called Teknisa, as a developer, there I was first promoted to Lead Programmer in 2010.
In 2010 I left Teknisa to become a mobile developer at Prime System, where I stayed for almost 3 years and was promoted to Software Architect.
2011 Becoming a Software Architect
The last time I sought a title promotion was in 2011, when I was promoted to Software Architect, leading teams to build Mobile applications exclusively. I was happy with the promotion back then, but I considered that a Software Architect needed to lead Backed, Front, and teams to be a top professional. The reason why two years later, I joined Teknisa again as a Software Architect, with the mission to build and lead a big team with backed, fronted mobile developers and designers.
As a Software Architect at Teknisa, I successfully delivered a framework and more than 10 successful projects to most of the big customers. Moreover built a team of more than 20 engineers that today lead teams in many other companies worldwide.
2016 One step back to start working remotely
After multiple years as a Software Architect, I thought I would never seek new titles in the tech industry. Titles mean very little to me personally, and what really matters is the impact you can have where you work. Yet, at Teknisa, around 2015, I was promoted to Software Engineer Manage. For base compensation reasons, I was not allowed to stay as Software Architect, so my salary could go higher. So I never used that title public because the managers’ path is not the route I would like to follow.
At the end of 2016, my wife joined the Brazilian military police and was forced to move to a small city in Brazil. Given my current compensation, I had no chance to find similar jobs in small towns where my wife would have to live. I had two options left.
- Live in different cities and travel every week to see each other.
- I could find a remote job and move to a small city to support her.
In 2016 remote work was not cool as today. And in Brazil, even less cool, it was nearly impossible to find a good-paying jobs remote, so I decided to seek jobs outside of Brazil where I could keep similar compensation and work remotely from the small city my wife was forced to live.
After a few interviews, I have received many offers to move to other countries like Ireland, Germany, and USA but none for remote jobs. I also failed a code test for a remote position at Elastic because of a bad implementation of some algorithm. That job would be perfect for me.
So I decided I needed something else to shine from other candidates since I asked for a high salary but avoided management roles. I also needed to study algorithms to pass easier in the code tests. I decided to start a Master’s Degree in Computer Science since it was an old desire and could help me with my next goal of working remotely. I was convinced that it would be significant differentiation.
After three months in the Master’s Degree, Tenfold, one of the American Startups I had interviewed to be and Lead Engineer, and had tried multiple times to convince me to move to the USA, called me and offered me to become the first remote employee of the company, this time to be a Software Engineer, since they did not want to have leaders working remotely.
It was a step back to me, but what the hell? That was what I was looking for. And I accepted it and started working as an IC again. The first 6 months were a fantastic time with high productivity, focus, and learning, all while doing my Master’s degree in Brazil. With the good results, I was then promoted to Lead Software Engineer and built a team of 4 engineers, all working remotely. I ran that team for bout two years, but I still missed the freedom of IC that I enjoyed in the first 6 months.
2018 - Leveling Up
In 2018 I concluded my Master’s having being a productive fellows of my lab, with 4 publications, 3 in high-grade conferences and one in a journal, and two invites to publish longer versions of my papers at another journal. I declined a Ph.D. scholarship, to focus on working for a while.
I decided It was time for my next step, and I missed the fun of IC again. So I started researching how I would hit higher positions, influence, and salaries without having to lead teams. Here was the first time I heard bout the Principal roles where engineers could stay close to the code and grow professionally and financially without moving to management roles. So here I started preparing myself to become a “10x” developer.
I started writing and debating tech ideas, reading technical and productivevity books, and also started my favorite open source project Nun-db.
Two months later, I joined Radical () as a Tech Lead. I made clear I would like to stay IC, but I would love to mentor people and share my knowledge in multiple teams, having a big impact but without leading teams.
I was immediately assigned to a customer, Nucleus, where I delivered great results by applying what I was researching and reading to my day-to-day challenges. I lead the implementation of a software distribution platform from inception to release. Then moved to the QE team, where I helped structure a team of test automation engineers, delivering a few frameworks and hundreds of End-to-end and API tests. Afterward, I joined the Nucleus SRE team, where I took ownership of Kubernetes migration, administration as well as the implementation of Continuous-Delivery. Nucleus was then acquired by Change Healthcare. Despite being a contractor, I was a key person during the acquisition. I helped get Nucleus infrastructure in GCP from Azure within a few weeks and moved to the Performance team with the mission to improve performance in all application areas. I am since pushed for a metrics-driven, test-driven culture across Engineering.
In the Performance team, I teamed up with a great friend, a Ph.D. in electrical engineering and Principal Architect, also one of the grates engineers I ever worked with. As a result of this partnership, we created a performance-first approach and promoted a change in many application layers, from new algorithms to render and stream images to the front end to new infrastructure design, metrics, tracing, and real-time performance monitoring.
Here my promotion to Principal Engineer happened a few days ago.
Becoming a Principal will not change how I approach problems. It will put a few new responsibilities on me to share my methods internally in the company (more or less what I do in this blog). It comes more as a recognition for the already delivered contributions than new responsibilities, which is the best way to be promoted. Now with more influence, I will keep pushing for TDD, Metrics, Tracing, and evidence-based software engineering as I do since my first day in the company. For now, I am happy to use the bust in energy to spread that to other teams and hopefully see results in other teams around ours.
What comes after Principal?
In big companies like Google and Facebook, there are at least two levels of tech levels above Principal called “Distinguished Engineer” and “Fellow Engineer”; those seem to be legendary titles to me. None of my close friends holds any of those titles, so I will have to research to see if I am interested in doing that step. I am not worried about my next step; I think it comes naturally as your results and impact grow, as I run my one company where I have complete freedom and have my own projects (like Nun-db) to have fun. I will enjoy the new duties and make sure I can over-deliver on the expectations. At the same time trying growing my impact out of my bubble in this blog.