By Dr Marion Weinzierl, Research Software Engineer at Durham University (with thanks to the UKRSE Slack community for its input)
Question: "I have just come out of a meeting with a professor and his postdoc in which we discussed how I could help them with improving the robustness of their code, error handling, and introduce automated testing. Halfway through he stated that his postdoc 'should not have to do this kind of stuff,' as she was employed for doing research and 'this is just software engineering'. I was feeling a bit annoyed and pointed out that actually, although I am happy to help them with this, the person who writes a code should generally also be responsible for its quality and testing. However, this conversation made me think, and I would like your opinion. Was he right in some way? What do you think about the software engineering vs research statement? How much should we train, help, consult and support, and how much should we 'do'?"
This was my post on the UK RSE Slack channel earlier this week, and it got a discussion going with more than fifty responses. What was the outcome of this discussion? To cut a long story short: It depends. And there isn’t a general RSE consensus on how much to expect from academics.
The people 'on the professor’s side' pointed out that the researchers should not be expected to have both the domain knowledge and the software engineering expertise. At most, they can provide a prototype/proof of concept, which the RSE can then take and turn into ‘something real’. They also pleaded for understanding of the researchers’ dilemma to produce as many papers as possible. To add my own thoughts to this: is this not (partly) where the RSE movement came from? To make sure that there are no more (or not as many) postdocs left behind on the academic track because they did “too much software engineering/coding”, and did not produce enough citable output (which leads to the point of acknowledging software as research output, but I won’t go into this here, as it was and is discussed at length elsewhere)? And because academics often did not have the skills and knowledge needed to do this kind of work?
People 'on my side' (although I did not intend to be the opposition to the professor in this debate) stressed the importance of researchers taking responsibility for code quality and testing, in particular when publication results are produced with the code. They also stated that an RSE cannot be expected to have enough domain knowledge to be able to 'clean up' after the researchers and know enough to write the tests on their own. One frequent comparison that was made was of an RSE being like a lab technician, and I think in some ways we have similar problems with acknowledgement and being treated as being someone at a professor’s disposal.
Both sides agreed that it is important to establish a partnership between RSEs and academics, and to have an understanding of being in the same team, rather than the academic handing something away to the RSE and expecting a finished product to come back without further intervention.How much we can expect from the academic will hugely depend on their field, the code in question and its purpose, and that particular academic’s skills. In my example, the code is a physics simulation code that has been developed over many years, with many papers already published, and which is planned to be made available for others. This is a different situation from, say, a psychology professor wanting an app and a database for their data acquisition, or someone who can throw together a proof of concept in Matlab, but wants a C++ code to be shared with other researchers.
Each RSE who took part in this discussion will have had a certain project or situation in mind in which their arguments will be valid. There seems to be no one 'correct' answer to the original question. It is important to be in a dialogue with the academics, to find out what their goals, requirements and software engineering skills are, and then support them accordingly.
What do you think? How can RSEs and academics help each other work together most appreciatively and productively? And is there a way how we can remove the little word 'just' in front of software engineering in academics’ minds?