Skip to main content

The Role of Management in Software Development

Over the past 13 years I've worked as a software developer, team leader, and manager at seven different organizations. Each was different in size, industry, and organizational structure. I'd like to think that at each job I've learned from what they did well, and possibly even more so from what was done poorly. While software development is not a new profession, compared to that of others it's still in it's infancy. While there are many different areas that one could focus on, I think one of the more interesting (to me at least) is what the role of a manager in the software field should be.

Let me start off by setting a few things straight. In some organizations, especially ones in smaller companies, a manager may be involved in software development. However, I don't consider that person to be a true manager. The more appropriate term might be lead developer. If a manager is involved in software development, but that is not the focus of his or her role, then one has to question why they are developing software. Simply put, there's too much new technology to learn to be able to be a great software developer when that's not the focus of the job. Alternatively if focus of that individual's role is in fact software development, then I don't think that person is a true manager. Again, the title of team lead, or lead developer, would seem to be more appropriate.

With the above clarification in mind, I'd like to point out what I consider to be the key objectives that a manager of software development should focus on. This post assumes that the team is already producing quality solutions, using established methodologies, and in general doesn't haven't anything majorly wrong with it. (I consider that to be the "easy" part of creating a software team, and there's already a lot of published information on how to make that possible.)
  • Communicate the value of the group to the rest of the organization. Unfortunately I've been in some environments where the team does great work, but the business simply does not understand the value that the team brings to the company. All they see is a group with highly paid employees, and have the goal of reducing the size of the group to save money. The reality is that none of us should expect nontechnical people to understand what a software development group does. It's the managers role to ensure that the upper management understands the value that is being provided. There are many possible techniques to use here, from showcasing software, to reporting metrics on increased efficiencies gained. Really the important thing is finding out what will work in the organization, and making sure that the message is delivered. In my view this is perhaps the most important part of managing a team. By properly communicating the team's value, the organization will be more willing to invest back into the team.
  • Establish a vision. What is it that you want the team to do? Hopefully it's more then just maintaining some old software systems written in COBOL. Define a vision, possibly using a road map as a simple tool to communicate this out. The team should be able to best self determine their day to day work. However, they often won't know what the goal is for the next month or the next quarter. Of course this should be something flexible that will often change over time, but it's good for the team to know where you are headed and why. It certainly helps the team, and knowing the "why" also helps with team motivation.
  • Encourage learning. No matter where you work, there will almost always be something that someone considers urgent and wants its as soon as possible. Of course everyone wants to produce quality work and deliver things on time. However, unless you want your team to be quickly behind the times, you need to provide the team time to learn newer technologies and also explore new ideas. Technical debt is a subject worth of it's own blog posting (or perhaps a it's own book) but the value of keeping your employees up to date should be obvious. Equally as important is that you want people to stay motivated and look forward to their day of work. Some of the best ideas don't come from the top down. Allowing your employees to be creative will often net unexpected results.
  • Help foster an environment that focuses on collaboration, teamwork, and communication. This should almost go without saying, but unfortunately I've been in organizations where they consider these things to be a waste of time. I can just see those managers thinking "We don't have time for all this talking; we need to get things done!" Of course it's rather important that everyone on the team knows what's going on. While days of heads down coding may make managers feel better that work is being completed, at the end of the day a lot of time can be lost when not everyone has the same vision or goal for a project. Something as simple as basic UI inconsistencies can make a piece of software look unprofessional. Even worse, if each individual engineers' pieces that don't fit together properly you end up with buggy or non-working software. Believe me, I've seen this happen many times and the time saved by not communicating is lost in trying to fix all of the problems with the software.
  • Focus on quality. Again, this should be another no-brainer. However, too many times I've seen some predetermined date on a calendar dictate when something needed to get done. (Of course if you're using proper software development methodologies it will definitely help mitigate those types of issues.) Management often will cave in to these pressures, and throw quality out the window to meet these predetermined dates. As was mentioned in my previous point, this is never a good idea. Simply put sometimes the manager of the software team needs to grow a backbone and push back on the business. Offer to cut features, ask for more time, or as a last resort even ask for additional resources. For some reason people tend to think software is a magical thing that can get done quicker, if the team only tried harder. But those same people would understand if they asked you to build them a bridge and you told them that in the time allowed you could only build them an unsafe bridge that was liable to collapse at any moment. Perhaps using that analogy might help your case.By all means don't give in to those pressures.
