In this article we will start by reflecting upon some traditional software development team structures. This will help us appreciate where we came from. Some of these structures still exist in some of the traditional software development teams. Due to the intermingling nature of a Software Development Manager and a Software Project Manager, when you read through this, where ever you see Project Manager it implies a Project Manager who pre-dominantly uses his Software Project Management tool set such as PMBOK or similar project management methodologies for a living OR a Software Development Manager who is a seasoned developer with managerial and project management skills. I am planning to write another article which will shed light into the lives of these two patterns of managers who are the back bones of many mission critical and state of the art Software Products. This will help aspiring students and practitioners!
- Project Format – In a project format, the programmers themselves do all the tasks like product definition, system design, implementation, testing, review, system documentation etc. Some of them may retain for further maintenance work of the same project while other move on to new projects.
- Functional Format – In functional format of project organization, different teams performs various tasks as follows –
3. Matrix Format – The major difference between matrix format and functional format is that while functional involves only the software project manager and only one software project manager being worked on within a functional team, matrix format has more than one software project managers dealing with parts of various projects and there are teams for each of the sub-projects. ie. everyone has at least two bosses!
Advantages of matrix format are as follows –
- Special expertise can be brought to a specific function
- Project staffing is eased since project personnel can be brought in as needed for a project
- Work load is balance so that individuals returning to their functional organization are assigned to other projects or may spend time training
4. Agile Teams – As Software Development advanced throughout the decades, we saw various different approaches to the conceptualize-design-build-test-deploy-maintain life cycle – such as – Waterfall model, Iterative Models, Spiral models, RAD (Rapid Application Development) models, Extreme Programming models, Lean Models. The basic framework of Software Engineering to develop and maintain Software – The Software Development Process – went through so many approaches to achieve a focused goal namely creating the most valuable Software for the customer with least defects and at the right time and at the same time being flexible enough to account for constant fluxes. Early years of year 2000 saw Software Practitioners coming together to layout a common theme which has laid out the foundation of the many Agile Software development teams.
An Agile Software Development team is one where the team organizes itself , is fully autonomous and is empowered fully to create, maintain and flourish its focused Software Product or feature. At the basic level (as shown in above diagram), an Agile team (usually called Scrum Team since most companies use Scrum as the de-facto Agile team process model) consists of 3-4 developers, 1-2 Software Testers, a servant leader (usually called the Scrum Master) and a product owner. There could be multiple Agile teams working with close collaboration who runs and maintains various distinct Software Features or Products within the organizations. Developers [design, build and unit test], Testers [perform QA activities with increased usage of automated testing tools], Scrum Master leads the [Sprint rituals such back-log grooming, prioritization, Sprint planning, User Story creation, Sprint reviews and Sprint retrospectives], Product Owner [owns the feature and maintains the product road-map and deals with the business counterparts and ensures that the feature is in synch with the overall Software Product vision]. The overall Agile culture of the organization ensures that they have 2-4 week sprints, they have set release plans, scrum of scrums and that each agile team is self organizing and collaborating to the extend that they harmoniously work towards developing most valuable Software for the targeted customer base.
In the recent decade, some companies organize their Agile teams as Tribes, Sqauds, Guilds and Chapters as shown above diagram. Tribes is a group of Agile teams who maintains various features of a similar Theme of a Software Product. A Tribe may contain one or more Squads where each Squad represent a distinct Agile teams responsible for a distinct feature. A Chapter is a group of similar skilled team members across squads within a Tribe who meet and collaborate periodically towards betterment of their skills, sharing ideas and practices. A Guild is another special interest group who meet and collaborate towards sharing of ideas and standardization as needed.
Looking at the Agile team structures, one might think where is the role of Software Project Manager or a Software Development Manager or a Line manager. These roles are usually played by a senior member usually a Tribe lead or the person who leads a Chapter or a Guild. In some organizations, the Software development manager plays dual role of Scrum Master. In some cases they lead multiple Agile teams or a Tribe, multiple Tribes or Chapters.
Other related articles that you might be interested in –
1. Factors Affecting Software Cost
2. Programming Team Structures
3. Software Cost Estimation
4. Factors Affecting Software Quality and Developer Productivity
5. Managerial Issues of Software Engineering
6. Connecting Traditional Water Fall Software Life Cycle Model with Agile Models
7. Software Engineering
8. Software Engineering then and now
9. Project size driving Project risk
10. Quality considerations for software projects