There are several key factors involved in successfully adopting a companywide infrastructure for the purposes of undertaking effective, and hence rapid, software development. The establishment of a successful foundation as a base for rapid development requires meeting each of these factors, which include:
These next sections elaborate on these points and look at options for achieving these key success points.
Obtaining Developer Acceptance
Software engineers can be a very difficult crowd to please. As software development is a people-centric process, achieving a universal uptake of your proposed new development methods requires obtaining agreement and support from the people who develop the systems. Achieving this buy-in from fellow software engineers often requires the diplomacy skills of Henry Kissinger.
A companywide development approach is truly effective only if the developers are willing to embrace its methods and adopt its practices. Gaining acceptance from all developers builds up a critical mass of information, which sees the adopted tools, methods, and practices continually refined and evolved based on the experiences of the different project teams.
All project teams can benefit from this growing body of knowledge. However, teams that ignore the guidance of a company's proven practices and follow a different path soon find themselves isolated. If trouble strikes, the relevant expertise is unlikely to be available on other teams to assist the team with any problems that arise from the use of a divergent technology.
Admittedly, this scenario is common with development technology, because new projects often embrace the latest and greatest, if for no other reason than that the customer demands it. However, in this case, examples of breakaway groups include teams that use an alternative source-control system or decide the company's chosen development methodology is not to their liking.
Adopt new techniques and practices as the project demands, but make use of a company's proven methods where they are available.
Obtaining the support of colleagues for defining this unifying development strategy is best achieved by encouraging everyone to become actively involved in its formation. You should make it possible for everyone to research new methods and contribute to the evolution of the adaptive foundation. Avoid creating a single group charged with this responsibility, since doing so will likely generate resentment among those software engineers outside of the process.
Involving everyone in the process of forming an adaptive foundation for development may present logistical problems where a large company or IT department is involved. Where a large group is concerned, you may need to resort to other tactics. Here are a few options you might want to consider.
Run regular seminars to advise the group on the state of play of the development strategy. Encourage questions from the floor and make sure you get back to people with answers at the next scheduled seminar. Also, be prepared to take onboard any suggestions that come out of these sessions.
Another option is to invite to people to speak at the seminars. Try to get speakers from different teams so that input is taken from all sides. You also might want to consider videoing the presentations at these seminars and making them available online.
The setup of a collaborative Web site, or Wiki, is also a good option for your hardworking colleagues who don't like leaving their desks to attend meetings and seminars.
See http://www.tikiwiki.org or http://www.plone.org for open source versions of groupware products.
Using collaborative groupware of this nature fosters an environment of teamwork and encourages everyone to contribute feedback to the development and growth of an adaptive foundation that incorporates tools and practices everyone wants to use.
These collaborative intranet sites are also a good mechanism for the distribution of documentation on the use and application of the tools and practices that make up the foundation of the development strategy. Distribution of information on the use of the adaptive foundation relates to education, which is one of the critical success factors we discuss in the next section.
When undertaking a particularly challenging software engineering task, most of us would prefer to solve the problem by taking a path we have already traveled. This usually involves falling back on the tools and techniques with which we are already familiar and consequently lie within our comfort zone. This attitude is understandable, as having become expert with a certain technology, few of us relish the thought of discarding all that hard-earned knowledge and starting from scratch with an alternative approach.
This reluctance to step outside of our own personal comfort zones is a primary reason why development strategies that prescribe the use of specific tools, methods, and practices struggle to gain widespread acceptance within an organization; people like to stick with what they already know, despite the benefits of alternative, and potentially superior, approaches. The key to overcoming this reluctance to embrace new approaches is education.
Education expands people's comfort zones. It gives them the confidence to work with the methods of an adaptive foundation on critical projects.
To be effective, education must encompass every aspect of the software development process and be available to all members of a project team. Seminars should be run frequently, and comprehensive documentation must be available on all facets of the foundation's methods and tools. Seminars and training courses are essential for new staff, and the makeup of projects should always include someone experienced with the adopted development process as part of the team in at least an advisory or mentoring capacity.
In my experience, failure to provide an adequate level of education on the methods of a company's chosen development foundation leads to project teams pushing their own approaches. This situation ultimately results in a fragmented development approach between teams that does not yield the same benefits as a consolidated and cohesive development strategy.
Adopting a companywide development strategy does not mean being dismissive of the skills and experiences people bring to the project. The formation of an effective adaptive foundation depends on input from all staff. Rather than dismissing people's ideas, evaluate them on merit to see if they warrant inclusion as part of the broader foundation approach.
It isn't possible to establish a foundation for rapid development without the full support of management. Management needs to support the concept and, where appropriate, enforce the concept.
To successfully build and maintain an adaptive foundation requires investment. Tools must be purchased, training organized, and time set aside for researching new technologies or trialing emerging development practices.
Management also has an active role to play in gaining global acceptance of the foundation's methods. Despite the use of seminars, collaborative Web sites, and ongoing education, certain groups or individuals may still attempt to undertake project work using methods that are tangential to those of the other teams. In this instance, if teams are unable to justify their approach adequately, then management must bring these teams into line. Failure to do so will marginalize the investment in the adaptive foundation.
On a cautionary note, management should avoid being overly heavy-handed. Software development is a creative process that is unlikely to become the factory-line-production process many people would like it to be. The drive to establish a common development strategy should be tempered with the need for software engineers to trust their own judgment and be given the leeway to build solutions to the best of their capabilities.
The intent of an adaptive rapid development foundation is to augment the skills of the project team in the pursuit of building better software solutions for the customer. A fine line exists between approaches that stifle the creative process and those that encourage it. Ensuring the adopted strategy does not cross this line requires constant refinement of the approach with feedback from project teams.
To conclude this chapter, the next section outlines the contents of this book and the topics that are introduced as potential candidates for inclusion in a company's adaptive foundation.