5 Ways to Stay Technical as an Engineering Manager

How to remain relevant after hanging up your mechanical keyboard

Mark Shapiro
Geek Culture
9 min readJul 26, 2021

--

My journey into management, you could say, was unintended. I had a lot of experience building Java services, performance tuning, and building platforms to scale to millions of users. But when I got that first promotion to people manager many years ago it felt like:

“Congratulations, you’re a fantastic developer. Because of that, we’d like you to do something completely different from what got you here! Oh, and by the way, you’ll need to develop some entirely different skill sets AND you’re responsible for what happens with other people’s careers. Training? There’s no better way to learn than by doing! Good luck! ”

At first I felt conflicted given the things that were now required in my new management role. Balancing deadlines vs building systems entirely as we’d like, more politics and less creating things. As Homer Simpson once said “I’ve become everything I ever hated.” After some adjustment, that stance softened. I realized I may no longer be a developer writing code, but I was helping others solve problems, removing impediments, and helping them think about the bigger picture of our work. This matters. And I certainly didn’t hate myself as I joked above, but it was perhaps akin to joining the Dark Side. You do some of the same things, but have a different viewpoint about end results. One lingering concern was the fear that the longer I was away from code, the harder it would be to keep up with my team and provide the same levels of guidance that they needed to do to achieve their desired outcomes.

Why should managers care about maintaining technical abilities?

That was 8 years ago and a lot has changed in my career and approach to management since then which has helped me embrace my role and share that excitement with others. For those of you who follow me on LinkedIn, you may know I share a lot of articles and posts about soft skills and competencies which are important in your management career (things that help you be a great leader, not just a manager). However, I also feel it’s important to keep up on your technical skills, if only at a high level. Be familiar with what is going on in the world of software development, even if you’re not an active participant from 9–5. I find this is important for a number of reasons:

  • Be able to better communicate with your team(s) and understand the work they’re doing.
  • Allow you to actively participate and offer suggestions during both the design phase and on incident calls.
  • Stay up to date on new technologies, patterns and offerings which helps to combat Imposter Syndrome in that you feel more knowledgeable.
  • Helps you keep learning in general and can be fun!

There are many things you can do to keep up those technical chops, build stronger relationships with your team, and maybe even have some fun along the way. I’m going to share some of my recommendations here to keep those skills sharp, and why they’re relevant.

How can Managers Keep their Technical Skills Current?

1. Learn a new language

Most of my professional career as a developer was spent writing Java code. Today’s Java apps are much different than the monolithic, license-based applications I started on back in the day, and I’m enjoying expanding my horizons on some newer (to me) language options.

Personally, I’ve been doing a lot of development in NodeJS for my side projects. JavaScript is certainly not a new language, but I just find it… fun! I also enjoy having native JSON support instead of having to build objects and marshallers with annotations. But whatever you pick, try something new, you may find it more enjoyable! Python has become hugely popular in recent years, due to its ease of use in the cloud and in data science/machine learning. Go is relatively new and has been gaining a lot of traction for its simplicity and lightweight design for performance. Side note, for me, Go feels like it was built by a C dev who really likes Node. I hadn’t used pointers since high school, but at least Go protects you from accessing the wrong memory and changing your desktop icons on accident.

From a professional standpoint, not all languages are created equal. You may have a harder time finding a job with Rust than say C#, Java or Python but it’s always good to learn how to use the right language for the right use case. When I joined Capital One in 2011, it was mostly a Java shop. Today, we use a wide mix of languages including Java, Python, Go, NodeJS and more. Standardizing across this core set of languages has allowed us to grow our (internal) open source community to share libraries, SDKs and frameworks across teams to avoid duplication of efforts.

To see how language popularity has changed over time, and how this might impact what you should learn, check out this link:

https://statisticsanddata.org/data/the-most-popular-programming-languages-1965-2021/

2. Check out new programming concepts

Aside from just new languages, there are a lot of concepts and patterns that continue to evolve and change the face of development. As I mentioned, Java development alone has changed a lot since I started my career. I’ve used frameworks from Applets, Struts, Spring, Spring MVC, SpringBoot and more to build applications, each looking to improve on their predecessor.

As I’ve switched to Node, something I’ve been trying to practice more is Functional Programming (FP). In my “Java days” we had Object-Oriented (OOP) pounded into our head and I found I would often write my early JS apps in the same manner. I’m not trying to imply OOP is bad or that FP solves all of the world’s problems, but it does allow you to approach algorithms differently, and (in my opinion) fits nicely with some of the cloud-based principles of creating small, discrete pieces of code to do small jobs well.

The other nice thing about concepts (vs language) is that they span across many of the languages we’ve been talking about. For example, with recent versions of Java (9+), FP has become much easier to write with lambdas and streams. A few years back I played a fun game in a meeting called “Is this Java or JavaScript?” As time goes on, it’s often harder and harder to tell the difference with some of the simple options now available.

Comparing Java vs Javascript functional programming

