The management challenges of those entrusted with a team, project, or entire department of hundreds of software/systems developers differ significantly from those of other disciplines. I have dedicated my career to understanding and applying the specific techniques of development management to create successful outcomes. I have a long-held belief:
The software manager need not be like the clueless, pointy-head manager portrayed in Dilbert, but can be someone who makes a positive difference in the lives of both developers and stakeholders.
My role as a software management consultant is to help you sort through these complexities and, drawing from a wide range of techniques from development and adjacent disciplines, tailor your management solution, including:
- Identifying appropriate organization goals and the associated measurement framework
- Implementing a risk-aware investment strategy that facilitates the right conversations with stakeholders
- Creating an optimal organization structure to take the friction out of team communications
- Determining decision rights and authorities to streamline operations
Development Managerial Challenges
Software and system development is different from other kinds of enterprise activities due to several factors:
- Wide range of uncertainties
Software and systems work falls into three categories
- Bug fixes and small changes
- New features to existing applications, platforms, or systems
- First version of an application, platform, or systems (sometimes called a greenfield project)
These efforts differ in the associated amount of uncertainty and required learning. Category 1 efforts generally have clear requirements and well-understood code. A competent team can be expected to predict the level of effort with certainty. From an operational perspective, the key concerns are throughput and efficiency.
Predicting category 2 efforts is more problematic. The requirements for the new feature may be vague or poorly specified. The code to implement the feature may require some trial and error. Even a highly competent team will be unable to predict the level of effort needed with certainty (this should be interpreted as advocating a waterfall method). In this case, the management has a combination of category 1 and 3 concerns. Carefully applied agile methods can work here.
Finally category 3 efforts are rife with uncertainty. The requirements need to be firmed up, designs are needed, and technologies must be chosen. All this leads to a great deal of uncertainty in the level of effort with low predictability. In this case, both the cost and benefits of the program are uncertain. In this case, senior management needs to make investment decisions in the face of uncertainty. The project managemer(s) needs to work explicitly to reduce the uncertainty.
Each category presents a different set of management priorities. In particular, the techniques for one category may not be effective for the other categories.
- Nonlinear Relationship between Effort and Outcome
Many project management techniques (like earned value management) implicitly assume there is a linear relationship between the effort expended and project progress. For example, if the project involves painting a wall of a certain size and you know how many square feet the painter can paint in an hour, you have a good idea how many square feet will be painted in some number of hours. There is a simple relationship between the project progress and the money spent paying the painters. The same reasoning does not apply to development activities like requirements elicitation or coding. After time spent on either, there may or may not be progress. There is some likelihood that many hours were spent talking to a user without a clear idea of what he or she wants, and so little progress was made. Similarly, there is some likelihood that after days of coding, testing will reveal that the code will need to be completely rewritten.
- Economics dominated by communication and collaboration
A good developer can write a thousand line application on their own over a weekend. However, writing a thousand lines of code that work reliably inside a million line of code application is often a different matter. To do this, the developer has to coordinate with other team members and he or she, or someone on his or her team, needs to coordinate and communicate with other teams. For large efforts, all this coordination and communication comes to dominate the project members’ activities.
Further, software and systems development has multiple dimensions, including but not limited to:
- Size of effort – software programs can range from a few thousand to millions of lines of code
- Required level of quality – systems can range from safety-critical, like automobile engine controllers that cannot fail, to mobile games like Angry Birds, whose occasional failure is an inconvenience
- Amount of innovation required – some software development is building yet another example of well-understood system. Sometimes software is needed to support an unprecedented system. The staff in this case has incomplete information about the problem and the solution. In this case, initial progress is made when the team learns about the problem and solution spaces.
- Time criticality of delivery – sometimes software needs to meet a schedule, e.g. imagine building a system for the next Olympics. Another example is delivering a system whose value depends on meeting a market window.
Because of these many factors, there is no “one-size fits all” management solution. These aspects of development present a wide range of management challenges from organizing efforts to setting goals and choosing appropriate measures and analytics.