Analyze users' needs and then design, code, test, and develop software to meet those needs. Document every aspect of an application or system as a reference for future maintenance and upgrades. Collaborate with other computer specialists to create optimum software. Troubleshoot and resolve issues in existing software. Support customer-witnessed testing.