Research Software Engineer Proposal at Stanford
This was a proposed description used with HR to attempt to establish an RSE role. It was based off of actual duties of an RSE in Research Computing, and other RSE job descriptions, namely from Princeton.
Job Description
A Research Software Engineer (RSE) has a background in computational science/engineering and is interested in providing this expertise to research groups across domain sciences, engineering, and humanities. The RSE’s general focus is to translate the needs of a lab or group into high quality, performant, and sustainable research software that can be easily shared or cited. The RSE also works with research computing to build collaborative environments and tools for research, and to champion best practices for software development at the university. The RSE is highly valued for being a core member of research teams, a contributor to open source, and following best practices and testing computational techniques in new and emerging technologies. A layer of RSEs across a university also provides a sustainable, consistent communication network to better connect historically disparate groups that might be working on similar projects unknowingly.
Responsibilities:
- Consult with labs or groups on demand for software expertise or general assessment
- Lead or co-lead the design and implementation of a research software project or system
- Champion best practices including requirement analysis, design, implementation, testing, deployment, documentation, and maintenance.
- Take notice of higher level problems that many researchers face and create software solutions that might address them.
- Maintain knowledge of current and future software development tools and techniques, programming languages, and (if appropriate) cloud or HPC strategies for scaling.
- Lead collaborations with open source projects or industry to improve open source software on behalf of researchers
Essential Qualifications
- Strong programming skills, particularly in the languages scientific computing applications (e.g. Python, Julia, C/C++, and R).
- Demonstrated success:
- Consistently using conventional and readable coding style.
- Performing test-driven development and continuous integration.
- Writing comprehensive, professional, and well-written documentation.
- Developing or maintaining reproducible build systems
- Using version control systems.
- Working collaboratively on a research team
- Ability to work independently.
- Ability to learn new frameworks, systems, or techniques as needed.
- Ability to communicate effectively
- Experience working in an academic research environment
Preferred Qualifications
- Experience with operations (e.g., DevOps)
- Experience optimizing research software and/or algorithms
- Parallel programming experience
- Experience contributing to open source
Education
- Bachelor’s degree. A graduate degree or equivalent experience in a research setting is preferred.
The growth of a research software engineer
The following chart is a proposal for levels of a career track for an RSE. It is heavily inspired by this work, and makes the assumption that a higher level manager exists alongside the team to manage planning, deadlines, etc. The editable version is available here