Thank you Jesse Warden for being my FP advocate. You can read more about Functional Programming here: https://qvault.io/clean-code/benefits-of-functional-programming/

3. Open Source

This one is pretty straightforward. The popularity of open source software, tools, frameworks and everything in between has skyrocketed in recent years. If you’re not using it now, you’re probably doing it wrong. My point with this bullet is more about knowing when and how to leverage open source. Any piece of code you write is a piece of code that will need to be maintained. If there’s a community that has built something that does what you need, by all means, take advantage of it! For instance, a great example is an encryption library. That’s a complicated algorithm, I’d rather leverage a standard package to do it for me than try to figure it out myself. Save your energy on implementing what is needed for your business or use-case. Recently, I leveraged the Serverless Framework to simplify my AWS deployments and configuration. No need to spend a lot of time writing error-prone CFTs and scripts!

This being said, you should also have an understanding of what you’re adding to your code base by using open source. Systems like NPM make it extremely easy to add third party libraries directly into your code. But have you considered the potential side effects of bloat, security concerns and unwanted dependencies if you add in the wrong one?

A great (and extreme) example of this happened a few years ago when about ten lines of code broke a large portion of the internet. Those ten lines did some very simple logic (that probably didn’t warrant an entire library) but caused a lot of unexpected problems because people didn’t know what they were adding to their code base. The internet is great to crowdsource, just be wary to not trust everything you read online.

Another option is not just to use an Open Source library is to contribute to Open Source as well. This is a great opportunity to leverage opportunity #1 (Learn a New Language) as well as a place to familiarize yourself with the functionality of the language or add a new feature that might be useful to you!

4. Learn about Cloud Services/SaaS

Similar to our open source discussion above, this section is also about learning how to work smarter, not harder. While open source lets you integrate code into your app to save time, there are also cases to leverage entire managed services to do the work for you. It feels like AWS (and other providers) are adding a new service to their catalogue every day, and the fewer things you need to write yourself, the less overhead you have. You could put your app on an EC2 instance, but why do that when you could use an ECS cluster? But why do that when you can have Kubernetes control your infrastructure? But why do that when EKS can manage everything for you and you just deploy containers? You get the idea.

There’s no need to build your own solution, if an external service can already do what you need. You can use Contentful for CMS or LiveChat for customer service integration to your agents. These services may be able to do it cheaper in the long run and has an entire company dedicated to adding features vs just your team. In addition their offerings may increase over time and you’ll already be integrated.

A recent example of this for me was leveraging AWS Athena. As part of a recent side project, I was storing data in S3 as it’s much cheaper than creating a database. However, I wanted to be able to see what I was storing and search information across multiple files. Like most services within AWS, it’s pay as you go with a free tier so it’s a very affordable option compared to RDS. I was able to map my S3 objects into a table and write SQL against it to find exactly the data I wanted to see. This worked perfectly for my analytical needs, and I actually need to go back to my application and leverage the Amazon SDK to make my application use this feature instead of reading from S3 and manually doing some calculations.

5. Get involved in code reviews

Code reviews are a great way to leverage others to increase your knowledge, and provide an interactive forum for discussion. There are different approaches you can leverage here, but actively participating in reviews for your team(s) will help you understand the systems your engineers support and help you understand why things have been done a certain way. (Similarly, pair programming is a great way to work together and learn about the code as well.)

Code reviews can be tough sometimes as it can feel like judgement on the engineer. In an effort to increase psychological safety, I recently gathered my teams together in a session to allow them to review my code and suggest improvements. Doing it in this manner provided a safe learning environment where no one felt attacked (except maybe me heh) and allowed my junior and senior developers to provide input. Along with helping me improve (I learned a lot of new techniques in JavaScript), it also created an environment where other engineers could learn something new and have open discussions about best practices. And it never hurts to be able to critique your boss in a safe place!

I will admit, it also felt good afterwards to hear one of the more senior members of the team comment “Damn, that code was actually pretty well done” afterwards.

Don’t Forget Where You Came From

Most likely you got to your manager position because you were a successful developer, I know I’m still an engineer at heart. I love problem solving and having a great white boarding/design session for a new application/feature/whatever. In addition, any job description you look at for a management position in the software industry expects technical experience, even if you’re no longer on the front lines writing code. This means that the skills you used as an engineer are still relevant and valuable. You shouldn’t ignore them, even if you feel you’re no longer an active developer.

Keeping up with your engineering skills will help you do your job better, as well as potentially help your team be more successful. Ignoring the need to stay sharp and learn may cause you to fall behind. As I joked about myself at the start, the next manager behind you is likely someone who came from the development ranks. They’re already familiar with all of the above themes and are ready to take your place if you fall behind!

This is certainly not a fully inclusive list, but a starting point for you in your management career. If you’re able to execute these 5 items (or any others), it will allow you to connect more with your team, understand how the industry is continuously changing, and be more prepared for your next job opportunity. Whatever you do, your technical skills made you successful at one point, you will certainly need to continue to add new skills to your toolkit, but never forget your roots and what got you here.

--

--