Develop, maintain and enhance complex and diverse software systems based upon documented requirements. Works individually or as part of a team. Reviews and test software components for adherence to the design requirements and documents test results. Utilizes software development and software design methodologies appropriate to the development environment. Provides specific input to the software components of system to include hardware/software trade-offs, software reuse, use of Commercial Off-the-shelf in place of new development, and requirements analysis.