We have established that to meet the challenges of developing enterprise software, a software development company must invest in its own adaptive foundation in order to be in a state of readiness for project work. Rapid development is not possible if a team has to learn how to use new tools and techniques during the course of a project. This learn-as-you-go-approach is commonplace in the software industry but is not conducive to the delivery of on-time solutions to the customer. Instead, investment in tools and training, along with research into the most effective development practices, should all take place well ahead of the project starting up.
This same logic applies to all facets of the project. Here is a list of the concerns in which a software development company should invest if it is to build a solid foundation for conducting rapid development projects:
Over the course of the next sections, we examine how each of these elements contributes to the successful outcome of an enterprise project.
Developing software is a people-centric process. The success of the project revolves around the skills and experiences each member of the team brings to the development.
Endeavoring to recruit individuals with the right experience, skills, and attitude is an important factor in forming a team capable of conducting a rapid development project. A further factor is ensuring software engineers are suitably motivated and empowered to perform their work. The best method of achieving this goal is to provide a working environment that fosters personal growth through training and mentoring, and rewards and acknowledges excellence in all aspects of the software engineering discipline.
Software development is complex, and having the correct tools in place to underpin the process can contribute greatly to the accuracy and quality of the software produced. The tools selected should improve the productivity of the team, making efficient use of the skills each member of the team possesses. An experienced team will assist in the process of identifying those tools best suited to the task ahead.
In the context of this book, the J2EE platform is the core framework for the development of all enterprise software. Having staff with significant experience and knowledge of the J2EE platform available for working on a project is key for its success.
J2EE, however, is unlikely to be the only framework employed on a project, although it will be the most significant. Many frameworks exist that augment the services of J2EE, such as frameworks for Web application development or as an alternative persistence mechanism to entity beans. Additionally, a company may invest in the development of its own framework for a specialized business area.
Adopting best practice software engineering techniques results in better software. By investing in proven practices, companies put in place the building blocks that enable software engineers to construct high-quality enterprise solutions. Some examples of best practices include adopting a test-first, or test-driven, approach to development or the use of design patterns in software architecture.
Standards serve to unify the way we work as a team or set of teams, and provide the detail around the many and varied tasks of systems development. Examples include standards for coding, design, and documentation. They exist as a means of providing a consistent level of quality across all project artifacts.
Processes and Procedures
Having established a working set of best practices, the step of documenting them as a set of processes and procedures pulls them together as a reference for a company's adaptive development foundation. Moreover, well-defined procedures provide a roadmap for the critical ancillary tasks that make up a complete development project. Such tasks include the use of source control, the raising and tracking of defects, and the release of software into test environments. Having procedures in place for these tasks before a project starts up is a major time saver.
Anyone embarking on a new project will have these procedures as a set of blueprints for setting up and running an effective rapid development project. Likewise, staff moving on to an existing project will have a detailed set of instructions as to how they work as part of the project team. This leaves people free to focus on the important task of developing software.
Investing in training addresses the problem of the high learning curve associated with software development. Training is a must if all members of a project team are to work productively. Training is required in all elements of the way a company develops software, not just for Java and the J2EE platform. This list of training requirements includes the use of tools, methodologies, software development practices, and internal development processes and procedures.
Training needn't be just about people sitting in classrooms and taking courses. People can learn through a variety of different mediums:
The key point is to look beyond generic classroom-based training courses, as these are likely to be unavailable for all of your chosen foundation practices.
The software development industry does not stand still, and new tools, techniques, and practices are continually emerging. A company's adaptive foundation for development must itself be adaptive and capable of incorporating best-of-breed practices as they emerge. Likewise, existing practices already in use by project teams should undergo continual evaluation, with feedback from teams shaping the future direction of a company's development strategy.
Keeping the adaptive foundation up to date requires investing time and effort in a program of continuous improvement. Staff members need to research new techniques to determine their suitability, while information gained on the use of existing practices must be fed back into the process. Time must be set aside to write up the ongoing findings of a continuous improvement program, with the presentation of recommendations made periodically to the company's development staff.