You know what you want your system to do and you know how it should work. However, there are a number of other things you need to consider. Part 2 of 3. FLEXIBILITY If your company intends to increase or extend the functionality of the software after it is deployed, that should be planned from the beginning; it influences choices made during the design, development, testing, and deployment of the system. * Can the system be 'badged' to represent your company? * Will you be adding additional sites, locally or nationally? * How easy is it to restructure screens and/or workflows to suit your business? MAINTAINABILITY The ease with which a software system or component can be modified to correct faults, improve performance or other attributes, or adapt to a changed environment. Product technical design should be fully documented REUSABILITY Many systems are developed with the ability to leverage common components across multiple products. Reusability indicates the extent to which software components should be designed in such a way that they can be used in applications other than the ones for which they were initially developed. * Code is reused as much as possible - only really applies to the 'custom' part of the software, not the COTS part. Will be discovered during the code review * The system may be 'copied' or 'reused' any number of times for the provision of, for example, test and training systems ROBUSTNESS A robust system is able to handle error conditions gracefully, without failure. This includes a tolerance of invalid data, software defects, and unexpected operating conditions. SCALABILITY Software that is scalable has the ability to handle a wide variety of system configuration sizes. The non-functional requirements should specify the ways in which the system may be expected to scale up or down (by increasing or decreasing hardware capacity, adding or removing machines, etc.) DEPLOYABILITY Deployability specifies the ease with which the software can be installed on all necessary platforms, and the platforms on which it is expected to run. * Versions are easily identified * Deployment is automated as much as practicable and is accompanied by complete documentation * Version updates can be skipped if required * Updates will not remove data or configuration information * Updates must be repeatable, both in case of error and where multiple systems are in use (many sites require test systems to be run prior to any production system update). Please get in touch if there is anything Freeman Software can do to help your business succeed.