With that all said and done, it doesn't sound like that much for a manager to do on a day to day basis. You'll noticed I've left out anything about telling people how to do their job. A good team can sort that out on their own. (If not, you've assembled the wrong team.) The important thing is that a manager isn't just another worker bee that wears a tie or someone that cracks a whip. Unfortunately in my experience the role of a manager if often not properly handled. (I've had some great bosses too.)  At the end of the day I was much happier, productive, and produced better work when I had a good manager. Let your employees do the work; after all that's what you've hired them for. Trust their judgement, rely on their technical expertise, and create an environment for them to grow and thrive in.

Comments

Tony Rockwell said…
Great topic. You make valid points that seem taboo discussion items in the corporate world. I hope some of those in the position to change the way things work in their organization read this post & adjust their environment for success.
Anonymous said…
While the first point's value is inversely proportional to the relative technical level of the company, it can't be overstated. Organizational buy-in is critical, especially when it comes to the last point.

Without support for changing a project's time/cost/scope, it's easy to end up with a terrible product no one wants. I'll paraphrase one of Shigeru Miyamoto's (creator of Mario and other Nintendo franchises) quotes: "A good game can be late once, but a bad game is bad forever."

Your fourth point on teamwork building seems a bit vague. Is this intentional, because it's hard to lock down what will work from team to team?
Attila Buturla said…
Hi Steve,

Someone how I missed your comment until just now. I agree with your first point. If for instance you work for a software company, hopefully they understand the value and importance that a software development groups brings to the company. Having said that I have worked for large company that produced a software platform for financial advisers. Unfortunately they saw them selves as a financial company, and not a software company. At the end of the day people paid to use their platform, but the business was run primarily by people with little understanding of software.

In regards to your second point, yes, creating a strong team could be the subject of it's own blog posting. Having said that, some places where I worked saw things such as pair programming, weekly team meetings, and even communication in general as a waste of time. Obviously you're not going to create a strong team environment that way.

Popular posts from this blog

Value and Quality over Schedules

According to a study by CEB Research, 70% of software projects are delivered on time, but only on 38% meet stakeholder's expectations. In most cases the people that use your software will not even be aware of internal project deadlines. Case in point, think of all of the software the you use everyday. You are rarely aware of what the due date was. However, what you do notice is how well the software does it's job. It's it's of low quality, you'll very likely notice right away. Even if it appears to be of high quality, if it doesn't provide any major value to you, chances are you still stop using it. With that in mind, then why do many software projects today have a set scope and a hard due date? When building software for a customer, it's only natural for them to what to know what exactly they are going to get and what is will cost them. That is a very reasonable thing to want to know. Even when developing software internally, there are often similar expe

The Retrospective From Hell

Over the last 17 years of my career I'd like to think that I've learned a lot. I've learned from positive role models, from experience of what works well, by studying my craft, and from my own trials and tribulations. However, I believe the lessons that I have learned that had the biggest impact is learning from failures. One such failure occurred at a previous employer. By telling the story of a past failure, we can reflect and see what can be learned from it. No names will be mentioned, no embellishment or poetic license will be will used. As a matter of fact, I will make every attempt to be objective and accurate as possible. The truth of the matter the story doesn't need it; it speaks for itself. Some time ago I worked for a company that, among other things, had a software product. There was a small team of software developers, and someone that acted as the manager of the team. I was brought on board, as a software engineer, to help with the software product as

Let's Get Moving With Software Development!

Recently I was reading a discussion on Twitter about software projects, and it reminded me of something. Many years ago I had a conversation with my dad about moving. After just having moved, he wasn't too pleased with the moving experience. He mentioned that there was essentially two models that movers operated under. The first was you paid a fixed price for the move. I don't remember the exact details, but the movers quoted a price most likely along the lines the square footage of the house, or some similar metric. The other model, was simply to pay the movers for their time. If it took them 20 hours to complete the move, you paid for those 20 hours. Now the catch was, as he described it, if you paid for a fixed price the movers didn't really put a lot of care into the move. They simply wanted to get the job done as quickly as possible. I seem to recall that if they broke something, they would reimburse you. However, that wasn't a pain free process. More importantl