Thursday, November 29, 2012

Dilemma in Organizing Development team



There can be various ways of organizing a software development team



  1. Vertical Organization : This approach is concept of total separation between the front end, middle tier and database layer of software development and have specialist dealing with different tiers with no overlap.
  2. Horizontal Organization  : In this approach , there is no separation. Any team member can work across different layers of software. We call this generalist approach.
  3. Hybrid organization : This is a mixture of 1 & 2 above, where we can have generalist to deal with simple problems and specialists to take care of complex scenarios.


There are pros and cons for each approach and what organization is chosen depends on various factors like:
  • Team Size.
  • How mature is architecture and coding standards.
  • How smooth is communication between various team members
  • How well documented your software process are
  • What type of output is required
  • What is the response time required
  • Is the team doing software maintenance or new development
  • How complex the project is

Vertical team organization

A vertical team is composed of generalists. Use cases are assigned to individuals or small groups, who then proceed to implement the use case end to end.

How this works

  • There is an integrated development team responsible for all layers of architecture.
  • Single development team can be divided into smaller sub teams and assigned individual targets. They take up tasks at each layer.
  • There is a project lead and several module leans for leading sub teams.

Advantages

  • You have smooth end-to-end development on an individual use case basis.
  • Developers gain a wider range of skills.
  • Ownership of modules and focus on delivery.
  • Flexibility to use team members in any area as per requirement.
  • Faster response time during bug fixing and while implementing simple enhancements

Disadvantages

  • Generalists typically do not have the specific technical expertise required to quickly solve detailed problems.
  • Subject matter experts may have to work with several groups of developers, increasing their burden.
  • A focused approach at each layer is compromised if architectural standards are not well defined.
  • May result in redundant code if communication is not centralized among developers.

Success factors

  • Everyone is working to a common set of standards and guidelines.
  • Good communication between developers is required to avoid common functionality being implemented by various teams.
  • Common, and agreed to, architecture needs to be developed early in the project.

Horizontal team organization

A horizontal team is composed of specialists. This team works on several use cases simultaneously, each member working on their own aspects of the use case.

How this works

  • Development team is divided in 3 sub teams namely:
  • UI /Front End Team
  • Middle /Business Layer Team
  • Database /Back end team
  • Each requirement is broken down into these three components and respective teams are responsible for their part.
  • There is lead for each layer

Advantages

  • A focused approach at each layer.
  • Easier to maintain code quality and  discipline responsibility at each layer.

Disadvantages

  • Specialists often do not appreciate the importance of other specialties, resulting in disconnects between various aspects of the project.
  • Information required by "back-end" people may not be gathered by the "front-end" people.
  • Project management is more difficult because of competing priorities, visions, and needs of specialists.
  • More coordination required between different team layers.
  • More Dependencies resulting in greater time to develop
  • Lack of ownership and responsibility of a complete module.
  • May result in dissatisfaction in developers as they are restricted to one area of product.

Success factors

  • Good communication is required between team members so that they understand where each person is coming from.
  • Defined processes and quality gates that specialists must follow to promote effective hand-off to other specialists are required.
  • Very well defined requirements so that iterations between teams of various layers are minimized.

Hybrid team organization

A hybrid team is made up of both generalists and specialists. The generalists stay with a use case throughout its development, supporting and working with specialists who work on portions of several use cases.

How this works

  • There is an integrated team with some team members assigned as owners for each of 3 layers.
  • All the assignments are taken by a team as single module but an owner for each layer is consulted and involved in design of any new solution.
  • There is a single lead and module leads for sub teams. There are leaders/owners assigned for each layer

Advantages

  • You get the best of both worlds.
  • External groups interact with a small group of experts.
  • Specialists focus on what they are good at.
  • Individual use cases are implemented consistently.
  • Flexibility to choose a generalist for a simple task and associate a specialist for a complex requirement.
  • Ownership of modules as well as each layer of application.
  • Greater control over code quality

Disadvantages

  • Specialists still may not appreciate and work well with other specialists, although this should be tempered by the generalists.

Success factors

  • Good team communication is required.
  • Common architecture needs to be developed.
  • Common processes, standards, and guidelines must be well defined.

Comparison

Factor
Vertical
Horizontal
Hybrid
Chances to Deliver  fast
High
Low
Medium
Chance to Development fast ( New Development)
High
High
High
Chance to develop fast ( Bug fixing and enhancements)
High
Low
Medium
Chances to have high Code Quality
Medium
High
Medium
Chance of Code Reusability
Medium
High
Medium
Focus on delivery
High
Low
High
Ownership
High
Low
Medium
Ability to work independently
High
Low
Medium
Ease of operation in agile requirements
High
Low
High
Flexibility to use resource
High
Low
Medium
Ability to solve complex problems
Low
High
High

No comments:

Post a Comment