scientific software development