Mid-Level To Senior Engineer – Dev Leader Weekly 32

What’s In This Issue: Mid-Level To Senior Engineer

My next Dometrain course is available now! This course will be paired with a deal for my following course launching at the end of March which will be building on the basics of C#:

Getting Started: C# - Dometrain Course

If you enjoy my content, you’ll love premium membership access to my site! This includes:

Mid-Level to Senior Engineer – Principal Engineering Manager’s Perspective

As a software engineer, it is important to have a clear understanding of your career growth. Having a clear picture of your path to senior software engineer is critical to reaching the next level in your professional journey. The role of a senior software engineer opens up exciting opportunities for increased responsibilities, technical expertise, project management, and leadership.

I’m a Principle Software Engineering Manager at Microsoft, and I’ve been working as an engineering manager for over a decade now. I’ve been extremely fortunate to have conversations about this kind of thing with many awesome engineers. So in this article, we’ll explore the path to becoming a senior software engineer, focusing on building technical skills, project management expertise, and leadership abilities.

Remember: There is no “one way” and there’s nobody can guarantee you will get promoted with any exact steps… But I’ll give you my honest professional opinion about ways you can drive progress.

Architectural and Technical Expertise

The architectural and technical side of things will look different from team to team, and organization to organization. So this will be some general advice that you can tailor to your situation. And I get it — when it’s generalized it feels like it’s not applicable… but it’s impossible for me or anyone else on the Internet to tell you step-by-step what’s needed because your career advancement is personalized.

On the technical side of things though, here’s what I share with my team members:

  • Try to get an opportunity to design a new system or enhancements to an existing system that align with business objectives. This can be a difficult thing to get an opportunity to do depending on the team you’re on and the product space you’re in, but it can be a great opportunity.
  • You can start with a one-pager to ensure stakeholders are on the same page for what the existing challenges are and what the business objective is that you’re trying to address. This is important to do before deep-diving into solutions because if there isn’t initial alignment, it’ll make the rest of the work downstream more challenging.
  • Consider your audience! You’ll likely have more senior engineers reviewing your architecture or design document, but you’ll very likely have other roles and stakeholders involved. Being able to explain technical details to different audiences of different levels of technical understanding is important here

You’ll very likely be incorporating block diagrams and flow diagrams to illustrate how your design aims to meet the objective. With that said, you’ll want to be positioned to explain why that’s the case. What are the pros and cons of the technology choices you’re going with? How did those stack up against the alternatives? What were the different workflows and integrations you considered, and why didn’t they make the cut?

Being able to pitch your design in an understandable way is important, but at the end of the day, the team will be coming together to sign off on a design that want to move forward with. You help everyone when you can share context about alternatives, and you’ll want to keep in mind that the ultimate goal is not to have everyone accept your idea… the goal is to come up with a great design the team wants to move forward with. More often than not, it’s not what you suggested and it’s not what someone rebutted with — It’s a hybrid of different perspectives.

Project Management

While technical contributions are very important, another way that you can make a splash in your ability to deliver more value is by helping coordinate the efforts of others. This will involve looking at the strategy to tackle addressing large-scale challenges and/or delivering on business value and translating that work into something tactical that you can help delegate to others. And a necessary reminder here that, again, I’m not your manager and I don’t know your team dynamics — so you’ll want to make sure you’re set up for success to do this.

For me, I might identify some team members where I think they have a solid technical understanding of the area and there are perhaps some more junior engineers that they can pull in. This could even be a great opportunity cross-team, depending on the work that needs to get done. But I’ll communicate to the individual that I’d like to lead the project and the others involved so that there are clear expectations.

It’s not that this person becomes the super-project-loverlord and just sits back and orders people around — it’s a little bit more work and a little bit less luxurious than that. In fact, individuals in this position carry a lot more responsibility. Ultimately, that responsibility comes back to me as the manager of the team, but I’m empowering them to take charge of things like:

  • Splitting up work items to delegate across team members
  • Helping guide and unblock the more junior engineers on the team in the work they are doing
  • Leading communication and status updates for stakeholders
  • Raising awareness for blocking issues in the event we need to escalate to others

This is another focus area that’s not necessarily an easily-accessible opportunity. It requires understanding the skill level of the engineer and that they’re able to “stretch” their skill sets to be able to be successful in this. It’s a great showcase of technical skills, communication, and coordinating with others. If you want to understand this content in a different format, you can check out my video on mid-level to senior engineer here:

YouTube player

Informal Leadership and Mentoring

This is one of my personal favorites because I think it’s universally beneficial. I’m a firm believer that software is built better in teams (that’s why we have teams in the first place), and we can do better working together than any one of us in isolation. Being able to make those around you a little bit better at the expense of your own direct throughput often translates into greater overall impact, especially in the long run.

While I say this is my own belief, every team and organization that I’ve worked in has valued this as well. That doesn’t mean that you just stop making any individual contributions, pull up a chair beside the interns and junior engineers, and then code everything for them. It means that:

  • You’re helping to onboard the newer employees, making sure they can get up and running in your codebase effectively
  • Helping them understand your business domain and tech stack so that they can make meaningful contributions
  • Assisting with their problem-solving so they can learn which things the team values in decision-making processes
  • Unblocking them if they’re stuck and unsure how to make progress

