Developing successful scientific software is a challenging but extremely important task for many computational modellers. Successful scientific software has to satisfy four opposing requirements;
- it has to be trustably correct, calculating the right result without error;
- it has to be very flexible, in recognition that it is to be used as part of an ongoing research project, and so its requirements and underlying equations and assumptions are subject to change;
- it has to be have high performance, and be able to efficiently compute the result on a wide variety of computer hardware, and
- most importantly, the software has to be sustainable, i.e. the software can be sustained by a team of developers over many years, and does not die or disappear when the original developer moves on to another research or industrial position.
Balancing correctness, flexibility and performance while delivering sustainable, well-engineered scientific software is extremely difficult, particularly as scientific software developers rarely have formal training in programming or computer science. More significantly, the academic rewards for developing such software are small, and the time available to researchers for software development is negligible compared to that devoted to active research, or grant/paper writing.
In this talk I will present techniques that can help overcome these challenges. I will talk about how sustainability can be added to your workflow, how software can be designed to balance correctness, flexibility and performance, and how new initiatives, such as Research Software Engineering, are providing the personnel and career pathways to support scientific software development.