Researching, designing, implementing and managing software programs Testing and evaluating new programs Identifying areas for modification in existing programs and subsequently developing these modifications Writing and implementing efficient code Determining operational practicality Developing quality assurance procedures Deploying software tools, processes and metrics Maintaining and upgrading existing systems Training users Working closely with other developers, UX designers, business and systems analysts