According to Humphrey, an effective software development project requires a balanced approach which takes into consideration both tools and process development. He writes: "Tools  alone will not fully solve software engineering's problems. Neither will process alone. Both are needed to obtain a balanced result.  They can improve productivity, reduce errors, simplify routine tasks and free engineers for more creative work" (Humphrey 1995:26). In choosing this balance, however, it is imperative to take into account the environmental changes, as well as other factors, that affect an organization's development, of which an information system is integrated into. However, since these changes are dynamic and difficult to predict, an information system will therefore be only as effective as its ability to adapt to these changes and maintain its efficacy. This is especially true for large systems performing more complex functions.
In this sense, Parnas (1979) suggests building software not as an individual program or a single system, but as a 'family' of programs, built as a collection of numerous programs consisting of subsets, which can be modified independent of other unrelated programs. Hence, a key feature of good information systems is therefore not necessarily in the complexity of the system, but rather in its flexibility in terms of ease of modification. In achieving the flexibility of good information systems, Parnas' family of programs suggests the need to create each program as a separate module (1979). In citing Gouthier and Pont, Parnas writes, "A well-defined segmentation of the project effort ensures system modularity. Each task forms a separate, distinct program module. At implementation time each module and its inputs and outputs are well-defined, there is no confusion in the intended interface with other system modules" (cited in Parnas 1972: 1053). Modularity therefore makes better information systems because it allows a better understanding of the system, as a whole, since each module can be more easily understood. To achieve this, Parnas identifies a criteria, which provides that the module's structure must be simple, that it must be possible to change the implementation of one module separate from and without affecting other modules, changes made in a module must be supported by a likely need for the change, major software changes should be possible as a set of independent changes to individual modules, and the functions of a single module should be understandable without understanding the module's internal design (Parnas, Clements & Weiss 1985: 260).
Watts Humphrey, on the other hand, summarises what consists of good information systems through his Capability Maturity Model (CMM), which contains the elements that an effective process model should possess (Humphrey 2000). Under CMM, he enumerates five maturity levels, each of which corresponds to the need to implement particular processes to aid organizations in moving up the five levels and achieve "[p]redictability, effectiveness, and control of an organization's software processes", characteristic of a good system (Humphrey 2000: 11). However, he also recognised that CMM "does not deal with engineering disciplines and it does not address the teamwork practices and personal disciplines required for quality work" (Humphrey 2002: