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.