The above question was sent to me the other day from a former colleague and friend. He was preparing a presentation for heads of product management and product development, and not being an engineering manager himself he asked for input on the subject of “Essence of of being a successful Development Manager”
I usually refer to a development manager as an engineering manager, as developing software is much more than simply developing the software itself. When you develop/design software today, you need to take all kind of operational aspects into account (http://bit.ly/fW0OvT).
Anyway, so what’s required to be a successful engineering manager. Though question. And maybe not. One thing I’ve realized after working in software engineering for more than 20+ years (wow getting old), and have had a number of different managers, is that the single most important and an absolutely unquestionable qualification for any engineering manager is that they have a background in software engineering. That they actually have written code, tried to find a subtle bug in a multi-threaded application, that they’ve been through the process of reading thousands of lines of code to locate a memory leak (not using profilers). Have dealt with double-pointers (Macintosh handlers), cried at night because a data structure wouldn’t align at word-boundary – all that nitty-gritty stuff that makes us all sweat. I don’t purposely disqualify people that haven’t developed in any low-level programming languages like C and Assembler; however, I strongly believe that even if you’re of the automatic GC generation it still worth your while to understand and gain experience with fundamental aspects of the computer, like how memory operates.
Why is this so important, that an engineering manager actually knows how to write software? For same reasons that a lead of a bridge construction team is a bridge construction engineer, how else can he make critical decisions? Actually how can anyone be trusted to make decisions about any professional field, unless they got the t-shirt? How can any non-software engineer provide any assistance, help or guidance to the team unless he or she knows what it’s all about? I don’t know, and based on personal experience, they can’t!
There’s more to having software engineers running development teams than just being able to facilitate the process of developing the software. It’s also about understanding where in the process the team is, how far we are, and more important (sometimes) how much are we’re off course. Only people with engineering background can read another engineer, can understand where they are, and truly appreciate the work being done. And BTW engineers don’t really trust other professions, that’s just a fact. So lot’s of good reasons to why the single most important qualification of any engineering manager is that the manager in fact him- or herself is an engineer.
So a good engineering manager knows his stuff, knows how to write code, know how to design architecture, knows how to make a reasonable data model and knows how to execute. He can ask the right questions and provide the right technical answers and guidelines to his team, and he’s capable of writing code himself. Actually, any first level engineering manager should spend 25% of their time writing code. Way way better for the project than spending 25% of your time making MS Project plans, that doesn’t tell you anything anyway. Being in the code on a daily basis will tell you precisely where the project is and where it’s heading. If you’re too remote from the code you lose oversight! The project starts slipping, you’ll have delays and the team suffers, the company suffers, customers suffers and the engineering manager suffers – because he’s not a “real” engineering manager.
Able to say a resounding NO
This is actually very important qualification as well. We as engineers don’t like to say the “NO – it cannot be done”. Why is this? Personally I find it very hard to say NO. I feel that if I can’t do it, I somehow failed. It’s like a challenge, and engineers/nerds/geeks loves challenges, hence anything/everything is possible. And it probably is; however, not on a schedule.
So what most typically happens is that we say something like: “Well, it’s probably possible if we add additional resources and delay the deadline”. Nothing wrong with that, right? We don’t really say NO, and we take on the challenge. Wrong, it’s dead wrong. Reason being that the receiving party of your kind-of-NO isn’t an engineer, probably someone in the business, and here’s what they pick-up from your kind-of-NO statement: “Well, it’s ..noise.. possible ..more noise…”. See these people only pick up what the want to hear, everything else gets lost in the translation from engineering-lease to sales-lease.
If you’ve come to the conclusion that it’s impossible within the given framework (resources and time) then, to my knowledge, there’s only one approach that works – and that is to spell it out loud and clearly by starting your answer with the NO, and whatever comes after shouldn’t in any form or shape take the power out of the NO. The receiving party will most likely eye-ball you for a while, and then start the actual negotiation on how to accomplish it. But I tell, you’ll never get to that part if you don’t start out saying NO.
Actually, NO is probably the single most important weapon you have as an engineering manager when there’s a risk of feature creep.
The third, IMHO, important qualification is the ability to understand what the business is asking for, what’re the requirements, being able to speak with marketing, sales and product management to gather the necessary input needed to be able to understand what’s expected to be developed. Take that knowledge and turn around and turn it into something engineers understand and can build product based on.
This one, actually ties nicely in with the first qualification, as it requires deep technical understanding to discuss functional requirement with the field, and at the same time being able to envision how the product or a feature eventually could end up being coded. Also, allow the engineering manager to get a sense for what’s possible and in what time frame, without always have to disturb the development team asking for help.
#programming #software #management
4 thoughts on “Essence of being a successful Development Manager?”
Thank you so much for writing this post. If you don’t mind I’d like to ask your advice. I recently received my MSE, but do not feel confident in the field. My background is in business, and I agree that in order to do any job well you need to know it from the ground up. How can a project manager schedule and give direction to their team if they don’t really understand all the nuances of their work. To that end I have been studying programming (specifically Java). I would like any advice, big or small, that you can share with me to help me to gain a firmer understanding of how I should go about it. I also believe that this is an industry that you must continuously work to keep abreast of changes/new technologies.
Thanks so much,
Thanks for reading my blog and your feedback. If I was you I would start applying for coding jobs. Try to find something where you eventually can make use of your business background. You have a big advantage over others that doesn’t have a background/degree in e.g. business, as you have gathered domain knowledge about a specific field. The advantage is that you can apply your software engineering skills to a specific domain. Most developers study computer science, which is a little like studying math for the sake of the math. Whereas if you do math at a business college it’s more applied math. Same goes for you.
Spend the next 8-10 years doing coding and try to acquire as much knowledge on different languages you can, don’t get stuck in one language. Try at least to learn one new language every year. You don’t need to master it, it’s simply a matter of getting a taste for different programming languages. What you’ll find over time is that you’ll see constructs that’s part of one language that you can apply in another language.
If you’re goal is to be an engineering manager, then don’t rush it. It won’t do you any good starting to read MBA or similar business/management related stuff. It won’t make you a great engineering manager. Instead, you’ll end up being one of those managers whose primary objective in life is to ask you for time sheets! No real engineer respects that kind of managers. BTW if you ever end up working for a manager that believes it makes perfectly sense to ask for time sheets (obviously if you have to bill the customer it makes sense), find yourself a new gig – you’ll learn absolutely nothing from working for such a guy. Most often they can’t help you grow technically, and that’s what you want.
Actually, if you end up in a job where the first level manager (the first manager in the chain of command) says stuff like: “don’t bother me with the details”, or “just give me the 10,000 foot view” – quit and get a new gig, because the project he’s responsible for is doomed. If anyone at VP level and up says that, it’s fine. But you don’t want to hear that from any manager, senior manager, director or senior director. They should know what you’re building, and they should care about the details. At least if it’s a real software company – and that’s what you want to work for – a real software company.
Thanks so much for your advice. I actually have a Masters in Software Engineering, so I understand the process, but feel that I need the nuts and bolts. I have worked as a manager for non-software companies and feel that the best thing I can ever do as a manager is to understand what my team is doing. As a manager you are the one who needs to understand fully, so when they have a question, they know they can come to you.
So I think it’s best to start off with ground floor, which sounds like coding, and then try and find other aspects of the development cycle as well as in the life cycle. Originally I thought I would be good as a requirements engineer, as I have a lot of experience in customer relationship management, but think in order to be of any value to the team I need to be a decent coder. I had heard from other students that it was good to have mastered one language, as it will give you a foundation. But I do see a value in learning new languages. I am nervous to apply for the coding jobs, so I think I may contribute to some open source projects initially.
Thanks so much for all your help,
Love this post! What I would like to add one more attribute of a good manager – the ability to build and maintain a good team. This leadership quality is not unique to software development. A leader is there to inspire, to serve, to guide his /her team to achieve the team’s objectives. Software developers, particularly the good ones, are unique group of individuals, it is up to the manager to bring the best of out of them; this requires understanding, respect, and a lot of humility and humour.