Taking on some informal leadership can be very taxing for people because it takes time and it takes a different set of skills than many of us are used to focusing on. It often feels like you’re getting less done because you have less time for your own work items, and it can feel frustrating because your strong coding/technical skills don’t necessarily translate directly.

But with that said, helping others around you become more effective — whether it’s ramping up faster, getting unblocked more quickly, or problem-solving more effectively — is a huge win for the entire team. You can help drive an incredible amount of value by investing into those around you and making them become better software engineers.

Level-set Expectations with Your Manager!

I talk about this *all* of the time with one of my best friends and a former colleague on my podcast, but this is one of the most critical things to do in your working relationship with your manager. And I know that’s easier said than done for a lot of people for a few reasons:

  • It feels awkward to talk about career stuff with your manager. You feel like you’re stepping out of your boundaries to be able to ask if you’re on the right track, doing a good job, or even mentioning that you think you’re ready for a promotion.
  • You give status updates to your manager in your one on one, so when are you supposed to have the time for these conversations?
  • Your manager doesn’t really seem approachable, so there’s no way they want to talk about this.

I can’t speak for every engineering manager, but I can speak about my philosophy on managing engineering teams: As an engineering manager, literally one of my responsibilities in my role is to help you grow in your career. This is in addition to delivering on business value and ensuring you’re engaged to do the best work that you can in your role. But that means it is an expectation that I have of anyone in an engineering manager position that they are having clear conversations about career advancement with their employees.

And like I said — I can’t speak for all of us managers. But something I encourage you to do is the following:

  • Give your manager a heads up so they’re not surprised about the conversation. Something like “Hey in our next one on one, I’d like to talk about career progression. I’d like to make sure I understand your perspective on the important things I need to be focused on for being on track for promotion. It would be great to get some alignment so I can do my best work possible”
  • Now your manager can take some time to collect the relevant information to give you. They can prepare for a meaningful conversation.
  • When you sit down and talk with your manager, ask questions to get clarity. Understand that promotions aren’t a “check the box” one time thing, but about sustaining that you’re able to meet some expectations.

Make sure you ask about having these conversations periodically so you’re never left guessing if you’re on the right track.

What’s YOUR Next Step?

This is where we turn it back to you to take some action. Have you been having conversations with your manager to get alignment on the direction of your career? Are you in a position where you feel you have clarity on what needs to be your next focus and some work areas scoped out to help contribute to that?

If the answer to the above is no, then I’d suggest getting this part nailed down first. Invest the time into conversations with your manager about your career progression. You are in the driver’s seat of your career, and while I think every manager *should* be actively trying to help you drive progress, it won’t happen if you’re not being proactive. Have those conversations first.

Now that you have an understanding of what’s to be focused on — what’s holding you back from driving progress? Do you feel you don’t have an adequate project that’s aligned with your goals? Are you feeling some level of imposter syndrome and that’s holding you back? Are your technical skills, or perhaps interpersonal skills on the informal leadership & mentoring front not where you think they need to be? If you’d like some feedback, leave it in the comments or send me a message on social media — Let’s chat.

Only One Week Left!!

Did you enter to win the dotUltimate 1 year license giveaway? This draw will end on March 1st 2024. You earn the most entries by referring your friends to the draw:

Promo - JetBrains - dotUltimate License

Microsoft Abandons DotNet For Rust?! – Uncover The Truth

YouTube player

You probably saw the news… Microsoft is abandoning DotNet and C# in favor of Rust! Except that news is completely exaggerated and a misrepresentation of what’s actually happening in Substrate, O365, and M365 teams at Microsoft. Thanks to a Reddit thread, things got a bit out of control so I stepped in to discuss C++, Rust, and the usage of CSharp with our services.

I Pick *NEITHER* – Static Class Or Singleton In C#?

YouTube player

When faced with choosing between a static class or a singleton design pattern in CSharp, which way is the right way? Well, what if we didn’t have to pick between these two options? Can we do something better than a singleton in C# or a static class?

Testcontainers in ASP.NET Core – A Simplified Beginner’s Guide

Testcontainers in ASP.NET Core - Simplified Beginner's Guide

Use Testcontainers in ASP.NET Core testing to get better coverage! Learn how to simulate dependencies, test in parallel, and integrate with CI/CD tools!

IServiceCollection in C# – Simplified Beginner’s Guide For Dependency Injection

IServiceCollection in C# - Simplified Beginner's Guide For Dependency Injection

Learn about IServiceCollection in C# and dependency injection. See how Dependency Inversion, Single Responsibility, and Open/Closed Principles fit together!

C# for Beginners – 5 Simplified Concepts in C#

C# for Beginners - 5 Simplified Concepts in C#

Considering C# as you get started on your programming journey? This article is focused on C# for beginners, and I’ve included 5 concepts from C# with code!

Scrutor vs Autofac in C#: What You Need To Know

Scrutor vs Autofac in C# - What You Need To Know

Scrutor vs Autofac in C#! Which one comes out on top between these two solutions for dependency injection in dotnet? See how each are used with code examples!

As always, thanks so much for your support! I hope you enjoyed this issue, and I’ll see you next week.

​Nick “Dev Leader” Cosentino
[email protected]

Dev Leader YouTube
Follow on LinkedIn
Dev Leader Instagram

P.S. If you enjoyed this newsletter, consider sharing it with your fellow developers. Let’s grow our community together!

author avatar
Nick Cosentino Principal Software Engineering Manager
Principal Software Engineering Manager at Microsoft. Views are my own.