Flylib.com

Books Software

 
 
 

Defining an Adaptive Foundation


Defining an Adaptive Foundation

Undertaking the rapid development of enterprise software requires having a strategy in place that sees the entire project team suitably equipped for the task. The techniques and practices introduced throughout this book each contribute toward developing quality software for the J2EE platform faster. However, to gain maximum advantage from the topics covered, project teams must be suitably prepared for their use.

Preparation requires underpinning the topics discussed with proper tools, training, research, and ongoing support and investment from management. Combining these critical elements, along with suitable techniques from this book, gives rise to the concept of producing an adaptive foundation as the basis for the rapid development of enterprise software. The term adaptive foundation reflects both the need to have a base in place for project teams and that the elements that make up this base must have the capacity to accommodate the changing nature of business software.

Why a Foundation?

The term foundation cements the concept of requiring the necessary building blocks to be in place in order to perform rapid development. Arguably, the term framework would have been equally applicable . However, framework is already a well-used term within software engineering, and the intent was to avoid confusion with established frameworks such as Apache Struts or even J2EE.

Frameworks such as these form only part of the foundation for an effective rapid development strategy.

Why Adaptive?

Perhaps the biggest schedule killers are the continual changes that bombard a development project throughout its lifecycle. These changes originate from a variety of sources, including changes in requirements, design, scope, and even in team members , customers, and management. All have the potential to adversely impact the delivery timeframe of a software business solution.

The software engineering practices we adopt must be flexible enough to absorb the impact of such changes, allowing the course of the project to change direction when required and hence generate a system that meets the needs of the customer.

The techniques and practices included in this book all fit the criterion of being able to operate within a fluid and dynamic development environment. Within these pages, you'll therefore find such practices as iterative development, active code generation, test-driven development, and aspect-oriented programming. These practices, and others like them, serve to supplement the enterprise development services already available on the J2EE platform.


Laying the Foundations for Rapid Development

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:

  • People

  • Tools

  • Frameworks

  • Practices

  • Standards

  • Processes and procedures

  • Training

  • Continuous improvement

Over the course of the next sections, we examine how each of these elements contributes to the successful outcome of an enterprise project.

People

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.

Tools

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.

Frameworks

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.

Practices

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

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.

Training

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:

  • Independent study by reading books and articles

  • Collaborative learning with study groups

  • Attending conferences and seminars

  • Building prototypes

  • Mentoring from experienced staff

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.

Study Groups

One effective and enjoyable way of learning is to run a series of study groups. This approach sees everyone who is interested in learning a particular topic take part in a group discussion.

The expectation is that each member of the group will have completed background reading on the relevant topic and will be prepared to discuss his or her understanding of the subject with the other members of the group.

A moderator, who starts the discussion with an opening question for the group to consider, runs the session. The role of the moderator is then to keep the discussion flowing by asking further questions and to ensure the group remains focused on the topic.

For more information on the structure of these sessions, see http://www.industriallogic.com/papers/learning.html. This site outlines the makeup of a study group, complete with the moderator's opening questions, for learning about design patterns. However, the forum is applicable to just about any subject.


Continuous Improvement

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.