March 19th, 2020
Today I would like to cover the role and responsibilities of the person assigned to manage a software development team. The development manager, software development manager, engineering manager, development director are some typical titles. From now on, I will only use the term development manager, and they manage the team responsible for delivering software.
In this article, I will cover the core responsibilities of the development manager. I define these as things that the development manager must do to ensure the delivery of quality software that provides the highest value. I need to emphasise the part highest business value of this sentence. Every day we are not spending on delivering business value is a day wasted. That business is falling behind its competitors or unable to provide increased service to its customers. Either way, this spells trouble for the company and the people developing its software.
I like to think of the development manager as being similar to a sports team coach/manager. As a rule, they both need to ensure their teams are playing well and delivering results. They both cannot (or shouldn't) play the game for the team; they need to rely on their players. As a result, they are only as good as the members of their team. They need to guide and mentor their team, imbuing the team with their experience and expertise to avoid pitfalls on their journey.
At a high level, the development manager needs to:
Of course, there is more detail hidden in each of these areas, which we will dig into more as we move through the article, so let's get stuck into the detail.
It is critical for the development manager to fully understand their teams' goals so they can ensure they have the right people, structure, and processes for the job. The structure of the team needs to align with the team's objectives. For instance, a team established to develop a new banking system will be very different than one formed to maintain the in-house timesheet system.
Understanding the objectives of the team will inform many different factors, including:
Back to our earlier example, the team is developing the new banking system. It would need architects (solution and technical), technical leads, specialised front and back end developers, an army of business analysts (BAs), and a testing team more substantial than the average size football team. While a team is maintaining the company's timesheet system, it would only require a small group containing a BA, a couple of developers, and probably a single tester. The differences in these teams come down to the requirements (functional / non-functional) they need to fulfil.
As a development manager, I like to understand the system's health early on so I can plan out any remediation work before I commit to feature releases. Once you know all the problems, you can allocate time to fix them in your future sprints. Sometimes you may find the issue is so bad that you may need to recommend starting again from scratch. A rewrite will affect your ability to deliver features. Reinforcing why it is essential to understand any issues and flag these to your key stakeholders before committing to a feature release schedule.
Ways to diagnose system health include:
For this article, we will cover the team and methodology required for a small squad maintaining an in-house system in reasonable shape. Now we have a clear understanding of the team's objectives and the state of the existing system; we can start to plan out the team and the processes we need to get the job done.
Roles vs. People.
It is important to note that there is not a one to one mapping for roles to people. In small teams, people may carry out multiple functions. A good example here would be a test lead who also doubles as the release manager. In bigger squad's, there may be numerous people performing the same role, e.g. a team with many developers or business analysts. In a perfect world, everyone would get to wear just one hat. However, we don't live in an ideal world, and it is ok for people to have multiple roles as long as we balance out this in our expectations for our delivery schedule.
Development team roles
So my take on the roles required for a small development team is below. The list is not exhaustive; however, it provides enough expertise to deliver quality software.
One fundamental responsibility for the development manager is to ensure the team uses an appropriate development methodology. This article won't spend a lot of time talking about methodologies. However, I wanted to make the point that it is essential to ensure a formal methodology defined for the team, and they follow it. Typically the software industry is moving more towards the agile space these days. However, a small team can start with a simple waterfall methodology if they do not have experience in following any formal development methods.
Tools and tooling
It is critically important that, like any professional, your development team has the right tools. In our case, this means PC' s/Laptop's at least two 22inch monitors and a decent keyboard/mouse. An ergonomic chair and a quiet workspace are also advantageous. As the team's manager, it is up to you to ensure your team has everything they need for their job.
So what is this tooling thing, you ask? In this case, tooling refers to the software tools used to build, compile, deploy, and manage the software development process. Depending on the choice of software, the language will mostly select compilers/code editors and building pipeline tools. There are a couple of essential pieces of software the development manager needs to ensure is being used.
Issue tracking/development management
This software tracks your development work items, bugs, and can handle your release planning. Examples of this software include JIRA, Azure Dev Ops. These software tools enable you to implement specific methodologies, define user stories/test cases, and much more. Without this tool, your development management becomes very difficult.
The other important piece that a development manager needs to ensure is in place is some software to manage your document repository. Examples of these tools include Confluence and Sharepoint. Creating, maintaining, and sharing documentation is a crucial part of developing software. Software development creates reams of documentation that needs appropriate review, filing and classification.
If you have a pre-existing team, you will need to analyse their strengths and opportunities for development to understand better where they fit into your ideal structure. It is critically important that the existing teams be reviewed and assessed early on. You will need to make changes quickly if you find behavioural or capability issues.
Teams that develop software will have many different stakeholders who will want to guide and shape the software's direction, these include:
Depending on the organisation, there may be different stakeholders present. It is the role of the development manager to know who are the key stakeholders, develop good working relations with these folks, and understand their needs and drivers.
Teams that develop software need input from their users around what to develop; this goes without saying. Development managers don't typically get too involved with requirements gathering, as this is something that the business analysts would usually handle. However, the development manager needs clarity the delivery pipeline.
Why is this important? Having visibility on the delivery pipeline allows, the development manager to validate whether the requirements are realistic or whether there are other alternatives to consider. It also allows the development manager to get a good feeling for the progress of the development work, whether it is on track or running behind, enabling the forecast of completion and release dates. These forecasts are, based on team progress and other commitments made during the development cycle. It is ineffective for development managers to commit to delivery dates without having the buy-in from the team.
Development managers need to ensure that the team is delivering on what they have committed to during the project. In bigger teams, there will be several project/delivery managers working to create and refine the project schedule. It is the job of the development manager to ensure the overall delivery of the team's delivery schedule. You will have help, however, if the team self regulates by the use of various agile techniques. These include sprint planning (commitments to delivery and review of past sprint delivery), retro's (what went well and not so well), and the showcase (showing off the teams achievements).
The last job of a development manager is the day to day management of the team---HR-related stuff around leave approvals, hiring, firing, etc. The development manager will also be distributing communications from the broader company and keeping their team informed of things that they need to know.
Finally, a good development manager will also hold regular one on one meeting with their team members. These ensure they are tracking ok and provide an opportunity for them to raise any questions or concerns in a regular forum. These are a great tool to manage status and feedback discussions.
Conclusion I hope I have provided a good introduction to the role and responsibility of a development manager. Its a many varied role and can be different from company to company or indeed vary from team to team in the same company.
Thanks for reading!