System architecture involves developing architectural layers, component structure,
subsystems and interfaces for each component, the target topology as a deployment model,
importing code libraries and developing patterns for all architectural mechanisms. An optional
task model may be produced.
In a waterfall project this is done prior to any coding. In an incremental project all the system
architecture needed for code implementation for the whole system is developed during the
development phase together with the relatively small amount of detailed design and code
needed to fully test the architecture. The rest of the detailed design and code needed to
implement the majority of the end user functionality is developed during the production
This approach ensures that almost all technical risk is eliminated be the end of the
development phase and greatly reduces the chance of a major rewrite late in the project
due to architectural change.