Analyzes system requirements, including identifying program interactions and appropriate interfaces between affected components and sub systems. Makes recommendations towards the development of new code or reuse of existing code. May lead assigned projects, including assigning tasks, coordinating efforts, and monitoring performance. May recommend new technologies and methodologies to management for meeting business needs, resolving problems and exploiting opportunities. Remains current with new technologies. Obtains and evaluates information on factors such as reporting formats required, costs, and security needs to determine hardware configuration. Participates in software system testing and validation procedures, programming and documentation. Provides technical advice and assists in solving programming problems. Writes and/or reviews system specifications, including output requirements and flow charts. Assists in preparing project plans using project management tools. Reviews test results; documents test activities, and records remedial actions. Ensures proper analysis of problems and programming approaches to prevent rework and schedule slippage.