This is the third post I’m making this year. Couple more and I can mark this new year’s resolution as done 🚀. For the rest of the year I want to zoom in on career development for software engineers and managers. I’ve thought a lot about this at an individual scale for both myself and for the folks I’ve been lucky to have on my team. And even on the scale of a whole organization for Bolt, while designing systems and processes around career journeys.

If you’re somebody who cares about their career and wants to have a good one, I hope you’re going to find this useful.

Now, a career is a big thing! It can take 40-50 years to fully unfold at the macro scale, and takes up a significant part of your day-to-day focus at the micro scale! There’s no right or comprehensive way of thinking about it. But I’ve found there are some particularly useful mental models that, when taken together, provide a good scaffolding for all other work. For starters, I’ll cover three big mental models or frameworks that look at the software engineering career in broad and decade long chunks. In a future post I’ll speak about mental models that focus on smaller chunks such as a particular job, role, or project!

But first a word from our sponsor! Stripe is hiring in Bucharest! If you’re keen on advancing your career in a world-class engineering organization, DM me on LinkedIn, or checkout our jobs page and apply directly!

Autonomy & Risk: The Employee vs Freelancer vs Entrepreneur Archetypes

The first career framework concerns the three archetypal journeys: that of the employee, that of the freelancer, and that of the entrepreneur. Employees are those that work within and are bound to teams and organizations, and work for one “client” - their employer. Freelancers are independent agents, with weaker links to one or a small set of clients, for whom they do specific work. Entrepreneur build companies and organizations and have a large set of clients.

These are important, but not essential differences. A better way to look at this is via the autonomy and risk associated with the particular path. Employees have low autonomy and low risk, freelancers medium autonomy and risk, and entrepreneurs the highest autonomy and risk. In that sense, somebody working an entry level customer support job is operating as an employee, as they’re doing a very clearly defined job with low risk and low autonomy. But so is somebody working nominally as an entrepreneur, but dealing with a single customer to whom they are tightly bound. Conversely, an executive might operate as a freelancer or entrepreneur within their organization, by taking on high risk and high autonomy roles, even if they otherwise “look like” an employee.

The way to use this mental model is to understand your level of comfort with autonomy and risk and choose setups that match them and that play to your strengths. We tend to paint “career success” with broad strokes. For example, in Romania it might be working for a BigTech company or striking out on your own as a freelancer. Whereas in Silicon Valley it might be founding your own startup. It’s always tempting to go with these pre canned definitions of success, but if the journey is not aligned with your strength you’re not going to have a good time. And any success will be hard won and temporary. It’s better to adapt and seek roles that match your level of support for autonomy and risk in the form of a whatever seems more successful in your setup.

Mastery & Time: Standard/Advanced Career Progression

The second career framework concerns progression in mastery in software engineering: the standard to advanced career progression. Standard career is the typical progression towards “mastery” of the software engineering disciplines. It has been codified as the junior/midlevel/senior path, which optionally ends in a first rung leadership positions such as being a tech lead, line manager, architect, or staff engineer. Advanced career is the progression past these roles, and into leading and influencing and operating at a larger and larger scale. It has been codified as middle management, executive management, being a senior member of technical staff, performing specialized consulting, or having your startup achieve success past the lifestyle business stage (fighting words, sorry!).

These are important, but not essential differences. Another way to look at this is via the societal and professional expectations placed on you as part of this profession, and the variability of the type of work required. Standard career progression is a akin to a non-negociable part of being in the software engineering community. As such the roles and expectations tend to be more uniform. A senior engineer at Google would do similar work to one at Amazon, for example. It can take shorter or longer amounts of time, but you cannot keep being a beginner for your whole career. On the other hand, advanced career is optional. You can pursue it or not, and the shape it takes is more variable. The role of an engineering director at Google can be vastly different than one at Stripe. Or there are as many staff+ roles as there are individuals doing them!

The way to use this is as a sort of map of the profession. There’s a beaten path that is the standard career progression, and there are detours and ramifications that you can take off the beaten path. It’s tempting to view the progression as linear forever, but that’s not the case. Advanced career has limitations and is constrained by both availability of opportunities, and willingness to dedicate time and energy to fight for the limited opportunities. After all, for N engineers, there can be N/10 managers, N/50 managers-of-managers, N/10 TLs, etc. There’s also an oft-overlooked factor that probably the ROI on your time involvement actually decreases as you pursue the advanced career. There are very few one-way doors, but you tend to encounter them more often in advanced career situations - you can’t be both a world class engineer, and a conference speaker, and the leader of a large organization, and do successful angel investing all at the same time.

Building Blocks: Acts

The third and final major career framework is the most interesting one. It asks you to think of your career in acts. Not as a single big monolithic thing, but not just as a series of discrete jobs or projects. An “act” is some larger time unit, ranging say from 5 to 15 years, that’s dominated by a common theme. It can consist of a number of roles and projects, and allows for setbacks, and successes, and the randomness of life to occur.

There’s various approaches to building acts that you can use. A few I’ve found useful, but by no means exhaustive:

  • Explore vs Exploit acts. Or learn vs earn acts. In some acts you’re focused on rapid growth and learning, while in others you reap the rewards of these by applying your learnings and experience. Acts tend to be smaller here, and you can more easily align them to the rhythms of life.
  • Focus to mastery acts. For a given act you decide to operate according to an archetype, and focus on mastering a particular career progression stage/substage. By the end of the act you should be consistently employable in that thing that you focused on. Acts tend to be longer here, and they subsume jobs, life changes, etc.
  • Acts linked to life events. Starting a family, moving countries, dealing with health issues, or changing relationship circumstances can and do act as natural boundaries to acts. They might not imply a change in the work aspects of your life - you’re a software engineer as a single person in France, just as much as you are as an married expat in Sweden, but there is an undeniable change of phase.

The way to use this is twofold. First, you should try to pattern match your career journey so far to the acts framework. A common first act would be that of getting an education. Between high school, BSc, and a possible MSc, you have 7-10 years that share the common theme of broad education, with a narrowing and specialization as you progress. This is equally an explore act, an act focused on mastering the fundamentals of engineering, and one that aligns well to growing into adulthood. A common second act is that of mastering the standard career path in software engineering and ending up as a senior engineer, tech lead, architect, line manager, etc. This is also an explore act, an act with a definite focus on mastery, and one that finishes around the time of entering into middle adulthood.

Second, you can use this is for planning. Most likely, you’re somewhere in your second act, so you can shape things to allow for a more intentional transition to act 3. Common approaches here would be:

  • Decide you are comfortable having mastered the standard career journey and want to continue in exploit mode, while you focus on other things in your life.
  • Tail end your act two with a tentative explorations of advanced career setups. If it’s something you enjoy and are good at, you can shape your third act around exploration and mastery of your particular subpath. Advanced career is much more free-form, and does imply taking some one-way portals!
  • Prepare for a radically different 3rd act. If you want a change of careers, it still makes sense to have the backup of the original career, and timing switching when an act runs its course is better than doing it brusquely, and having trouble returning if the 3rd act doesn’t pan out.

Conclusion

I think that’s enough for now, cause I promised myself no more mega articles. I’ll leave you with a meta point: “plans are useless, but planning is indispensable”. Frameworks and plans are cool, but they’ll rarely survive contact with reality. Having the discipline of planning however is the thing that will power your career journey regardless of what life throws at you. Hope you’ve enjoyed this foray, and check back soon for the 2nd part!