Developing Scientific Software