Actionable Advice For YOU From My Management Journey – Dev Leader Weekly 34

TL; DR:

  • Constructive criticism is hard to give — If you’re not getting it, ask for your biggest opportunities to improve.
  • Tech lead or Manager roles require different skill sets and more time working with people, not code.
  • Clarity around timelines and milestones can be very situational — don’t be afraid to ask for more details on due dates.
  • You need to be in the driver’s seat of your career, because certainly nobody else will do it for you.

What’s In This Issue: Applying Growth Mindset to Learning Rust


Actionable Advice for Software Engineers from My Management Journey

My goal with this article is to share with you how some of my experiences as an engineering manager can be applicable to you in your software engineering career. Not only applicable but transformed into actionable advice.

I’m a Principal Software Engineering Manager at Microsoft, and I’ve been in big tech for almost 4 years now. But prior to that, I was leading and managing teams at a startup-that-grew-up called Magnet Forensics. But my role at Magnet was unique.

For the first 8 years of my professional career, I was both managing teams and contributing to the code base as a software engineer. I got to ride both lines of the employee-manager relationship this entire time, and being completely fresh in my career… I learned a ton.

And I’m going to share with you some of my learnings that you can turn into actions for your career growth.

High Performers Still Need Coaching and Guidance

This was probably due to a combination of the lack of proper time I allocated to managing while still trying to code but also due to inexperience. I have been extremely fortunate through my entire career to have worked with amazing software engineers.

But what does that mean when it comes to giving feedback and constructive criticism?

“You’re doing great!” or “Just keep doing the things you’re doing!”

… These are total bullshit.

High performers still need coaching and mentoring. In fact, some may need MORE than other employees to ensure that they’re kept engaged, challenged, and not burning out. It’s just the “easy way out” for a manager to see good work being done and assume there’s no more value for the manager to add.

Actions For You:

  • Reflect on the feedback you’re getting. Make sure you’re getting SOME feedback at a minimum. If you find the feedback is limited, not clear, or not actionable then MAKE IT KNOWN.
  • Keep in mind that constructive criticism is hard to give — but it shouldn’t be an excuse to not get any. If you’re not getting any from your manager, you can frame things around your “biggest opportunities for improvement”. The positive reframing might make it easier for actionable focus areas from your manager.
  • Have you been in situations where you’ve been asked to give a peer constructive criticism, but you couldn’t think of anything because they’re doing well? Pause and remember that this is generally a challenging thing for people to do — but remember the benefits of being able to provide this kind of feedback are very valuable.

Properly Managing a Team Means No Time to Code

My role as a manager early on in my career had the expectation that I was coding while managing teams. Initially, this wasn’t carved in stone or anything, but since it was a startup it was mostly just a matter of trying to keep the product momentum.

What I’d do is end up focusing too much time coding for a couple of weeks, realize I was lagging on the people management, and do a big 180-degree pivot to focus on people. The challenge here was all about time management and truly I didn’t understand how much time I needed to be investing with the individuals on my team.

This is extremely common for engineers as individual contributors (IC’s) that transition into a management position. Even if the role or job description doesn’t mention anything about coding, they have a hard time stepping away from something they were good at. They don’t realize how much time needs to go into people.

Actions For You:

  • If you’re on a team of more than 5 or so people and your manager is still coding, then it’s likely they’re either working extra or they’re probably not spending as much time as they could/should be with employees. Use this as an opportunity to observe. If you notice this and you’re not having regular one on ones or not getting time for career conversations… take action to sync with your manager on this.
  • Are you thinking about becoming a tech lead? Or perhaps management seems interesting to you? Keep in mind that it will mean spending time doing other things outside of coding and that might make you feel like you’re not delivering as much value. Many people don’t realize the expectations and focuses of these roles are very different the more you introduce formal management.
  • If you’re joining different teams/organizations/companies and you see a manager who is coding or a manager who isn’t coding, keep in mind that managers may have different job requirements wherever you’re at. If they need to spend time coding as part of their role, make sure to get that dedicated one on one time in still.

Timelines and Milestones are not Micromanagement

I promised myself I would never be a micromanager. I want to make sure my team is as autonomous as they can be.

I learned that I can’t always be fully hands-off on time constraints. In fact, I have found that many junior members I have managed directly or mentored often need more concrete guidance. They benefit a great deal from setting milestones and having timelines.

Some of my more senior engineers — not so much. But this can still be very situational. My biggest thing to balance in this space is getting stakeholders information that they need, and giving my employees the right amount of attention on due dates and milestones.

Actions For You:

  • With the information I provided, consider if you’re getting adequate support around milestones and timelines. As for clarity if you’re not getting the details you need.
  • If you feel like you’re being micromanaged, it might be the side effect of your manager needing to get information for stakeholders. Perhaps you can ask if there’s a way you can take some of the lead with getting the stakeholders some of the information they need directly. As if you can put yourself in the driver’s seat for that visibility of work.

