1. A method for generating a specification for a complex project, comprising the step of: generating the specification through the use of combined object-oriented programming and functional decomposition techniques, such that for each level of system development object and sub-object creation are specified using the following steps: a. establishing object requirements; b. identifying object context and interfaces; c. defining object capabilities and constraints; d. establishing traceability between the object requirements and its capabilities and constraints; e. developing a realization of the object by decomposing it into sub-objects; f. assigning capabilities and constraints to the new sub-objects; g. deciding which sub-objects to decompose further; h. repeating steps a through g for each sub-object which requires further decomposition in which the sub-object now becomes the new object; and, i. using discipline-specific methods to implement sub-objects that do not need further decomposition, whereby a consistent design methodology is provided for architecting complex systems.