"The drive to reduce complexity is at the heart of computer science" (McConnell, 1993, p. 774). This need to reduce the overall complexity of the proposed product drives the architectural stage of development. This stage is usually where the developer will make decisions on the computer programming language to utilize, identify the major parts of the program and create a rough draft of general flow of the program. Developers typically utilize such tools as flow charts, discussions with flip charts and whiteboards, and use-case studies to determine the best overall layout for the program. Use-case studies are a software architectural term for simply walking through known or imagined scenarios of typical program usage. This aids in diagramming the flow of information from the user through the program. This type of play-acting also helps to solidify the major responsibilities for each part of the system, to identify the inputs into these parts, and to identify the required outputs.
Although I referred to the development of the requirement and functional specification documents as a separate step in the overall process, these documents are the formalized result of the two previous steps. Typically, a developer will receive a set of generalized requirements from an outside entity. Using these requirements, the developer will create a more formalized requirements document that clearly delineates every attribute of the finished product. It is usually best to accomplish this after the developer has spent the time to layout the overall architecture of the program and examine examples of typical usage. The well-informed developer then returns to the originator of the requirements to ensure that the essence and functionality of the desired product has been documented. The developer can now create a more detailed document, referred to as a functional specification, that is a proposal of how the developer intends to implement the agreed upon requirements.