The Secret of My "Success"
I have the title of Senior Principle Software Engineer at my day job. Over the past couple of years I've had a few folks ask me how I got to this position, so I figured I'd write down the things that have happened along the way. Some of it was on purpose. Some of it was dumb luck. Some was circumstance. All of it was part of a convoluted journey that helped me understand what's important to me and how to spot opportunities that support that view.
Your version of success may be money or fame or prestige. Those are all fine motivators. For me I've defined success as synonymous with fulfillment. I didn't always understand it that way, but that's been the undercurrent. That context may be the most helpful thing to understand why my journey has unfolded as it has.
The Normal Path #
First, it may be helpful to understand what my job is and the path that most folks think they need to follow to get here versus the path I took.
Basically I'm just a software engineer* with a lot of experience. More specifically, my position has the broadest scope within the software development function of my company. I spend most of my time focusing on strategic thinking and figuring out how to move the rest of the team toward a common technical vision. In general, the positions that one would hold on the way to this level and the scope they would be responsible for would go something like this:
- Junior Software Developer - task execution
- Senior Software Developer - feature execution
- Staff Software Developer - feature architecture, team technical priorities
- Principle Software Developer - business domain architecture, technical strategy
- Senior Principle Software Developer -company architecture and patterns, years-long vision
There are variations on these titles and their definitions, but the ideas are all roughly the same. You can think of them as concentric rings of responsibility. As you get a bigger title, you're deemed to have sound judgment and can be entrusted with bigger bets.
My Path #
I didn't take the path outlined above. I mean, I kind of touched each of those positions, but it wasn't a straight line. There was a lot of other stuff sprinkled in there. And I think that's part of why I've landed here: I didn't just grind away trying to impress my boss and hoping to get a promotion. I found interesting, fast-paced situations that needed someone that was hungry and willing to take a shot. I trusted my gut when opportunities came along. Here's a Readers Digest version of my career path:
- Take a job in satellite operations out of school. Hate every minute of my 9–5 in a cubicle for a year.
- Say "yes" as quickly as possible when my dad offers me a pay cut to learn how to be a software developer on the job with his tiny (3-person) company.
- Go to work for a summer camp for a couple of years not as a software developer, but still in charge of tech.
- Hear an ad on the radio for a tiny agency hiring software developers. Take the job as employee #20 - a "senior" developer. Get promoted to Client Services Director 3 months later. Handle the biggest accounts (i.e. Walmart). Get promoted again a couple of years later. Leave the company after 4 years when it's 200 people with a VP title.
- Move across the country for a job at a small consultancy only to have the CEO resign a week after I start. Find an opportunity to get a 6-month contract to build an MVP for a funded startup and start my own shop with 2 contract employees that turn into full-time. Write LOTs of code.
- Get acqui-hired by the same company that signed the first contract and become Senior Director of Software Development. Keep writing code.
- Respond to a LinkedIn message from a start-up with funding looking to build a permanent team. Write a ton of code. Rebuild their whole application and build the most amazing team in the history of small-but-mighty start-ups only to have the start-up run out of money right as COVID hits.
- Take a job with another startup after 3 months of unemployment and get fired 3 weeks later because the CEO was a nutjob and I couldn't hold my tongue.
- Become a software development manager at a big, old tech company. Recognize that it requires almost no effort and take a second full-time job with another startup. (Yep. And both employers got their money's worth out of me.)
- Find a cool company with a ton of capital that want to build out their tech capabilities and get offered a Principal Engineer role.
- Get offered another Principal Engineer role in another company with so much room for improvement that it's almost a slam dunk. Ignore your boss when he says that your scope is limited to his team. Align folks with a vision for the future. Onboard some valuable tools. Show high judgement around people and tech. Get promoted.
All that to say this: I didn't start out with the intent of holding the title I have. I think it's easy to romanticize the title - especially when you're young. Instead, I set out to find interesting problems to solve with interesting people; to learn as much as possible; to find a path that gave me the freedom to do things that I love outside of work while generally enjoying what I do at work; to earn respect; to gain experience. I've also never asked for a promotion.
Education #
I do not have a computer science degree. I have a BS in aerospace engineering, which was as challenging as it sounds. When I was a kid I always just wanted to build airplanes. I still do. Everything I know about software development I learned on the job. So arguably, I could have gotten to where I am without getting a degree, right? I wouldn't go that far. Stay in school, kids. The thing that most folks don't understand is that the point of a college diploma is not to prove that you learned content with practical application in your coursework. It is to prove that you, as a young person, have successfully prioritized your time, worked hard, and fought through ambiguity to complete your degree.
Wait, what's that about ambiguity?
I don't know about your experience, but rarely did I pass a class based on the words spoken by a professor in a lecture. Almost all learning had to come through self-study and collaboration with my classmates. Granted, this was at the advent of Google, which made things a little more arduous than today's environment. Regardless, I had to figure out how to cut through a haze of WTF and learn how to adequately prepare for tests that I couldn't predict. That practice prepared me for the ambiguity that employers gave me with the expectation that I could polish an idea into a diamond.
Age #
This aspect is the hardest to come to terms with in your career: Credibility comes with age. It's not that you can't build trust and be credible at a young age at all. And there are exceptions to every rule - genius savants that somehow defy the norm and communicate with such eloquence that the masses are entranced by their splendor. But the fact is that there's a high degree of credibility and implicit trust that just comes with being the old guy/girl in the room with decades of experience under your belt. To be honest, the nature of my opinions and the conviction I have around them is roughly the same now as 20 years ago. But the past two decades have refined the content and expression of those opinions as well as my ability to consider new information. I know. It's really hard to understand when you're 28 and wicked smart and full of piss and vinegar. Don't worry. The important people know you're smart. They see you working your ass off and creating value. If they're good leaders, they're stretching you so that you're getting the experience that will make you unstoppable in 15 years. Embrace it.
Be Coachable #
Of all the content I'm conveying here, understanding how to be coachable at a young age (which I wasn't) might have benefitted me the most. What does "coachable" mean? It means not taking criticism as a personal attack, but rather as an opportunity to learn something that will benefit you in the future. It's a curious mindset. Every piece of feedback from the world around you is adding fuel to your fire - either positive reinforcement or new data to shape a skill. It's hard to get your ego out of the way for this one. It's hard to walk away from what feels like a fight sometimes.** But there's gold everywhere when you're looking for it.
Communicate #
The crux of almost every success or failure in any organization since the dawn of civilization is communication. Learning how to communicate with a variety of audiences in a variety of ways has been essential to paving my way to a comfortable living. Seek to understand what motivates decisions and actions from folks with different responsibilities. Look for what incentives are in place for their behavior and reason about those incentives with relatable metaphors. Create documents or presentations that tell stories in ways that they will understand and be enthusiastic about. Collect and relate data in ways that are meaningful to the audience. Lastly, don't bore non-nerds with the technical details or try to explain why something is technically difficult. Nobody cares if it's hard. They care about cost-benefit. They care about potential risks and the time/effort required. Be transparent, but, for the love, don't point out a bunch of obstacles that nobody in the room fully appreciates or understands. In other words: Know your audience.
Own a Business #
This is a specific kind of experience that I think is worth calling out. Understanding the motivation behind the decisions of C-level leadership is immensely helpful as you get more strategic with your scope. There are few things more educational on this subject than owning your own business and having to eat what you kill. Here are a few key concepts that you will want to understand:
- Assets, liabilities, investments, and expenses
- Cash vs. accrual accounting
- EBITDA
- How growth can sink a business (I know. It didn't make sense to me either until I lived through it.)
- Debt as a tool
- Top-line revenue vs. gross revenue vs gross profit vs net profit
- COGS and cost of acquisition
- Strategic thinking vs. tactical thinking
- Staffing: who to hire and fire and when
- What to measure and why and on what cadence
- The importance of deeply understanding your own strengths and weaknesses and limitations
I have owned a couple of businesses. It is stressful and can be frustrating. But it is rewarding. Business ownership has easily given me the knowledge of several college degrees.
Practical Advice #
So here's what I would recommend if you think you want to do the things that I do:
- Get a degree if you can figure out how to finance it without being swamped with debt. It's a foot in the door no matter what you want to accomplish. Get a computer science degree if you're inclined. Get a CS grad degree if you want to be considered for the bigger IC titles at FAANG-like companies.
- Find fast-paced environments to work in that have high expectations of your work. It will quickly make you good and fast. Good and fast are always desirable. These environments will accelerate your experience.
- Be patient. Gather experience that will give you well-substantiated strong opinions and help you ford the river of ambiguity with confidence. This may be the hardest pill to swallow in your late 20s.
- Remember that the goal of a business is to make money. Learn to consider financial incentives and impacts of what you do - both long-term and short-term.
- Don't get hung up on the title and money. Make sure that the job is providing adequate resources to you and your family and enough fulfillment to motivate you to keep adding value.
- Drilling down into fulfillment...Make sure that you actually want to operate at the level of a Principal Engineer (or higher). It's very different work from senior or staff engineering work. I get paid to actively avoid writing code for my employer. Think about it.
*I use the word "engineer" here in the loose sense to mean "creative problem solver".
**There are occasions when you need to fight out of conviction because you know it's the right thing to do. Conviction is an asset.
- Previous: Migrating Terraform State in Gitlab
- Next: Strategic Hierarchy