This is a software organizational / project management pattern that I have come across many times but never seen written, so here it is.

Context: You are managing a team (four or more people). The primary goal of your team is to develop new software functionality (either by creating a new product or enhancing an existing product). However, there are software development administrative activities that do not directly involve adding functionality but must be done (ideally because they contribute to the success of the project, or possibly because of organizational reasons). Examples of such activities include: maintaining automated builds, preparing deliveries, writing automated tests, investigating, fixing and tracking defects (customer support), updating documentation, upgrading software & libraries, configuration management, and general office administrative tasks.

Problem: How should these software administration activities be assigned to and performed by your team members?

Forces:

  • We want to minimize the number of developers that are directly creating new functionality. Having more developers lowers the integrity of the design and increases the communication & coordination overhead.
  • Developers generally prefer to develop new functionality rather than work on these activities.
  • Pressure from management or customers for signs of progress can cause a general focus on developing new functionality which can lead to a conscious or unconscious neglect of these activities.

AntiPattern Solutions: There are several different ’solutions’ to this problem that are antipatterns: these approaches are quite common in the industry yet fail to resolve the forces in a satisfactory manner.

  • Ad-Hoc: The project manager fails to plan for software administration activities, so they are assigned on an ad-hoc basis. This tends to serve as interruptions for the developers given the assignment, which reduces their efficiency and typically impacts the schedule.
  • Neglect: Software administration activities are left undone in favor of developing new functionality. This can happen because the project manager does not feel that the activities are important, or is under so much pressure that they feel they don’t have the time to do anything but develop software. Typically this leads to one or more problems occurring (i.e. loss of changes due to poor configuration management, large number of defects) which negatively impacts progress and may jeopardize the project (i.e. too many defects found during customer acceptance testing).

Solution: The solution is to define a software administration role. Assign one or more people to this role full-time. The number of people will depend on the size of the team and the amount of work involving these activities. The role can be a good learning opportunity for those not ready to develop actual production code. Developers new to the project or junior developers lacking certain skills can be good candidates for assigning to this role. If your project is large enough, you can form a separate software administration team. If such a team consists of mainly inexperienced staff, then a fairly experienced team lead should be placed in charge in order to ensure the team functions properly.

You should consider occasionally swapping team members from application development to software administration and vice-versa. This helps deal with a couple of problems:

  1. Bad feelings between teams: if things go wrong with items like the build or version control, or if it changes (even if the change is for a good reason), the application developers will tend to start to resent the administration developers. The application developers may make unrealistic demands (i.e. Act like typical IT customers) of the administration developers which can lead to resentment in the other direction. Swapping people between the roles helps them to appreciate the other side.
  2. Software administration tasks are typically perceived as less enjoyable than new development tasks. By providing the opportunity to move to development, developers can more easily tolerate time spent on these tasks.

Resulting Context: There are fewer people directly involved in application development, therefore reducing the communication and coordination overhead. Having people directly responsible for software administration activities will help ensure that these activities get done in a timely and proactive manner. If higher management does not appreciate the importance of these activities to the project’s success, they may try to reallocate people who you have assigned to the software admin role.

Known Uses: I was inspired to write this pattern by an article by Cara Taber and Martin Fowler titled “An Iteration in the Life of an XP Project.” (Cutter IT Journal, Volume XII, No. 11, Nov 2000) which describes using XP on a large team. The approximately 26 developers are split into two equally-sized teams: one team doing the main development, and a SWAT team that handles activities such as bug fixes, build process, testing automation, and performance tuning. I have heard of two other cases where different managers have formed explicit software administration teams.

Related Patterns: Two related patterns from Jim Coplien’s organizational pattern language are the Team Per Task pattern and the Sacrifice One Person pattern.

If you find this article helpful, please make a donation.

Share this article: Add 'The Software Administration Role Pattern' to reddit Add 'The Software Administration Role Pattern' to digg Add 'The Software Administration Role Pattern' to Del.icio.us Add 'The Software Administration Role Pattern' to FURL Add 'The Software Administration Role Pattern' to Technorati Add 'The Software Administration Role Pattern' to Yahoo My Web Add 'The Software Administration Role Pattern' to Newsvine