Not Everyone Knows They Need to Drive Their Career

Early on in my career when I figured out how to do a better job balancing time coding and managing people, I told myself that I didn’t want to be the manager that didn’t seem to care about people’s growth. I was able to see the negative impact of ignoring career growth because I was still very close with all of the ICs.

What took me longer to realize though, and this largely just due to needing more experience as a software engineering manager is that not everyone is proactive in their career growth. Many people take a back seat and passively wait for their careers to move forward, often being confused or disappointed as to why reality isn’t matching what they might hope.

I’ve been mentoring early-in-career engineers for around 3 years now at Microsoft as a volunteer position and this is something I remind them of constantly. You. Must. Be. In. The. Driver’s. Seat.

Actions For You:

  • Do you have questions about what your focus areas are for the next phase in your career progression? Take action and ask your manager for time to get clarity on this.
  • Are you confused about how the work you’re doing currently might align with your career progression? Is it having the right level of impact? Take action and ask your manager.
  • Your manager gave you some focus areas 6 months ago to focus on but you’re unsure if you’re meeting those expectations now. Time to take action and ask your manager for their input on progress on this. Go a step further and figure out how you can schedule time to sync on this in fewer than 6 months from now.

I’m Still Learning Every Day

I’m 12 years into managing software engineers now. 66% of that time was at a high-growth startup where I worked around the clock and still wrote code while managing people. The rest of that time has been at Microsoft, exploring how software engineers progress in these larger organizations. And I’m also still on my career journey — like all of you — trying to make advancements to the next level.

I’m always trying to learn. I’m always trying to understand how I can be a more impactful manager and how I can be a better help to my team. But I strongly believe that when you have more insights into the roles and responsibilities of managers, you can leverage that to have more meaningful conversations with them.

I get that for many people having more targeted purposeful conversations with their manager can be challenging, but that’s exactly why I constantly try to remind folks that many of the human skills we have are just as important, if not more important than some of the technical skills.


Getting Started: C# - Dometrain Course

2 EASIEST Ways to Run C# Benchmarks with BenchmarkDotNet

YouTube player

C# is a strongly-typed language, and if we want to convert between various types in our code, we’re often required to use explicit casting operators. This expresses that we want to go from one type to another very explicitly to readers of our code, and the compiler.

But what if we want to be able to convert between types without casting? We can leverage implicit operators in C# to do this — but we need to be aware of the pros and cons of doing so!

Convert ANY Of Your C# Types Without Casting Using Implicit Operators

YouTube player

C# is a strongly-typed language, and if we want to convert between various types in our code, we’re often required to use explicit casting operators. This expresses that we want to go from one type to another very explicitly to readers of our code, and the compiler.

But what if we want to be able to convert between types without casting? We can leverage implicit operators in C# to do this — but we need to be aware of the pros and cons of doing so!

Here’s How C# Attributes Make Reflection a Breeze!

YouTube player

Finding types in reflection can mean iterating through assemblies and looking for whatever matches your naming convention or some other heuristic. But what if we could find C# types using reflection in an easier way? What if we could use that same approach to find other members of those types as well? In this video, I’ll explain how we can use attributes in C# combined with reflection in order to find types and members easily.

How To Use Polly In C#: Easily Handle Faults And Retries

How To Use Polly In C#: Easily Handle Faults And Retries

Learn how to use Polly in C# to handle faults and retries with ease! Check these 3 code examples showcasing different use cases of Polly in C#!

Implicit Operators in C#: How To Simplify Type Conversions

Implicit Operators in C# - How To Simplify Type Conversions

Learn how to perform implicit conversions by using implicit operators in C#. This is a helpful feature that can enhance readability when done with care.

How to Use BenchmarkDotNet: 6 Simple Performance-Boosting Tips to Get Started

How to Use BenchmarkDotNet: 6 Simple Performance-Boosting Tips to Get Started

Learn how to use BenchmarkDotNet to effectively create and run benchmarks on your C# code. Dig into where you have opportunities to optimize your C# code!

Extract Method Refactoring Technique in C# – What You Need To Know

Extract Method Refactoring Technique in C# - What You Need To Know

See how to use the Extract Method refactoring technique to get started on your journey to being more skilled at refactoring! Check out this C# code example!

async void Methods In C# – The Dangers That You Need to Know

async void Methods In C# - The Dangers That You Need to Know

Learn why async void methods in C# can be dangerous with clear code examples. A perfect for beginner software engineers wanting to understand the risks.

The Facade Design Pattern in C#: How to Simplify Complex Subsystems

The Facade Design Pattern in C#: How to Simplify Complex Subsystems

Learn about the Facade design pattern in C# and how it simplifies complex subsystems. Check out these 4 code examples to see how the facade pattern in C# works!


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]

Socials:
Blog
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.