The Issues Facing Teams
Software development as part of a team, whether it is 2 people or 200 people, faces a number of challenges to the success of the effort. Many of these challenges are out of any given technology’s control – for instance finding the right people for the team, and dealing with differences in opinions.
However, one of the biggest challenges relates to the sharing and management of development information. While it’s essential that team members receive all of the project information required to be productive, it’s just as important that they don’t waste valuable time researching and reading through too many information sources simply to find what they need.
This problem gets exponentially larger as the size of the team increases. As each member retains project information that isn’t shared or commonly accessible, every other member (and particularly new members), will inevitably have to spend time obtaining this localized information, repeating errors previously solved or duplicating efforts already made. Even when it is not localized, project information can still be misplaced, misinterpreted, or forgotten, further contributing to the problem.
As teams continue to grow, it is obvious that trying to publish and disseminate all of the available information about a project would create a near impossible learning curve and generate a barrier to productivity.
This problem is particularly relevant to those working as part of a team that is distributed across different physical locations and timezones. However, although a distributed team has a higher communication overhead than a team working in a single location, the key to the information issue in both situations is to reduce the amount of communication necessary to obtain the required information in the first place.
A Community-oriented Real-time Engineering (CoRE) process excels with this information challenge. CoRE is based on accumulated learnings from open source projects that have achieved successful, rapid development, working on complex, component-based projects despite large, widely-distributed teams. Using the model of a community, CoRE emphasizes the relationship between project information and project members.
An organizational and technology-based framework, CoRE enables globally distributed development teams to cohesively contribute to high-quality software, in rapid, iterative cycles. This value is delivered to development teams by supporting project transparency, real-time stakeholder participation, and asynchronous engineering, which is enabled by the accessibility of consistently structured and organized information such as centralized code repositories, web-based communication channels and web-based project management tools.
Even though teams may be widely distributed, the fact that everyone has direct access to the other team members through the CoRE framework reduces the time required to not only share information, but also to incorporate feedback, resulting in shortened development cycles. The CoRE approach to development also means that new team members are able to become productive quickly, and that existing team members become more productive and effective.
While Maven is not tied directly to the CoRE framework, it does encompass a set of practices and tools that enable effective team communication and collaboration. These tools aid the team to organize, visualize, and document for reuse the artifacts that result from a software project.
As described in Chapter 6, Maven can gather and share the knowledge about the health of a project. In this chapter, this is taken a step further, demonstrating how Maven provides teams with real-time information on the builds and health of a project, through the practice of continuous integration.
This chapter also looks at the adoption and use of a consistent development environment, and the use of archetypes to ensure consistency in the creation of new projects.