1.3 Core Beliefs
The project management practices described in this book can be characterized as "middleweight" processes. This is somewhere between heavyweight processes such as those described within the capability maturity model (CMM) [Paulk 1995] and the Rational Unified Process (RUP) [Kruchten 1999; Royce 1998] and lightweight processes such as extreme programming [Beck 2000]. Basically I believe you should spend some time up front designing a software architecture for the envisioned product as well as planning the project. But use incremental development to get to the market quickly while incrementally updating your plan as you implement the architecture. These middleweight processes have the following fundamental characteristics.
Architecture design and description: I believe that successful software development projects need a description of the architecture design that can be understood by all development team members. The architecture design should be done prior to writing large amounts of production code.
Project planning: Projects should be planned while the software architecture is being designed. Schedules, effort estimates, and the project organization should be based on the architecture. Schedules developed prior to having an architecture design are likely to be very inaccurate.
Incremental development: Software products should be developed incrementally, based on the software architecture and the set of desired features. The first increment, which I call a "vertical slice," should be used to prove major characteristics of the architecture.
Project manager/architect team: The project manager and software architect should work closely together as a decision-making team. Responsibilities are roughly divided between management and technical decisions. Successful projects consisting of more than a few developers should have two different individuals in these roles.
Trade-off analysis: Project management consists of a set of trade-off decisions. Thus, there are no right or wrong answers, and projects that are implemented will never go exactly as planned. Project managers must be flexible to be able to best manage development risks.
Soft factors: Soft factors will affect a project as much as or more than the technical issues. These soft factors include team building, morale, management influences, business influences, staff experience, and culture.