what does a software developer do