Produce clean, efficient code based on specifications. Work with developers to design algorithms and flowcharts. Troubleshoot, debug and upgrade existing systems. Identify, prioritize and execute tasks in the software development life cycle. Modify existing software to correct errors, to adapt it to new hardware, or to upgrade interfaces and improve performance. Monitor functioning of equipment to ensure system operates in conformance with specifications. Analyze user needs and software requirements to determine feasibility of design within time and cost constraints. Develop or direct software system testing or validation procedures. Direct software programming and development of documentation. Confer with systems analysts, engineers, programmers and others to design system and to obtain information on project limitations and capabilities, performance requirements and interfaces. Store, retrieve, and manipulate data for analysis of system capabilities and requirements.