Establishing central Research Software... | F1000Research "use strict";function _typeof(t){return(_typeof="function"==typeof Symbol&&"symbol"==typeof Symbol.iterator?function(t){return typeof t}:function(t){return t&&"function"==typeof Symbol&&t.constructor===Symbol&&t!==Symbol.prototype?"symbol":typeof t})(t)}!function(){var t=function(){var t,e,o=[],n=window,r=n;for(;r;){try{if(r.frames.__tcfapiLocator){t=r;break}}catch(t){}if(r===n.top)break;r=r.parent}t||(!function t(){var e=n.document,o=!!n.frames.__tcfapiLocator;if(!o)if(e.body){var r=e.createElement("iframe");r.style.cssText="display:none",r.name="__tcfapiLocator",e.body.appendChild(r)}else setTimeout(t,5);return!o}(),n.__tcfapi=function(){for(var t=arguments.length,n=new Array(t),r=0;r 3&&2===parseInt(n[1],10)&&"boolean"==typeof n[3]&&(e=n[3],"function"==typeof n[2]&&n[2]("set",!0)):"ping"===n[0]?"function"==typeof n[2]&&n[2]({gdprApplies:e,cmpLoaded:!1,cmpStatus:"stub"}):o.push(n)},n.addEventListener("message",(function(t){var e="string"==typeof t.data,o={};if(e)try{o=JSON.parse(t.data)}catch(t){}else o=t.data;var n="object"===_typeof(o)&&null!==o?o.__tcfapiCall:null;n&&window.__tcfapi(n.command,n.version,(function(o,r){var a={__tcfapiReturn:{returnValue:o,success:r,callId:n.callId}};t&&t.source&&t.source.postMessage&&t.source.postMessage(e?JSON.stringify(a):a,"*")}),n.parameter)}),!1))};"undefined"!=typeof module?module.exports=t:t()}(); dataLayer = dataLayer || []; // Standard GTM initialization - Google Consent Mode handles consent automatically (function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl+ '>m_auth=hzk0Vc3qFsQYhCrIoHz68A>m_preview=env-1>m_cookies_win=x';f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-MWFK8L5J'); ;window.NREUM||(NREUM={});NREUM.init={distributed_tracing:{enabled:true},privacy:{cookies_enabled:true},ajax:{deny_list:["bam.nr-data.net"]}}; ;NREUM.loader_config={accountID:"438030",trustKey:"438030",agentID:"772317073",licenseKey:"97f8f67f26",applicationID:"772317073"} ;NREUM.info={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net",licenseKey:"97f8f67f26",applicationID:"772317073",sa:1} ;/*! For license information please see nr-loader-spa-1.236.0.min.js.LICENSE.txt */ (()=>{"use strict";var e,t,r={5763:(e,t,r)=>{r.d(t,{P_:()=>l,Mt:()=>g,C5:()=>s,DL:()=>v,OP:()=>T,lF:()=>D,Yu:()=>y,Dg:()=>h,CX:()=>c,GE:()=>b,sU:()=>_});var n=r(8632),i=r(9567);const o={beacon:n.ce.beacon,errorBeacon:n.ce.errorBeacon,licenseKey:void 0,applicationID:void 0,sa:void 0,queueTime:void 0,applicationTime:void 0,ttGuid:void 0,user:void 0,account:void 0,product:void 0,extra:void 0,jsAttributes:{},userAttributes:void 0,atts:void 0,transactionName:void 0,tNamePlain:void 0},a={};function s(e){if(!e)throw new Error("All info objects require an agent identifier!");if(!a[e])throw new Error("Info for ".concat(e," was never set"));return a[e]}function c(e,t){if(!e)throw new Error("All info objects require an agent identifier!");a[e]=(0,i.D)(t,o),(0,n.Qy)(e,a[e],"info")}var u=r(7056);const d=()=>{const e={blockSelector:"[data-nr-block]",maskInputOptions:{password:!0}};return{allow_bfcache:!0,privacy:{cookies_enabled:!0},ajax:{deny_list:void 0,enabled:!0,harvestTimeSeconds:10},distributed_tracing:{enabled:void 0,exclude_newrelic_header:void 0,cors_use_newrelic_header:void 0,cors_use_tracecontext_headers:void 0,allowed_origins:void 0},session:{domain:void 0,expiresMs:u.oD,inactiveMs:u.Hb},ssl:void 0,obfuscate:void 0,jserrors:{enabled:!0,harvestTimeSeconds:10},metrics:{enabled:!0},page_action:{enabled:!0,harvestTimeSeconds:30},page_view_event:{enabled:!0},page_view_timing:{enabled:!0,harvestTimeSeconds:30,long_task:!1},session_trace:{enabled:!0,harvestTimeSeconds:10},harvest:{tooManyRequestsDelay:60},session_replay:{enabled:!1,harvestTimeSeconds:60,sampleRate:.1,errorSampleRate:.1,maskTextSelector:"*",maskAllInputs:!0,get blockClass(){return"nr-block"},get ignoreClass(){return"nr-ignore"},get maskTextClass(){return"nr-mask"},get blockSelector(){return e.blockSelector},set blockSelector(t){e.blockSelector+=",".concat(t)},get maskInputOptions(){return e.maskInputOptions},set maskInputOptions(t){e.maskInputOptions={...t,password:!0}}},spa:{enabled:!0,harvestTimeSeconds:10}}},f={};function l(e){if(!e)throw new Error("All configuration objects require an agent identifier!");if(!f[e])throw new Error("Configuration for ".concat(e," was never set"));return f[e]}function h(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");f[e]=(0,i.D)(t,d()),(0,n.Qy)(e,f[e],"config")}function g(e,t){if(!e)throw new Error("All configuration objects require an agent identifier!");var r=l(e);if(r){for(var n=t.split("."),i=0;i {r.d(t,{D:()=>i});var n=r(50);function i(e,t){try{if(!e||"object"!=typeof e)return(0,n.Z)("Setting a Configurable requires an object as input");if(!t||"object"!=typeof t)return(0,n.Z)("Setting a Configurable requires a model to set its initial properties");const r=Object.create(Object.getPrototypeOf(t),Object.getOwnPropertyDescriptors(t)),o=0===Object.keys(r).length?e:r;for(let a in o)if(void 0!==e[a])try{"object"==typeof e[a]&&"object"==typeof t[a]?r[a]=i(e[a],t[a]):r[a]=e[a]}catch(e){(0,n.Z)("An error occurred while setting a property of a Configurable",e)}return r}catch(e){(0,n.Z)("An error occured while setting a Configurable",e)}}},6818:(e,t,r)=>{r.d(t,{Re:()=>i,gF:()=>o,q4:()=>n});const n="1.236.0",i="PROD",o="CDN"},385:(e,t,r)=>{r.d(t,{FN:()=>a,IF:()=>u,Nk:()=>f,Tt:()=>s,_A:()=>o,il:()=>n,pL:()=>c,v6:()=>i,w1:()=>d});const n="undefined"!=typeof window&&!!window.document,i="undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self.navigator instanceof WorkerNavigator||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis.navigator instanceof WorkerNavigator),o=n?window:"undefined"!=typeof WorkerGlobalScope&&("undefined"!=typeof self&&self instanceof WorkerGlobalScope&&self||"undefined"!=typeof globalThis&&globalThis instanceof WorkerGlobalScope&&globalThis),a=""+o?.location,s=/iPad|iPhone|iPod/.test(navigator.userAgent),c=s&&"undefined"==typeof SharedWorker,u=(()=>{const e=navigator.userAgent.match(/Firefox[/\s](\d+\.\d+)/);return Array.isArray(e)&&e.length>=2?+e[1]:0})(),d=Boolean(n&&window.document.documentMode),f=!!navigator.sendBeacon},1117:(e,t,r)=>{r.d(t,{w:()=>o});var n=r(50);const i={agentIdentifier:"",ee:void 0};class o{constructor(e){try{if("object"!=typeof e)return(0,n.Z)("shared context requires an object as input");this.sharedContext={},Object.assign(this.sharedContext,i),Object.entries(e).forEach((e=>{let[t,r]=e;Object.keys(i).includes(t)&&(this.sharedContext[t]=r)}))}catch(e){(0,n.Z)("An error occured while setting SharedContext",e)}}}},8e3:(e,t,r)=>{r.d(t,{L:()=>d,R:()=>c});var n=r(2177),i=r(1284),o=r(4322),a=r(3325);const s={};function c(e,t){const r={staged:!1,priority:a.p[t]||0};u(e),s[e].get(t)||s[e].set(t,r)}function u(e){e&&(s[e]||(s[e]=new Map))}function d(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:"",t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"feature";if(u(e),!e||!s[e].get(t))return a(t);s[e].get(t).staged=!0;const r=[...s[e]];function a(t){const r=e?n.ee.get(e):n.ee,a=o.X.handlers;if(r.backlog&&a){var s=r.backlog[t],c=a[t];if(c){for(var u=0;s&&u {let[t,r]=e;return r.staged}))&&(r.sort(((e,t)=>e[1].priority-t[1].priority)),r.forEach((e=>{let[t]=e;a(t)})))}function f(e,t){var r=e[1];(0,i.D)(t[r],(function(t,r){var n=e[0];if(r[0]===n){var i=r[1],o=e[3],a=e[2];i.apply(o,a)}}))}},2177:(e,t,r)=>{r.d(t,{c:()=>f,ee:()=>u});var n=r(8632),i=r(2210),o=r(1284),a=r(5763),s="nr@context";let c=(0,n.fP)();var u;function d(){}function f(e){return(0,i.X)(e,s,l)}function l(){return new d}function h(){u.aborted=!0,u.backlog={}}c.ee?u=c.ee:(u=function e(t,r){var n={},c={},f={},g=!1;try{g=16===r.length&&(0,a.OP)(r).isolatedBacklog}catch(e){}var p={on:b,addEventListener:b,removeEventListener:y,emit:v,get:x,listeners:w,context:m,buffer:A,abort:h,aborted:!1,isBuffering:E,debugId:r,backlog:g?{}:t&&"object"==typeof t.backlog?t.backlog:{}};return p;function m(e){return e&&e instanceof d?e:e?(0,i.X)(e,s,l):l()}function v(e,r,n,i,o){if(!1!==o&&(o=!0),!u.aborted||i){t&&o&&t.emit(e,r,n);for(var a=m(n),s=w(e),d=s.length,f=0;fn,p:()=>i});var n=r(2177).ee.get("handle");function i(e,t,r,i,o){o?(o.buffer([e],i),o.emit(e,t,r)):(n.buffer([e],i),n.emit(e,t,r))}},4322:(e,t,r)=>{r.d(t,{X:()=>o});var n=r(5546);o.on=a;var i=o.handlers={};function o(e,t,r,o){a(o||n.E,i,e,t,r)}function a(e,t,r,i,o){o||(o="feature"),e||(e=n.E);var a=t[o]=t[o]||{};(a[r]=a[r]||[]).push([e,i])}},3239:(e,t,r)=>{r.d(t,{bP:()=>s,iz:()=>c,m$:()=>a});var n=r(385);let i=!1,o=!1;try{const e={get passive(){return i=!0,!1},get signal(){return o=!0,!1}};n._A.addEventListener("test",null,e),n._A.removeEventListener("test",null,e)}catch(e){}function a(e,t){return i||o?{capture:!!e,passive:i,signal:t}:!!e}function s(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;window.addEventListener(e,t,a(r,n))}function c(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2],n=arguments.length>3?arguments[3]:void 0;document.addEventListener(e,t,a(r,n))}},4402:(e,t,r)=>{r.d(t,{Ht:()=>u,M:()=>c,Rl:()=>a,ky:()=>s});var n=r(385);const i="xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx";function o(e,t){return e?15&e[t]:16*Math.random()|0}function a(){const e=n._A?.crypto||n._A?.msCrypto;let t,r=0;return e&&e.getRandomValues&&(t=e.getRandomValues(new Uint8Array(31))),i.split("").map((e=>"x"===e?o(t,++r).toString(16):"y"===e?(3&o()|8).toString(16):e)).join("")}function s(e){const t=n._A?.crypto||n._A?.msCrypto;let r,i=0;t&&t.getRandomValues&&(r=t.getRandomValues(new Uint8Array(31)));const a=[];for(var s=0;s {r.d(t,{Bq:()=>n,Hb:()=>o,oD:()=>i});const n="NRBA",i=144e5,o=18e5},7894:(e,t,r)=>{function n(){return Math.round(performance.now())}r.d(t,{z:()=>n})},7243:(e,t,r)=>{r.d(t,{e:()=>o});var n=r(385),i={};function o(e){if(e in i)return i[e];if(0===(e||"").indexOf("data:"))return{protocol:"data"};let t;var r=n._A?.location,o={};if(n.il)t=document.createElement("a"),t.href=e;else try{t=new URL(e,r.href)}catch(e){return o}o.port=t.port;var a=t.href.split("://");!o.port&&a[1]&&(o.port=a[1].split("/")[0].split("@").pop().split(":")[1]),o.port&&"0"!==o.port||(o.port="https"===a[0]?"443":"80"),o.hostname=t.hostname||r.hostname,o.pathname=t.pathname,o.protocol=a[0],"/"!==o.pathname.charAt(0)&&(o.pathname="/"+o.pathname);var s=!t.protocol||":"===t.protocol||t.protocol===r.protocol,c=t.hostname===r.hostname&&t.port===r.port;return o.sameOrigin=s&&(!t.hostname||c),"/"===o.pathname&&(i[e]=o),o}},50:(e,t,r)=>{function n(e,t){"function"==typeof console.warn&&(console.warn("New Relic: ".concat(e)),t&&console.warn(t))}r.d(t,{Z:()=>n})},2587:(e,t,r)=>{r.d(t,{N:()=>c,T:()=>u});var n=r(2177),i=r(5546),o=r(8e3),a=r(3325);const s={stn:[a.D.sessionTrace],err:[a.D.jserrors,a.D.metrics],ins:[a.D.pageAction],spa:[a.D.spa],sr:[a.D.sessionReplay,a.D.sessionTrace]};function c(e,t){const r=n.ee.get(t);e&&"object"==typeof e&&(Object.entries(e).forEach((e=>{let[t,n]=e;void 0===u[t]&&(s[t]?s[t].forEach((e=>{n?(0,i.p)("feat-"+t,[],void 0,e,r):(0,i.p)("block-"+t,[],void 0,e,r),(0,i.p)("rumresp-"+t,[Boolean(n)],void 0,e,r)})):n&&(0,i.p)("feat-"+t,[],void 0,void 0,r),u[t]=Boolean(n))})),Object.keys(s).forEach((e=>{void 0===u[e]&&(s[e]?.forEach((t=>(0,i.p)("rumresp-"+e,[!1],void 0,t,r))),u[e]=!1)})),(0,o.L)(t,a.D.pageViewEvent))}const u={}},2210:(e,t,r)=>{r.d(t,{X:()=>i});var n=Object.prototype.hasOwnProperty;function i(e,t,r){if(n.call(e,t))return e[t];var i=r();if(Object.defineProperty&&Object.keys)try{return Object.defineProperty(e,t,{value:i,writable:!0,enumerable:!1}),i}catch(e){}return e[t]=i,i}},1284:(e,t,r)=>{r.d(t,{D:()=>n});const n=(e,t)=>Object.entries(e||{}).map((e=>{let[r,n]=e;return t(r,n)}))},4351:(e,t,r)=>{r.d(t,{P:()=>o});var n=r(2177);const i=()=>{const e=new WeakSet;return(t,r)=>{if("object"==typeof r&&null!==r){if(e.has(r))return;e.add(r)}return r}};function o(e){try{return JSON.stringify(e,i())}catch(e){try{n.ee.emit("internal-error",[e])}catch(e){}}}},3960:(e,t,r)=>{r.d(t,{K:()=>a,b:()=>o});var n=r(3239);function i(){return"undefined"==typeof document||"complete"===document.readyState}function o(e,t){if(i())return e();(0,n.bP)("load",e,t)}function a(e){if(i())return e();(0,n.iz)("DOMContentLoaded",e)}},8632:(e,t,r)=>{r.d(t,{EZ:()=>u,Qy:()=>c,ce:()=>o,fP:()=>a,gG:()=>d,mF:()=>s});var n=r(7894),i=r(385);const o={beacon:"bam.nr-data.net",errorBeacon:"bam.nr-data.net"};function a(){return i._A.NREUM||(i._A.NREUM={}),void 0===i._A.newrelic&&(i._A.newrelic=i._A.NREUM),i._A.NREUM}function s(){let e=a();return e.o||(e.o={ST:i._A.setTimeout,SI:i._A.setImmediate,CT:i._A.clearTimeout,XHR:i._A.XMLHttpRequest,REQ:i._A.Request,EV:i._A.Event,PR:i._A.Promise,MO:i._A.MutationObserver,FETCH:i._A.fetch}),e}function c(e,t,r){let i=a();const o=i.initializedAgents||{},s=o[e]||{};return Object.keys(s).length||(s.initializedAt={ms:(0,n.z)(),date:new Date}),i.initializedAgents={...o,[e]:{...s,[r]:t}},i}function u(e,t){a()[e]=t}function d(){return function(){let e=a();const t=e.info||{};e.info={beacon:o.beacon,errorBeacon:o.errorBeacon,...t}}(),function(){let e=a();const t=e.init||{};e.init={...t}}(),s(),function(){let e=a();const t=e.loader_config||{};e.loader_config={...t}}(),a()}},7956:(e,t,r)=>{r.d(t,{N:()=>i});var n=r(3239);function i(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],r=arguments.length>2?arguments[2]:void 0,i=arguments.length>3?arguments[3]:void 0;return void(0,n.iz)("visibilitychange",(function(){if(t)return void("hidden"==document.visibilityState&&e());e(document.visibilityState)}),r,i)}},1214:(e,t,r)=>{r.d(t,{em:()=>v,u5:()=>N,QU:()=>S,_L:()=>I,Gm:()=>L,Lg:()=>M,gy:()=>U,BV:()=>Q,Kf:()=>ee});var n=r(2177);const i="nr@original";var o=Object.prototype.hasOwnProperty,a=!1;function s(e,t){return e||(e=n.ee),r.inPlace=function(e,t,n,i,o){n||(n="");var a,s,c,u="-"===n.charAt(0);for(c=0;c 2?n-2:0),o=2;o {r(A[T],e,w),r(E[T],e,w)})),r(l._A,"fetch",y),t.on(y+"end",(function(e,r){var n=this;if(r){var i=r.headers.get("content-length");null!==i&&(n.rxSize=i),t.emit(y+"done",[null,r],n)}else t.emit(y+"done",[e],n)})),t}const O={},j=["pushState","replaceState"];function S(e){const t=function(e){return(e||n.ee).get("history")}(e);return!l.il||O[t.debugId]++||(O[t.debugId]=1,s(t).inPlace(window.history,j,"-")),t}var P=r(3239);const C={},R=["appendChild","insertBefore","replaceChild"];function I(e){const t=function(e){return(e||n.ee).get("jsonp")}(e);if(!l.il||C[t.debugId])return t;C[t.debugId]=!0;var r=s(t),i=/[?&](?:callback|cb)=([^&#]+)/,o=/(.*)\.([^.]+)/,a=/^(\w+)(\.|$)(.*)$/;function c(e,t){var r=e.match(a),n=r[1],i=r[3];return i?c(i,t[n]):t[n]}return r.inPlace(Node.prototype,R,"dom-"),t.on("dom-start",(function(e){!function(e){if(!e||"string"!=typeof e.nodeName||"script"!==e.nodeName.toLowerCase())return;if("function"!=typeof e.addEventListener)return;var n=(a=e.src,s=a.match(i),s?s[1]:null);var a,s;if(!n)return;var u=function(e){var t=e.match(o);if(t&&t.length>=3)return{key:t[2],parent:c(t[1],window)};return{key:e,parent:window}}(n);if("function"!=typeof u.parent[u.key])return;var d={};function f(){t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}function l(){t.emit("jsonp-error",[],d),t.emit("jsonp-end",[],d),e.removeEventListener("load",f,(0,P.m$)(!1)),e.removeEventListener("error",l,(0,P.m$)(!1))}r.inPlace(u.parent,[u.key],"cb-",d),e.addEventListener("load",f,(0,P.m$)(!1)),e.addEventListener("error",l,(0,P.m$)(!1)),t.emit("new-jsonp",[e.src],d)}(e[0])})),t}var k=r(5763);const H={};function L(e){const t=function(e){return(e||n.ee).get("mutation")}(e);if(!l.il||H[t.debugId])return t;H[t.debugId]=!0;var r=s(t),i=k.Yu.MO;return i&&(window.MutationObserver=function(e){return this instanceof i?new i(r(e,"fn-")):i.apply(this,arguments)},MutationObserver.prototype=i.prototype),t}const z={};function M(e){const t=function(e){return(e||n.ee).get("promise")}(e);if(z[t.debugId])return t;z[t.debugId]=!0;var r=n.c,o=s(t),a=k.Yu.PR;return a&&function(){function e(r){var n=t.context(),i=o(r,"executor-",n,null,!1);const s=Reflect.construct(a,[i],e);return t.context(s).getCtx=function(){return n},s}l._A.Promise=e,Object.defineProperty(e,"name",{value:"Promise"}),e.toString=function(){return a.toString()},Object.setPrototypeOf(e,a),["all","race"].forEach((function(r){const n=a[r];e[r]=function(e){let i=!1;[...e||[]].forEach((e=>{this.resolve(e).then(a("all"===r),a(!1))}));const o=n.apply(this,arguments);return o;function a(e){return function(){t.emit("propagate",[null,!i],o,!1,!1),i=i||!e}}}})),["resolve","reject"].forEach((function(r){const n=a[r];e[r]=function(e){const r=n.apply(this,arguments);return e!==r&&t.emit("propagate",[e,!0],r,!1,!1),r}})),e.prototype=a.prototype;const n=a.prototype.then;a.prototype.then=function(){var e=this,i=r(e);i.promise=e;for(var a=arguments.length,s=new Array(a),c=0;c e())),t};function m(e,t){i.inPlace(t,["onreadystatechange"],"fn-",E)}function b(){var e=this,t=r.context(e);e.readyState>3&&!t.resolved&&(t.resolved=!0,r.emit("xhr-resolved",[],e)),i.inPlace(e,f,"fn-",E)}if(function(e,t){for(var r in e)t[r]=e[r]}(o,p),p.prototype=o.prototype,i.inPlace(p.prototype,J,"-xhr-",E),r.on("send-xhr-start",(function(e,t){m(e,t),function(e){h.push(e),a&&(y?y.then(A):u?u(A):(w=-w,x.data=w))}(t)})),r.on("open-xhr-start",m),a){var y=c&&c.resolve();if(!u&&!c){var w=1,x=document.createTextNode(w);new a(A).observe(x,{characterData:!0})}}else t.on("fn-end",(function(e){e[0]&&e[0].type===d||A()}));function A(){for(var e=0;e {r.d(t,{t:()=>n});const n=r(3325).D.ajax},6660:(e,t,r)=>{r.d(t,{A:()=>i,t:()=>n});const n=r(3325).D.jserrors,i="nr@seenError"},3081:(e,t,r)=>{r.d(t,{gF:()=>o,mY:()=>i,t9:()=>n,vz:()=>s,xS:()=>a});const n=r(3325).D.metrics,i="sm",o="cm",a="storeSupportabilityMetrics",s="storeEventMetrics"},4649:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageAction},7633:(e,t,r)=>{r.d(t,{Dz:()=>i,OJ:()=>a,qw:()=>o,t9:()=>n});const n=r(3325).D.pageViewEvent,i="firstbyte",o="domcontent",a="windowload"},9251:(e,t,r)=>{r.d(t,{t:()=>n});const n=r(3325).D.pageViewTiming},3614:(e,t,r)=>{r.d(t,{BST_RESOURCE:()=>i,END:()=>s,FEATURE_NAME:()=>n,FN_END:()=>u,FN_START:()=>c,PUSH_STATE:()=>d,RESOURCE:()=>o,START:()=>a});const n=r(3325).D.sessionTrace,i="bstResource",o="resource",a="-start",s="-end",c="fn"+a,u="fn"+s,d="pushState"},7836:(e,t,r)=>{r.d(t,{BODY:()=>A,CB_END:()=>E,CB_START:()=>u,END:()=>x,FEATURE_NAME:()=>i,FETCH:()=>_,FETCH_BODY:()=>v,FETCH_DONE:()=>m,FETCH_START:()=>p,FN_END:()=>c,FN_START:()=>s,INTERACTION:()=>l,INTERACTION_API:()=>d,INTERACTION_EVENTS:()=>o,JSONP_END:()=>b,JSONP_NODE:()=>g,JS_TIME:()=>T,MAX_TIMER_BUDGET:()=>a,REMAINING:()=>f,SPA_NODE:()=>h,START:()=>w,originalSetTimeout:()=>y});var n=r(5763);const i=r(3325).D.spa,o=["click","submit","keypress","keydown","keyup","change"],a=999,s="fn-start",c="fn-end",u="cb-start",d="api-ixn-",f="remaining",l="interaction",h="spaNode",g="jsonpNode",p="fetch-start",m="fetch-done",v="fetch-body-",b="jsonp-end",y=n.Yu.ST,w="-start",x="-end",A="-body",E="cb"+x,T="jsTime",_="fetch"},5938:(e,t,r)=>{r.d(t,{W:()=>o});var n=r(5763),i=r(2177);class o{constructor(e,t,r){this.agentIdentifier=e,this.aggregator=t,this.ee=i.ee.get(e,(0,n.OP)(this.agentIdentifier).isolatedBacklog),this.featureName=r,this.blocked=!1}}},9144:(e,t,r)=>{r.d(t,{j:()=>m});var n=r(3325),i=r(5763),o=r(5546),a=r(2177),s=r(7894),c=r(8e3),u=r(3960),d=r(385),f=r(50),l=r(3081),h=r(8632);function g(){const e=(0,h.gG)();["setErrorHandler","finished","addToTrace","inlineHit","addRelease","addPageAction","setCurrentRouteName","setPageViewName","setCustomAttribute","interaction","noticeError","setUserId"].forEach((t=>{e[t]=function(){for(var r=arguments.length,n=new Array(r),i=0;i 1?r-1:0),i=1;i {e.exposed&&e.api[t]&&o.push(e.api[t](...n))})),o.length>1?o:o[0]}(t,...n)}}))}var p=r(2587);function m(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},m=arguments.length>2?arguments[2]:void 0,v=arguments.length>3?arguments[3]:void 0,{init:b,info:y,loader_config:w,runtime:x={loaderType:m},exposed:A=!0}=t;const E=(0,h.gG)();y||(b=E.init,y=E.info,w=E.loader_config),(0,i.Dg)(e,b||{}),(0,i.GE)(e,w||{}),(0,i.sU)(e,x),y.jsAttributes??={},d.v6&&(y.jsAttributes.isWorker=!0),(0,i.CX)(e,y),g();const T=function(e,t){t||(0,c.R)(e,"api");const h={};var g=a.ee.get(e),p=g.get("tracer"),m="api-",v=m+"ixn-";function b(t,r,n,o){const a=(0,i.C5)(e);return null===r?delete a.jsAttributes[t]:(0,i.CX)(e,{...a,jsAttributes:{...a.jsAttributes,[t]:r}}),x(m,n,!0,o||null===r?"session":void 0)(t,r)}function y(){}["setErrorHandler","finished","addToTrace","inlineHit","addRelease"].forEach((e=>h[e]=x(m,e,!0,"api"))),h.addPageAction=x(m,"addPageAction",!0,n.D.pageAction),h.setCurrentRouteName=x(m,"routeName",!0,n.D.spa),h.setPageViewName=function(t,r){if("string"==typeof t)return"/"!==t.charAt(0)&&(t="/"+t),(0,i.OP)(e).customTransaction=(r||"http://custom.transaction")+t,x(m,"setPageViewName",!0)()},h.setCustomAttribute=function(e,t){let r=arguments.length>2&&void 0!==arguments[2]&&arguments[2];if("string"==typeof e){if(["string","number"].includes(typeof t)||null===t)return b(e,t,"setCustomAttribute",r);(0,f.Z)("Failed to execute setCustomAttribute.\nNon-null value must be a string or number type, but a type of was provided."))}else(0,f.Z)("Failed to execute setCustomAttribute.\nName must be a string type, but a type of was provided."))},h.setUserId=function(e){if("string"==typeof e||null===e)return b("enduser.id",e,"setUserId",!0);(0,f.Z)("Failed to execute setUserId.\nNon-null value must be a string type, but a type of was provided."))},h.interaction=function(){return(new y).get()};var w=y.prototype={createTracer:function(e,t){var r={},i=this,a="function"==typeof t;return(0,o.p)(v+"tracer",[(0,s.z)(),e,r],i,n.D.spa,g),function(){if(p.emit((a?"":"no-")+"fn-start",[(0,s.z)(),i,a],r),a)try{return t.apply(this,arguments)}catch(e){throw p.emit("fn-err",[arguments,this,"string"==typeof e?new Error(e):e],r),e}finally{p.emit("fn-end",[(0,s.z)()],r)}}}};function x(e,t,r,i){return function(){return(0,o.p)(l.xS,["API/"+t+"/called"],void 0,n.D.metrics,g),i&&(0,o.p)(e+t,[(0,s.z)(),...arguments],r?null:this,i,g),r?void 0:this}}function A(){r.e(439).then(r.bind(r,7438)).then((t=>{let{setAPI:r}=t;r(e),(0,c.L)(e,"api")})).catch((()=>(0,f.Z)("Downloading runtime APIs failed...")))}return["actionText","setName","setAttribute","save","ignore","onEnd","getContext","end","get"].forEach((e=>{w[e]=x(v,e,void 0,n.D.spa)})),h.noticeError=function(e,t){"string"==typeof e&&(e=new Error(e)),(0,o.p)(l.xS,["API/noticeError/called"],void 0,n.D.metrics,g),(0,o.p)("err",[e,(0,s.z)(),!1,t],void 0,n.D.jserrors,g)},d.il?(0,u.b)((()=>A()),!0):A(),h}(e,v);return(0,h.Qy)(e,T,"api"),(0,h.Qy)(e,A,"exposed"),(0,h.EZ)("activatedFeatures",p.T),T}},3325:(e,t,r)=>{r.d(t,{D:()=>n,p:()=>i});const n={ajax:"ajax",jserrors:"jserrors",metrics:"metrics",pageAction:"page_action",pageViewEvent:"page_view_event",pageViewTiming:"page_view_timing",sessionReplay:"session_replay",sessionTrace:"session_trace",spa:"spa"},i={[n.pageViewEvent]:1,[n.pageViewTiming]:2,[n.metrics]:3,[n.jserrors]:4,[n.ajax]:5,[n.sessionTrace]:6,[n.pageAction]:7,[n.spa]:8,[n.sessionReplay]:9}}},n={};function i(e){var t=n[e];if(void 0!==t)return t.exports;var o=n[e]={exports:{}};return r[e](o,o.exports,i),o.exports}i.m=r,i.d=(e,t)=>{for(var r in t)i.o(t,r)&&!i.o(e,r)&&Object.defineProperty(e,r,{enumerable:!0,get:t[r]})},i.f={},i.e=e=>Promise.all(Object.keys(i.f).reduce(((t,r)=>(i.f[r](e,t),t)),[])),i.u=e=>(({78:"page_action-aggregate",147:"metrics-aggregate",242:"session-manager",317:"jserrors-aggregate",348:"page_view_timing-aggregate",412:"lazy-feature-loader",439:"async-api",538:"recorder",590:"session_replay-aggregate",675:"compressor",733:"session_trace-aggregate",786:"page_view_event-aggregate",873:"spa-aggregate",898:"ajax-aggregate"}[e]||e)+"."+{78:"ac76d497",147:"3dc53903",148:"1a20d5fe",242:"2a64278a",317:"49e41428",348:"bd6de33a",412:"2f55ce66",439:"30bd804e",538:"1b18459f",590:"cf0efb30",675:"ae9f91a8",733:"83105561",786:"06482edd",860:"03a8b7a5",873:"e6b09d52",898:"998ef92b"}[e]+"-1.236.0.min.js"),i.o=(e,t)=>Object.prototype.hasOwnProperty.call(e,t),e={},t="NRBA:",i.l=(r,n,o,a)=>{if(e[r])e[r].push(n);else{var s,c;if(void 0!==o)for(var u=document.getElementsByTagName("script"),d=0;d {s.onerror=s.onload=null,clearTimeout(h);var i=e[r];if(delete e[r],s.parentNode&&s.parentNode.removeChild(s),i&&i.forEach((e=>e(n))),t)return t(n)},h=setTimeout(l.bind(null,void 0,{type:"timeout",target:s}),12e4);s.onerror=l.bind(null,s.onerror),s.onload=l.bind(null,s.onload),c&&document.head.appendChild(s)}},i.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},i.j=364,i.p="https://js-agent.newrelic.com/",(()=>{var e={364:0,953:0};i.f.j=(t,r)=>{var n=i.o(e,t)?e[t]:void 0;if(0!==n)if(n)r.push(n[2]);else{var o=new Promise(((r,i)=>n=e[t]=[r,i]));r.push(n[2]=o);var a=i.p+i.u(t),s=new Error;i.l(a,(r=>{if(i.o(e,t)&&(0!==(n=e[t])&&(e[t]=void 0),n)){var o=r&&("load"===r.type?"missing":r.type),a=r&&r.target&&r.target.src;s.message="Loading chunk "+t+" failed.\n("+o+": "+a+")",s.name="ChunkLoadError",s.type=o,s.request=a,n[1](s)}}),"chunk-"+t,t)}};var t=(t,r)=>{var n,o,[a,s,c]=r,u=0;if(a.some((t=>0!==e[t]))){for(n in s)i.o(s,n)&&(i.m[n]=s[n]);if(c)c(i)}for(t&&t(r);u {i.r(o);var e=i(3325),t=i(5763);const r=Object.values(e.D);function n(e){const n={};return r.forEach((r=>{n[r]=function(e,r){return!1!==(0,t.Mt)(r,"".concat(e,".enabled"))}(r,e)})),n}var a=i(9144);var s=i(5546),c=i(385),u=i(8e3),d=i(5938),f=i(3960),l=i(50);class h extends d.W{constructor(e,t,r){let n=!(arguments.length>3&&void 0!==arguments[3])||arguments[3];super(e,t,r),this.auto=n,this.abortHandler,this.featAggregate,this.onAggregateImported,n&&(0,u.R)(e,r)}importAggregator(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{};if(this.featAggregate||!this.auto)return;const r=c.il&&!0===(0,t.Mt)(this.agentIdentifier,"privacy.cookies_enabled");let n;this.onAggregateImported=new Promise((e=>{n=e}));const o=async()=>{let t;try{if(r){const{setupAgentSession:e}=await Promise.all([i.e(860),i.e(242)]).then(i.bind(i,3228));t=e(this.agentIdentifier)}}catch(e){(0,l.Z)("A problem occurred when starting up session manager. This page will not start or extend any session.",e)}try{if(!this.shouldImportAgg(this.featureName,t))return void(0,u.L)(this.agentIdentifier,this.featureName);const{lazyFeatureLoader:r}=await i.e(412).then(i.bind(i,8582)),{Aggregate:o}=await r(this.featureName,"aggregate");this.featAggregate=new o(this.agentIdentifier,this.aggregator,e),n(!0)}catch(e){(0,l.Z)("Downloading and initializing ".concat(this.featureName," failed..."),e),this.abortHandler?.(),n(!1)}};c.il?(0,f.b)((()=>o()),!0):o()}shouldImportAgg(r,n){return r!==e.D.sessionReplay||!1!==(0,t.Mt)(this.agentIdentifier,"session_trace.enabled")&&(!!n?.isNew||!!n?.state.sessionReplay)}}var g=i(7633),p=i(7894);class m extends h{static featureName=g.t9;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];if(super(r,n,g.t9,i),("undefined"==typeof PerformanceNavigationTiming||c.Tt)&&"undefined"!=typeof PerformanceTiming){const n=(0,t.OP)(r);n[g.Dz]=Math.max(Date.now()-n.offset,0),(0,f.K)((()=>n[g.qw]=Math.max((0,p.z)()-n[g.Dz],0))),(0,f.b)((()=>{const t=(0,p.z)();n[g.OJ]=Math.max(t-n[g.Dz],0),(0,s.p)("timing",["load",t],void 0,e.D.pageViewTiming,this.ee)}))}this.importAggregator()}}var v=i(1117),b=i(1284);class y extends v.w{constructor(e){super(e),this.aggregatedData={}}store(e,t,r,n,i){var o=this.getBucket(e,t,r,i);return o.metrics=function(e,t){t||(t={count:0});return t.count+=1,(0,b.D)(e,(function(e,r){t[e]=w(r,t[e])})),t}(n,o.metrics),o}merge(e,t,r,n,i){var o=this.getBucket(e,t,n,i);if(o.metrics){var a=o.metrics;a.count+=r.count,(0,b.D)(r,(function(e,t){if("count"!==e){var n=a[e],i=r[e];i&&!i.c?a[e]=w(i.t,n):a[e]=function(e,t){if(!t)return e;t.c||(t=x(t.t));return t.min=Math.min(e.min,t.min),t.max=Math.max(e.max,t.max),t.t+=e.t,t.sos+=e.sos,t.c+=e.c,t}(i,a[e])}}))}else o.metrics=r}storeMetric(e,t,r,n){var i=this.getBucket(e,t,r);return i.stats=w(n,i.stats),i}getBucket(e,t,r,n){this.aggregatedData[e]||(this.aggregatedData[e]={});var i=this.aggregatedData[e][t];return i||(i=this.aggregatedData[e][t]={params:r||{}},n&&(i.custom=n)),i}get(e,t){return t?this.aggregatedData[e]&&this.aggregatedData[e][t]:this.aggregatedData[e]}take(e){for(var t={},r="",n=!1,i=0;i t.max&&(t.max=e),e 2&&void 0!==arguments[2])||arguments[2];super(e,r,j.t,n),c.il&&((0,t.OP)(e).initHidden=Boolean("hidden"===document.visibilityState),(0,N.N)((()=>(0,s.p)("docHidden",[(0,p.z)()],void 0,j.t,this.ee)),!0),(0,O.bP)("pagehide",(()=>(0,s.p)("winPagehide",[(0,p.z)()],void 0,j.t,this.ee))),this.importAggregator())}}var P=i(3081);class C extends h{static featureName=P.t9;constructor(e,t){let r=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(e,t,P.t9,r),this.importAggregator()}}var R,I=i(2210),k=i(1214),H=i(2177),L={};try{R=localStorage.getItem("__nr_flags").split(","),console&&"function"==typeof console.log&&(L.console=!0,-1!==R.indexOf("dev")&&(L.dev=!0),-1!==R.indexOf("nr_dev")&&(L.nrDev=!0))}catch(e){}function z(e){try{L.console&&z(e)}catch(e){}}L.nrDev&&H.ee.on("internal-error",(function(e){z(e.stack)})),L.dev&&H.ee.on("fn-err",(function(e,t,r){z(r.stack)})),L.dev&&(z("NR AGENT IN DEVELOPMENT MODE"),z("flags: "+(0,b.D)(L,(function(e,t){return e})).join(", ")));var M=i(6660);class B extends h{static featureName=M.t;constructor(r,n){let i=!(arguments.length>2&&void 0!==arguments[2])||arguments[2];super(r,n,M.t,i),this.skipNext=0;try{this.removeOnAbort=new AbortController}catch(e){}const o=this;o.ee.on("fn-start",(function(e,t,r){o.abortHandler&&(o.skipNext+=1)})),o.ee.on("fn-err",(function(t,r,n){o.abortHandler&&!n[M.A]&&((0,I.X)(n,M.A,(function(){return!0})),this.thrown=!0,(0,s.p)("err",[n,(0,p.z)()],void 0,e.D.jserrors,o.ee))})),o.ee.on("fn-end",(function(){o.abortHandler&&!this.thrown&&o.skipNext>0&&(o.skipNext-=1)})),o.ee.on("internal-error",(function(t){(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,o.ee)})),this.origOnerror=c._A.onerror,c._A.onerror=this.onerrorHandler.bind(this),c._A.addEventListener("unhandledrejection",(t=>{const r=function(e){let t="Unhandled Promise Rejection: ";if(e instanceof Error)try{return e.message=t+e.message,e}catch(t){return e}if(void 0===e)return new Error(t);try{return new Error(t+(0,D.P)(e))}catch(e){return new Error(t)}}(t.reason);(0,s.p)("err",[r,(0,p.z)(),!1,{unhandledPromiseRejection:1}],void 0,e.D.jserrors,this.ee)}),(0,O.m$)(!1,this.removeOnAbort?.signal)),(0,k.gy)(this.ee),(0,k.BV)(this.ee),(0,k.em)(this.ee),(0,t.OP)(r).xhrWrappable&&(0,k.Kf)(this.ee),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}onerrorHandler(t,r,n,i,o){"function"==typeof this.origOnerror&&this.origOnerror(...arguments);try{this.skipNext?this.skipNext-=1:(0,s.p)("err",[o||new F(t,r,n),(0,p.z)()],void 0,e.D.jserrors,this.ee)}catch(t){try{(0,s.p)("ierr",[t,(0,p.z)(),!0],void 0,e.D.jserrors,this.ee)}catch(e){}}return!1}}function F(e,t,r){this.message=e||"Uncaught error with no additional information",this.sourceURL=t,this.line=r}let U=1;const q="nr@id";function G(e){const t=typeof e;return!e||"object"!==t&&"function"!==t?-1:e===c._A?0:(0,I.X)(e,q,(function(){return U++}))}function V(e){if("string"==typeof e&&e.length)return e.length;if("object"==typeof e){if("undefined"!=typeof ArrayBuffer&&e instanceof ArrayBuffer&&e.byteLength)return e.byteLength;if("undefined"!=typeof Blob&&e instanceof Blob&&e.size)return e.size;if(!("undefined"!=typeof FormData&&e instanceof FormData))try{return(0,D.P)(e).length}catch(e){return}}}var X=i(7243);class W{constructor(e){this.agentIdentifier=e,this.generateTracePayload=this.generateTracePayload.bind(this),this.shouldGenerateTrace=this.shouldGenerateTrace.bind(this)}generateTracePayload(e){if(!this.shouldGenerateTrace(e))return null;var r=(0,t.DL)(this.agentIdentifier);if(!r)return null;var n=(r.accountID||"").toString()||null,i=(r.agentID||"").toString()||null,o=(r.trustKey||"").toString()||null;if(!n||!i)return null;var a=(0,_.M)(),s=(0,_.Ht)(),c=Date.now(),u={spanId:a,traceId:s,timestamp:c};return(e.sameOrigin||this.isAllowedOrigin(e)&&this.useTraceContextHeadersForCors())&&(u.traceContextParentHeader=this.generateTraceContextParentHeader(a,s),u.traceContextStateHeader=this.generateTraceContextStateHeader(a,c,n,i,o)),(e.sameOrigin&&!this.excludeNewrelicHeader()||!e.sameOrigin&&this.isAllowedOrigin(e)&&this.useNewrelicHeaderForCors())&&(u.newrelicHeader=this.generateTraceHeader(a,s,c,n,i,o)),u}generateTraceContextParentHeader(e,t){return"00-"+t+"-"+e+"-01"}generateTraceContextStateHeader(e,t,r,n,i){return i+"@nr=0-1-"+r+"-"+n+"-"+e+"----"+t}generateTraceHeader(e,t,r,n,i,o){if(!("function"==typeof c._A?.btoa))return null;var a={v:[0,1],d:{ty:"Browser",ac:n,ap:i,id:e,tr:t,ti:r}};return o&&n!==o&&(a.d.tk=o),btoa((0,D.P)(a))}shouldGenerateTrace(e){return this.isDtEnabled()&&this.isAllowedOrigin(e)}isAllowedOrigin(e){var r=!1,n={};if((0,t.Mt)(this.agentIdentifier,"distributed_tracing")&&(n=(0,t.P_)(this.agentIdentifier).distributed_tracing),e.sameOrigin)r=!0;else if(n.allowed_origins instanceof Array)for(var i=0;i 2&&void 0!==arguments[2])||arguments[2];super(r,n,Z.t,i),(0,t.OP)(r).xhrWrappable&&(this.dt=new W(r),this.handler=(e,t,r,n)=>(0,s.p)(e,t,r,n,this.ee),(0,k.u5)(this.ee),(0,k.Kf)(this.ee),function(r,n,i,o){function a(e){var t=this;t.totalCbs=0,t.called=0,t.cbTime=0,t.end=E,t.ended=!1,t.xhrGuids={},t.lastSize=null,t.loadCaptureCalled=!1,t.params=this.params||{},t.metrics=this.metrics||{},e.addEventListener("load",(function(r){_(t,e)}),(0,O.m$)(!1)),c.IF||e.addEventListener("progress",(function(e){t.lastSize=e.loaded}),(0,O.m$)(!1))}function s(e){this.params={method:e[0]},T(this,e[1]),this.metrics={}}function u(e,n){var i=(0,t.DL)(r);i.xpid&&this.sameOrigin&&n.setRequestHeader("X-NewRelic-ID",i.xpid);var a=o.generateTracePayload(this.parsedOrigin);if(a){var s=!1;a.newrelicHeader&&(n.setRequestHeader("newrelic",a.newrelicHeader),s=!0),a.traceContextParentHeader&&(n.setRequestHeader("traceparent",a.traceContextParentHeader),a.traceContextStateHeader&&n.setRequestHeader("tracestate",a.traceContextStateHeader),s=!0),s&&(this.dt=a)}}function d(e,t){var r=this.metrics,i=e[0],o=this;if(r&&i){var a=V(i);a&&(r.txSize=a)}this.startTime=(0,p.z)(),this.listener=function(e){try{"abort"!==e.type||o.loadCaptureCalled||(o.params.aborted=!0),("load"!==e.type||o.called===o.totalCbs&&(o.onloadCalled||"function"!=typeof t.onload)&&"function"==typeof o.end)&&o.end(t)}catch(e){try{n.emit("internal-error",[e])}catch(e){}}};for(var s=0;s 1?e[1]=i:e.push(i)}else e[0]&&e[0].headers&&s(e[0].headers,n)&&(this.dt=n);function s(e,t){var r=!1;return t.newrelicHeader&&(e.set("newrelic",t.newrelicHeader),r=!0),t.traceContextParentHeader&&(e.set("traceparent",t.traceContextParentHeader),t.traceContextStateHeader&&e.set("tracestate",t.traceContextStateHeader),r=!0),r}}function x(e,t){this.params={},this.metrics={},this.startTime=(0,p.z)(),this.dt=t,e.length>=1&&(this.target=e[0]),e.length>=2&&(this.opts=e[1]);var r,n=this.opts||{},i=this.target;"string"==typeof i?r=i:"object"==typeof i&&i instanceof Y?r=i.url:c._A?.URL&&"object"==typeof i&&i instanceof URL&&(r=i.href),T(this,r);var o=(""+(i&&i instanceof Y&&i.method||n.method||"GET")).toUpperCase();this.params.method=o,this.txSize=V(n.body)||0}function A(t,r){var n;this.endTime=(0,p.z)(),this.params||(this.params={}),this.params.status=r?r.status:0,"string"==typeof this.rxSize&&this.rxSize.length>0&&(n=+this.rxSize);var o={txSize:this.txSize,rxSize:n,duration:(0,p.z)()-this.startTime};i("xhr",[this.params,o,this.startTime,this.endTime,"fetch"],this,e.D.ajax)}function E(t){var r=this.params,n=this.metrics;if(!this.ended){this.ended=!0;for(var o=0;o 2&&void 0!==arguments[2])||arguments[2];super(e,t,we.t,r),this.importAggregator()}}new class{constructor(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:(0,_.ky)(16);c._A?(this.agentIdentifier=t,this.sharedAggregator=new y({agentIdentifier:this.agentIdentifier}),this.features={},this.desiredFeatures=new Set(e.features||[]),this.desiredFeatures.add(m),Object.assign(this,(0,a.j)(this.agentIdentifier,e,e.loaderType||"agent")),this.start()):(0,l.Z)("Failed to initial the agent. Could not determine the runtime environment.")}get config(){return{info:(0,t.C5)(this.agentIdentifier),init:(0,t.P_)(this.agentIdentifier),loader_config:(0,t.DL)(this.agentIdentifier),runtime:(0,t.OP)(this.agentIdentifier)}}start(){const t="features";try{const r=n(this.agentIdentifier),i=[...this.desiredFeatures];i.sort(((t,r)=>e.p[t.featureName]-e.p[r.featureName])),i.forEach((t=>{if(r[t.featureName]||t.featureName===e.D.pageViewEvent){const n=function(t){switch(t){case e.D.ajax:return[e.D.jserrors];case e.D.sessionTrace:return[e.D.ajax,e.D.pageViewEvent];case e.D.sessionReplay:return[e.D.sessionTrace];case e.D.pageViewTiming:return[e.D.pageViewEvent];default:return[]}}(t.featureName);n.every((e=>r[e]))||(0,l.Z)("".concat(t.featureName," is enabled but one or more dependent features has been disabled (").concat((0,D.P)(n),"). This may cause unintended consequences or missing data...")),this.features[t.featureName]=new t(this.agentIdentifier,this.sharedAggregator)}})),(0,T.Qy)(this.agentIdentifier,this.features,t)}catch(e){(0,l.Z)("Failed to initialize all enabled instrument classes (agent aborted) -",e);for(const e in this.features)this.features[e].abortHandler?.();const r=(0,T.fP)();return delete r.initializedAgents[this.agentIdentifier]?.api,delete r.initializedAgents[this.agentIdentifier]?.[t],delete this.sharedAggregator,r.ee?.abort(),delete r.ee?.get(this.agentIdentifier),!1}}}({features:[J,m,S,class extends h{static featureName=oe;constructor(t,r){if(super(t,r,oe,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;const n=this.ee;let i;(0,k.QU)(n),this.eventsEE=(0,k.em)(n),this.eventsEE.on(se,(function(e,t){this.bstStart=(0,p.z)()})),this.eventsEE.on(ae,(function(t,r){(0,s.p)("bst",[t[0],r,this.bstStart,(0,p.z)()],void 0,e.D.sessionTrace,n)})),n.on(ce+ne,(function(e){this.time=(0,p.z)(),this.startPath=location.pathname+location.hash})),n.on(ce+ie,(function(t){(0,s.p)("bstHist",[location.pathname+location.hash,this.startPath,this.time],void 0,e.D.sessionTrace,n)}));try{i=new PerformanceObserver((t=>{const r=t.getEntries();(0,s.p)(te,[r],void 0,e.D.sessionTrace,n)})),i.observe({type:re,buffered:!0})}catch(e){}this.importAggregator({resourceObserver:i})}},C,xe,B,class extends h{static featureName=de;constructor(e,r){if(super(e,r,de,!(arguments.length>2&&void 0!==arguments[2])||arguments[2]),!c.il)return;if(!(0,t.OP)(e).xhrWrappable)return;try{this.removeOnAbort=new AbortController}catch(e){}let n,i=0;const o=this.ee.get("tracer"),a=(0,k._L)(this.ee),s=(0,k.Lg)(this.ee),u=(0,k.BV)(this.ee),d=(0,k.Kf)(this.ee),f=this.ee.get("events"),l=(0,k.u5)(this.ee),h=(0,k.QU)(this.ee),g=(0,k.Gm)(this.ee);function m(e,t){h.emit("newURL",[""+window.location,t])}function v(){i++,n=window.location.hash,this[ve]=(0,p.z)()}function b(){i--,window.location.hash!==n&&m(0,!0);var e=(0,p.z)();this[pe]=~~this[pe]+e-this[ve],this[ye]=e}function y(e,t){e.on(t,(function(){this[t]=(0,p.z)()}))}this.ee.on(ve,v),s.on(be,v),a.on(be,v),this.ee.on(ye,b),s.on(ge,b),a.on(ge,b),this.ee.buffer([ve,ye,"xhr-resolved"],this.featureName),f.buffer([ve],this.featureName),u.buffer(["setTimeout"+le,"clearTimeout"+fe,ve],this.featureName),d.buffer([ve,"new-xhr","send-xhr"+fe],this.featureName),l.buffer([me+fe,me+"-done",me+he+fe,me+he+le],this.featureName),h.buffer(["newURL"],this.featureName),g.buffer([ve],this.featureName),s.buffer(["propagate",be,ge,"executor-err","resolve"+fe],this.featureName),o.buffer([ve,"no-"+ve],this.featureName),a.buffer(["new-jsonp","cb-start","jsonp-error","jsonp-end"],this.featureName),y(l,me+fe),y(l,me+"-done"),y(a,"new-jsonp"),y(a,"jsonp-end"),y(a,"cb-start"),h.on("pushState-end",m),h.on("replaceState-end",m),window.addEventListener("hashchange",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("load",m,(0,O.m$)(!0,this.removeOnAbort?.signal)),window.addEventListener("popstate",(function(){m(0,i>1)}),(0,O.m$)(!0,this.removeOnAbort?.signal)),this.abortHandler=this.#e,this.importAggregator()}#e(){this.removeOnAbort?.abort(),this.abortHandler=void 0}}],loaderType:"spa"})})(),window.NRBA=o})(); window.jQuery || document.write(' ') CKEDITOR_BASEPATH='https://f1000research.com/js/vendor/ckeditor/' window.reactTheme = 'research'; window.MathJax = { CommonHTML: { linebreaks: { automatic: true } }, 'HTML-CSS': { linebreaks: { automatic: true } }, SVG: { linebreaks: { automatic: true } }, AuthorInit: function() { MathJax.Hub.Register.MessageHook('End Process', function () { let timeout = false; // holder for timeout id const delay = 250; // delay after event is "complete" to run callback const reflowMath = function() { const dispFormulas = document.querySelectorAll('.disp-formula.panel'); if (!dispFormulas) { return; } for (const dispFormula of dispFormulas) { const child = dispFormula.querySelector('.MathJax_Preview').nextSibling.firstChild; const isMultiline = MathJax.Hub.getAllJax(dispFormula)[0].root.isMultiline; if (dispFormula.offsetWidth < child.offsetWidth || isMultiline) { MathJax.Hub.Queue(['Rerender', MathJax.Hub, dispFormula]); } } }; window.addEventListener('resize', function() { clearTimeout(timeout); // clear the timeout timeout = setTimeout(reflowMath, delay); // start timing for event "completion" }); }); }, }; if (window.location.hash == '#_=_'){ window.location = window.location.href.split('#')[0] } !function(f,b,e,v,n,t,s){if(f.fbq)return;n=f.fbq=function() {n.callMethod? n.callMethod.apply(n,arguments):n.queue.push(arguments)} ;if(!f._fbq)f._fbq=n; n.push=n;n.loaded=!0;n.version='2.0';n.queue=[];t=b.createElement(e);t.async=!0; t.src=v;s=b.getElementsByTagName(e)[0];s.parentNode.insertBefore(t,s)}(window, document,'script','https://connect.facebook.net/en_US/fbevents.js'); fbq('init', '1641728616063202'); fbq('track', "PixelInitialized", {}); (function(h,o,t,j,a,r){ h.hj=h.hj||function(){(h.hj.q=h.hj.q||[]).push(arguments)}; h._hjSettings={hjid:2318163,hjsv:6}; a=o.getElementsByTagName('head')[0]; r=o.createElement('script');r.async=1; r.src=t+h._hjSettings.hjid+j+h._hjSettings.hjsv; a.appendChild(r); })(window,document,'https://static.hotjar.com/c/hotjar-','.js?sv='); search file_upload Submit your research search menu close search Browse Gateways & Collections How to Publish Submit your Research My Submissions Article Guidelines Article Guidelines (New Versions) Open Data, Software and Code Guidelines Open Data and Accessible Source Materials Guidelines (HSS) Open Data, Software and Code Guidelines (PSE) Prepublication Checks Production Process Posters and Slides Guidelines Document Guidelines Article Processing Charges Peer Review Finding Article Reviewers About How it Works For Reviewers Our Advisors Policies Glossary FAQs For Developers Newsroom Contact My Research Submissions Content and Tracking Alerts My Details Sign In file_upload Submit your research { "@context": "https://schema.org", "@type": "ScholarlyArticle", "mainEntityOfPage": { "@type": "WebPage", "@id": "https://f1000research.com/articles/15-719" }, "headline": "Establishing central Research Software Engineering units in German research institutions", "datePublished": "2026-05-12T10:52:55", "dateModified": "2026-05-12T10:52:55", "author": [ { "@type": "Person", "name": "Dominic Kempf" }, { "@type": "Person", "name": "René Caspart" }, { "@type": "Person", "name": "Bernd Flemisch" }, { "@type": "Person", "name": "Florian Goth" }, { "@type": "Person", "name": "Jan Linxweiler" }, { "@type": "Person", "name": "Frank Löffler" }, { "@type": "Person", "name": "Philipp Matthias Schäfer" }, { "@type": "Person", "name": "Robert Speck" }, { "@type": "Person", "name": "Alexander Struck" }, { "@type": "Person", "name": "Markus J. Ankenbrand" }, { "@type": "Person", "name": "Leyla Jael Castro" }, { "@type": "Person", "name": "Iris Ehlert" }, { "@type": "Person", "name": "Jean-Noël Grad" }, { "@type": "Person", "name": "Magnus Hagdorn" }, { "@type": "Person", "name": "Axel Loewe" }, { "@type": "Person", "name": "Michael Schlottke-Lakemper" }, { "@type": "Person", "name": "Uwe Schmitt" }, { "@type": "Person", "name": "Philipp S. Sommer" } ], "publisher": { "@type": "Organization", "name": "F1000Research", "logo": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 480, "width": 60 } }, "image": { "@type": "ImageObject", "url": "https://f1000research.com/img/AMP/F1000Research_image.png", "height": 1200, "width": 150 }, "description": "Abstract* This position paper urges decision makers in Germany to establish central Research Software Engineering (RSE) units within their institutions. The focus is not put primarily on the establishment of RSE services in general, as this has been done already elsewhere. Instead, we highlight central RSE units. Motivation for their existence is discussed, underpinned by working examples both in neighbouring fields as well as outside of Germany. The heart of this paper is a vision of a central RSE unit, its structure, and the definition of nine core support modules such a unity may provide. An initial survey finds that there is considerable diversity within the module distribution, even within the few considered groups. We discuss initial observations on possible clusters, but further studies are needed. Finally, we discuss realisation strategies. While this paper focuses mostly on the German academic environment, some general strategies should also apply elsewhere." } { "@context": "http://schema.org", "@type": "BreadcrumbList", "itemListElement": [ { "@type": "ListItem", "position": "1", "item": { "@id": "https://f1000research.com/", "name": "Home" } }, { "@type": "ListItem", "position": "2", "item": { "@id": "https://f1000research.com/browse/articles", "name": "Browse" } }, { "@type": "ListItem", "position": "3", "item": { "@id": "https://f1000research.com/articles/15-719/v1", "name": "Establishing central Research Software Engineering units in German..." } } ] } Home Browse Establishing central Research Software Engineering units in German... ALL Metrics - Views Downloads Get PDF Get XML Cite How to cite this article Kempf D, Caspart R, Flemisch B et al. Establishing central Research Software Engineering units in German research institutions [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :719 ( https://doi.org/10.12688/f1000research.171263.1 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. Close Copy Citation Details Export Export Citation Sciwheel EndNote Ref. Manager Bibtex ProCite Sente EXPORT Select a format first Track Share ▬ ✚ Opinion Article Establishing central Research Software Engineering units in German research institutions [version 1; peer review: awaiting peer review] Dominic Kempf https://orcid.org/0000-0002-6140-2332 1 , René Caspart https://orcid.org/0000-0002-5502-9412 2 , Bernd Flemisch 3 , [...] Florian Goth https://orcid.org/0000-0003-2707-4790 4 , Jan Linxweiler https://orcid.org/0000-0002-2755-5087 5,6 , Frank Löffler https://orcid.org/0000-0001-6643-6323 6,7 , Philipp Matthias Schäfer 7 , Robert Speck https://orcid.org/0000-0002-3879-1210 8 , Alexander Struck https://orcid.org/0000-0002-1173-9228 9 , Markus J. Ankenbrand https://orcid.org/0000-0002-6620-807X 10 , Leyla Jael Castro https://orcid.org/0000-0003-3986-0510 11 , Iris Ehlert https://orcid.org/0009-0006-0418-5198 12 , Jean-Noël Grad https://orcid.org/0000-0002-5821-4912 13 , Magnus Hagdorn https://orcid.org/0000-0002-5076-4864 14 , Axel Loewe https://orcid.org/0000-0002-2487-4744 15 , Michael Schlottke-Lakemper https://orcid.org/0000-0002-3195-2536 16 , Uwe Schmitt https://orcid.org/0000-0002-4658-0616 17 , Philipp S. Sommer https://orcid.org/0000-0001-6171-7716 18 Dominic Kempf https://orcid.org/0000-0002-6140-2332 1 , René Caspart https://orcid.org/0000-0002-5502-9412 2 , [...] Bernd Flemisch 3 , Florian Goth https://orcid.org/0000-0003-2707-4790 4 , Jan Linxweiler https://orcid.org/0000-0002-2755-5087 5,6 , Frank Löffler https://orcid.org/0000-0001-6643-6323 6,7 , Philipp Matthias Schäfer 7 , Robert Speck https://orcid.org/0000-0002-3879-1210 8 , Alexander Struck https://orcid.org/0000-0002-1173-9228 9 , Markus J. Ankenbrand https://orcid.org/0000-0002-6620-807X 10 , Leyla Jael Castro https://orcid.org/0000-0003-3986-0510 11 , Iris Ehlert https://orcid.org/0009-0006-0418-5198 12 , Jean-Noël Grad https://orcid.org/0000-0002-5821-4912 13 , Magnus Hagdorn https://orcid.org/0000-0002-5076-4864 14 , Axel Loewe https://orcid.org/0000-0002-2487-4744 15 , Michael Schlottke-Lakemper https://orcid.org/0000-0002-3195-2536 16 , Uwe Schmitt https://orcid.org/0000-0002-4658-0616 17 , Philipp S. Sommer https://orcid.org/0000-0001-6171-7716 18 PUBLISHED 12 May 2026 Author details Author details 1 Scientific Software Center, Heidelberg University, Heidelberg, Germany 2 Scientific Computing Center, Karlsruhe Institute of Technology, Karlsruhe, Germany 3 Institute for Modelling Hydraulic and Environmental Systems, University of Stuttgart, Stuttgart, Germany 4 Institute for Theoretical Physics and Astrophysics, University of Würzburg, Würzburg, Germany 5 University Library, Technische Universität Braunschweig, Braunschweig, Germany 6 de-RSE e.V. – Society for Research Software in Germany, -, Germany 7 Competence Center Digital Research, Friedrich Schiller University Jena, Jena, Germany 8 Jülich Supercomputing Centre, Forschungszentrum Jülich GmbH, Jülich, Germany 9 Cluster of Excellence Matters of Activity. Image Space Material at Humboldt- Universität zu Berlin,, Berlin, 10099, Germany 10 Center for Computational and Theoretical Biology, University of Würzburg, Würzburg, Germany 11 Semantic Technologies team, ZB MED Information Centre for Life Sciences, Köln, Germany 12 German Climate Computing Centre, Hamburg, Hamburg, Germany 13 Institute for Computational Physics, University of Stuttgart, Stuttgart, Germany 14 Geschäftsbereich IT, Charité Universitätsmedizin Berlin, Berlin, Germany 15 Institute of Biomedical Engineering, Karlsruhe Institute of Technology, Karlsruhe, Germany 16 Centre for Advanced Analytics and Predictive Sciences, University of Augsburg, Augsburg, Germany 17 Scientific IT Services, ETH Zurich, Zürich, Switzerland 18 Institute of Carbon Cycles, Helmholtz Coastal Data Center, Helmholtz-Zentrum Hereon, Geesthacht, Germany Dominic Kempf Roles: Conceptualization, Funding Acquisition, Investigation, Project Administration, Visualization, Writing – Original Draft Preparation, Writing – Review & Editing René Caspart Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Bernd Flemisch Roles: Conceptualization, Project Administration, Writing – Original Draft Preparation, Writing – Review & Editing Florian Goth Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Jan Linxweiler Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Frank Löffler Roles: Conceptualization, Data Curation, Investigation, Project Administration, Visualization, Writing – Original Draft Preparation, Writing – Review & Editing Philipp Matthias Schäfer Roles: Conceptualization, Investigation, Resources, Writing – Original Draft Preparation, Writing – Review & Editing Robert Speck Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Alexander Struck Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Markus J. Ankenbrand Roles: Writing – Review & Editing Leyla Jael Castro Roles: Writing – Review & Editing Iris Ehlert Roles: Writing – Review & Editing Jean-Noël Grad Roles: Writing – Review & Editing Magnus Hagdorn Roles: Writing – Review & Editing Axel Loewe Roles: Writing – Review & Editing Michael Schlottke-Lakemper Roles: Writing – Review & Editing Uwe Schmitt Roles: Writing – Review & Editing Philipp S. Sommer Roles: Writing – Review & Editing OPEN PEER REVIEW REVIEWER STATUS AWAITING PEER REVIEW This article is included in the Reproducible Research Data and Software collection. Abstract Abstract* This position paper urges decision makers in Germany to establish central Research Software Engineering (RSE) units within their institutions. The focus is not put primarily on the establishment of RSE services in general, as this has been done already elsewhere. Instead, we highlight central RSE units. Motivation for their existence is discussed, underpinned by working examples both in neighbouring fields as well as outside of Germany. The heart of this paper is a vision of a central RSE unit, its structure, and the definition of nine core support modules such a unity may provide. An initial survey finds that there is considerable diversity within the module distribution, even within the few considered groups. We discuss initial observations on possible clusters, but further studies are needed. Finally, we discuss realisation strategies. While this paper focuses mostly on the German academic environment, some general strategies should also apply elsewhere. READ ALL READ LESS Keywords Research Software Engineering, RSE, Research Support, Sustainable Software Development, Academic management, Academic Career Paths, Research Funding Corresponding Author(s) Dominic Kempf ( [email protected] ) Close Corresponding author: Dominic Kempf Competing interests: No competing interests were disclosed. Grant information: BF would like to thank the Federal Government and the Heads of Government of the Länder, as well as the Joint Science Conference (GWK), for their initiative within the framework of the NFDI4ING consortium (German Research Foundation (DFG) - project number 442146713). FG acknowledges funding from the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) through the SFB 1170 “Tocotronics”, project Z03 - project number 258499086. JNG acknowledges funding from the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) - project numbers 391126171 (PI: Holm) and 528726435 (PI: Weeber), from the German Federal Ministry of Education and Research (Bundesministeriums für Bildung und Forschung, BMBF) under the funding code 16HPC095, and from the European Union – this work has received funding from the European High Performance Computing Joint Undertaking (JU) and countries participating in the project under grant agreement No 101093169. DK acknowledges support from the Scientific Software Center which is funded as part of the Excellence Strategy of the German Federal and State Governments. AL acknowledges funding by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) – project number 507828355. AS acknowledges the support of the Cluster of Excellence »Matters of Activity. Image Space Material« funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany's Excellence Strategy – EXC 2025 – 390648296. MSL acknowledges funding from the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) through the research unit FOR-5409 "SnuBIC", project C2 (project number 501202213), and through individual grant "ACTRIX" (project number 528753982). The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Copyright: © 2026 Kempf D et al . This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. How to cite: Kempf D, Caspart R, Flemisch B et al. Establishing central Research Software Engineering units in German research institutions [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :719 ( https://doi.org/10.12688/f1000research.171263.1 ) First published: 12 May 2026, 15 :719 ( https://doi.org/10.12688/f1000research.171263.1 ) Latest published: 12 May 2026, 15 :719 ( https://doi.org/10.12688/f1000research.171263.1 ) 1. Introduction Research software has been written and used for decades in an increasing range of disciplines. It has been established that most research requires research software for its results. 1 , 2 To solve pressing research challenges, better software is crucial. 3 During the past decade, research software gained ever-growing attention and is becoming accepted as a research result in its own right. The number of people developing software in academia is continuously rising. 1 , 2 Research software engineering encompasses creating, adapting or maintaining research software. It also includes consultation and training with the aim to enable researchers to some of these tasks themselves. 4 These actions are very diverse and so are the environments they are performed in. This position paper focuses on groups of research software engineers that provide their services for an entire research organisation or at least a substantial part of it. We advocate the establishment and support of dedicated, central RSE groups in German research organisations, with clearly defined tasks, points of contact, and, in particular, sustained funding, for the benefit of all researchers in their organisation. Similar initiatives have been formed in other national contexts (see Refs. 5 , 6 and references therein). We provide an overview of the various tasks these teams have and discuss potential realisation strategies, learning from already existing RSE units. Depending on the national research environments and processes that readers are familiar with, the notion of the terms software and research might differ. The term “research software” has also no single definition within the community. Therefore, to avoid ambiguities, we list the definitions that we use in this document: Software – Source code, documentation, tests, executables, and all other artefacts that are created during the development process and that are necessary to understand its purpose. Research software – Foundational algorithms, the software itself, as well as scripts and computational workflows that were created during the research process or for a research purpose, across all domains of research. This definition is broader than in Ref. 7 and is the outcome of a recent discussion in Ref. 8 . Research software engineers – People who create or improve research software and/or the structures that the software interacts with the computational ecosystem of a research domain. They are highly skilled team members who may also conduct their own research as part of their role. However, we also recognise RSEs who have chosen to focus on a technical role as an alternative to a traditional research role. Researchers – We call RSEs who are members of the RSE hub (see below) dedicated RSEs. RSEs who are members of a research group are called embedded RSEs. RSEs might also be researchers. However, for the lack of a proper term and to avoid many “non-RSE researchers” within the text, we will use the term “researchers” to refer to all non-RSEs involved in research or in research supporting organisations such as in, e.g., libraries. Another way to define the group of researchers are all people who at most very occasionally perform RSE actions. RSE Hub – This is our general term for the central RSE team throughout this paper. These RSE Hubs can take the form of, e.g., full RSE units, smaller RSE groups, Open Source Program Offices (OSPOs), virtually across multiple units or combined under single leadership, depending on the environment of the hosting research organisation. All of these implementations are considered, taking into account the large variety of research environments in Germany, which include not only universities, but also research consortia and other research performing organisations. We use the term central RSE unit interchangeably with the term RSE hub even though for large federated research organisations there might be a more complex arrangement such as a network of RSE hubs. 2. Motivation for central RSE units Better Software, Better Research (Mission statement of the UK Software Sustainability Institute) The quote above is the shortest possible summary of this chapter: most if not all motivation to provide RSE services stems from the goal of improving research. Tasks that Research Software Engineers (RSEs) perform include training, e.g., to improve the quality of code produced by researchers, 9 consultation services, e.g., regarding frameworks or algorithm selection, and the development of existing or new software. For an overview of typical tasks of RSEs and the competencies required, see Ref. 4 , especially section 4.4: “RSE tasks and responsibilities”. Research software is getting increasingly complex. This is partly because the scientific problems being tackled using software are getting bigger. However, the software is also expected to rate high on a multitude of quality metrics such as correctness, reproducibility, maintainability, extensibility, usability, portability, interoperability, security, performance, and scalability [Ref. 10 , Ch. 16]. Handling this increased complexity whilst ensuring timely delivery requires dedicated RSEs in central RSE units. 2.1 Pooling: A necessary ingredient The main focus of this paper lies on central RSE teams since the benefits of RSEs to research in general are described elsewhere, e.g., in Ref. 11 . The main advantages of central RSE units all stem from the pooling of resources. There are at least three aspects to RSE pooling that research institutions can benefit from: funding, diverse knowledge, and a central point of contact. First, pooling of funding allows organisations to invest in building up institutional knowledge by supporting RSEs to become experts. A central RSE team on long-term contracts will act as a knowledge hub due to their accumulated experience in and support of several disciplines as well as established contacts within the organisation. This is comparable to commercial/industry R&D departments or so-called inhouse consulting, 12 where key software architects and developers establish a knowledge hub that can be consulted by project teams as necessary. Subject matter experts like software architects, database administrators and other tooling specialists are organised centrally and share their knowledge with members of decentralised projects. It makes economic sense to organise such staff centrally, since not every project has a need for a full-time specialist or can afford one over an extended period of time. Most academic research organisations have established centralised tooling, e.g., storage or High-Performance-Computing (HPC), but only a few consider software development and consultancy a relevant service yet. A second and equally important aspect to pooling RSEs is that of diverse knowledge . RSE units act as knowledge hubs in a network of academic developers within an organisation. 13 Groups of RSEs with tasks spanning the entire organisation necessarily have to offer diverse knowledge. Obtaining this diversity of knowledge and experience can also be a challenge, but once it has been established it quickly becomes an asset to the organisation. RSEs in centralised groups are interdisciplinary specialists. They are interdisciplinary due to their broad experience by working on diverse research topics and their ability to apply a diverse set of research methodologies. At the same time they are specialists concerning research software and how it can best improve research. They are assumed to be able to suggest the most appropriate tools/frameworks and design or architecture patterns for certain research challenges. Their diversity in skills (languages, frameworks, front/back-end, UX, management) is welcomed, especially for short-term needs in projects. This will improve the chances of a project being successfully completed in a timely manner. That means a central RSE unit has more RSE competencies than any individual research group in the institution. This allows members of that unit to bring in new ideas or transfer them from other collaborations to these groups. Furthermore, by centralising RSE expertise, the unit benefits from economies of scale, making it feasible to handle also less frequently needed tasks across multiple groups. This synergy broadens the scope of possible software-based solutions while distributing costs and resources more efficiently. The third aspect to pooling RSEs is visible most of all from a users perspective: a single, central point of contact for digital challenges is valuable to researchers, whose first problem often is not knowing whom to contact, partially because while they know what they want, they might not know what they need. A central RSE team can, due to its proximity to research, much better listen to the wishes expressed by researchers and then help formulate needs and act as a channel to either fulfil them themselves or reformulate and redirect the request. The results are increased research speed and quality and, with that, a higher reputation of the entire research organisation. Working in a research institution is very stimulating. However, an embedded RSE can feel very lonely when they do not have anybody to discuss technical problems. A central RSE unit also provides a social space for RSEs where this exchange can easily happen. 2.2 Pooling: An already tested idea The idea to pool resources in specific areas within an organisation is not new. In industry, software engineering underwent a similar transition about 20 years ago, with the creation of specialised, central software development units. In an example from academia, similar arguments can and have been made for research data support. 2.2.1 Research data management Both data and software play a fundamental role in almost all of research. Over the past decades, Research Data Management (RDM) has evolved into a topic of national interest with NFDI [1] consortia for all disciplines and a research data law. Federal state RDM initiatives [2] have established the topic further and provide regional training, networking and other supporting services. Many research organisations have set up established central RDM groups that support research projects in all aspects from grant proposals to hands-on support and maintaining Data Management Plans (DMPs). Funding agencies acknowledge the importance of research data and have started to make RDM mandatory in research projects. The most recent funding guidelines suggest to have “data stewards” in data-driven research. Such experts are to be employed in advanced research projects like “Collaborative Research Centres” (CRC) [3] or “Clusters of Excellence” [4] . These data experts support research projects in several aspects including DMPs, grant applications, data availability for journal publications, compliance, FAIRification and more. Similarly, central RSEs will encourage other RSEs to publish software with rich metadata and will support journal publications with code submission requirements. With the increasing recognition of software as a research product, it is easy to see how projects will require and benefit from support in research software management in the near future. Due to the similar nature of both, data and software, and their importance in today’s digital research, it is reasonable to expect a similar trajectory in the development of research software as a topic, as we have witnessed for research data. 2.2.2 Existing RSE efforts Some organisations already have central RSE teams. The field of RSE teams in Germany is currently poorly mapped and very diverse. It includes groups with responsibilities across institutions like the Helmholtz HIFIS group, 14 , 15 but mostly groups with responsibilities local to their institution. Their anchoring within institutions also differs: Some are part of an existing interdisciplinary research institution (like the Scientific Software Center in Heidelberg 16 , 17 ). Others are part of the central university research support infrastructure and are goverened by the institutional leadership (like the Competence Center Digital Research (zedif ) in Jena 18 ). Yet others have a project character, like Suresoft in Braunschweig. 19 , 20 Another national pioneer is the Göttingen State and University Library where RSE services are part of the library-service portfolio. Most of these groups, or at least their RSE services, are still relatively young. However, some groups can already report a remarkable increase in software quality, better grant applications, less brain drain and overall better employee satisfaction levels. 21 RSE services which benefit all disciplines/departments may represent a unique selling point for organisations competing for the brightest minds. Besides institutions, there are also other communities related to RSE. The HPC community, arguably a sub-community of the RSE-community, has a history of offering training and consulting to prospective and active users of the hardware they support. National Competence Centres 22 form a network of HPC-RSE consulting groups to share expertise with academic and industry actors. 23 , 24 While we focus on Germany in this paper, it is beneficial to review how other countries approach research software. In the UK, which we choose as example for being the oldest in terms of RSE, many universities started initiating dedicated RSE units about a decade ago. 25 , 26 The successful establishment of these units is a role model for similar research performing organisations worldwide. A range of already existing RSE units in the UK can be seen on this (incomplete) map: https://society-rse.org/community/rse-groups/ . In the UK, it is common for grant applications to include software development in their budget. This allocated money can then be utilised to delegate/dispatch a central RSE person or group into a research project for a few weeks or months as necessary. 2.3 External expectations Some of the latest DFG grant application templates (e.g., the strategy of excellence 27 ) require discussion of both, data and software management (in line with their GWP guidelines 28 ). In addition, as dedicated DMPs have become mandatory in several funding calls, 29 we expect to see a similar development for Software Management Plans (SMPs) in the future. As of today, they are already recommended. 30 Policies for research software management and guidelines involving responsible research practices detailing software handling are the precursors for a research software engineering environment. See for example position papers by the Helmholtz Open Science Office, 31 , 32 the AllianzInitiative, 33 the DLR, 34 the University Utrecht, 35 and the German Research Council. 28 Another development taking place worldwide is the encouragement of authors to submit both, data and software, for peer review. As an example, the journal “Nature” initiated such a policy [5] in 2018. 36 RSE groups are able to offer researchers consulting tailored to their specific needs on how to implement and document those policies. This is especially relevant in the context of reproducibility of software-based research. The global FAIR movement originated from RDM and widened their focus to include research software. However, it also has become clear in that process that software is not “just another type of data” and that the FAIR principles are not sufficient for software. The FAIR principles for Research Software (FAIR4RS) 37 have been adopted worldwide, 38 including the German Ministry of Education and Research (BMBF) and the German Research Foundation (DFG). The rather complex assessment of FAIRness 39 , 40 has also widened from data to software. 41 3. Vision In this section, we describe our vision for central RSE units at research institutions in Germany. For our purposes, the term “institutions” is used broadly to include universities, other colleges, associations like Max-Planck, Helmholtz, Fraunhofer, or Leibniz, as well as other research-performing organisations. They show a wide variety in organisational structure as well as internal scientific diversity. Thus, there can be no single optimal blueprint for such an RSE unit for all research institutions in Germany. We instead describe modular components that can be combined for the respective local environment. We have identified nine modules that can make up an RSE unit. In practice, most RSE units will only support some of these modules, and different RSE units will focus on different sets of modules. Thus, it is likely that no two RSE units will be, or need to be, alike. However, these nine modules, along with their assigned weights (indicating relative importance), form a simple model of an RSE group. This provides both a quick overview of an individual group as well as a way to compare groups. The nine modules are described below. 3.1 Module 1: Foster a local Network of RSEs One of the core responsibilities of an RSE unit is to act as a coordinator of RSE activities within the institution. Research software is an integral part of modern research. There are, therefore, researchers in every institution that at least sometimes perform the tasks of an RSE. We call these RSEs embedded RSEs. These RSEs typically work isolated from similar RSEs in other groups within the same institution. The central RSE unit together with the embedded RSEs form a hub and spokes network. Connecting embedded RSEs has multiple positive effects, both for them as well as for the organisation: It will enable them to learn from others in similar situations and to support each other. Embedded RSEs can ask a central RSE unit for advice on specific problems. They can also pass some tasks to the central RSE unit if they lack the knowledge or resources to solve those themselves. Contact with the central RSE unit also helps RSEs to professionalise their software-related work, which will directly benefit not only themselves but also their research groups. Additionally, the networking opportunities allow the distribution of knowledge about tools and resources within the network. Information also flows from the embedded RSEs to the central RSE unit allowing it to discover common requirements and opportunities to centralise some services. How an RSE unit realises this task will depend heavily on its environment and resources. We only mention a few examples here for inspiration, with the explicit claim of incompleteness: talks, seminars, workshops, hackathons, as well as informal meet-ups all facilitate establishing a local network of RSEs. As a foundation, a central RSE unit employs experienced RSEs, mostly at the post-doctoral level, who are not only expert software engineers and scientists, but also good communicators with the ability to work in interdisciplinary teams. At least a core of a central RSE unit’s employees need to have permanent contracts to be able to offer that deep expertise that requires years of experience. Moreover, an onboarding process can serve as an entry point for new RSEs, whether in the central RSE unit or as an embedded RSE, into an institution’s network. This gives an opportunity to gauge how the new colleague can benefit from the RSE unit’s teaching services and whom they might want to network with based on their planned work. Similarly an off-boarding process can help to make sure that all acquired knowledge that is relevant to the institution is passed on to someone else, even if possibly not within the specific research group. 3.2 Module 2: Consultation services With the majority of researchers being self-taught programmers, 42 there is a huge demand for expertise on how to develop better research software. Here, “better” can refer to a number of quality metrics as already mentioned in Section 2: correctness, reproducibility, maintainability, extensibility, usability, portability, interoperability, security, performance, or scalability [Ref. 10 , Ch. 16]. In order to raise the quality standards for research that is based on research software, it is of great importance for research institutions to provide access to such expertise with a low barrier to entry. The hub is a natural place to provide this central service. There are a number of scenarios where RSE consultation services differ strongly in scale and format. We mention a few of these in the following. “Walk-in” consultations on any research software related aspect that are open to researchers of all career levels are a great introduction to the hub’s RSE services and are offered by almost all RSE units already established (see, e.g., data in Section 4 or Ref. 43 ). A larger scale format for RSE consultation services could be that a research project regularly meets with an RSE in order to coordinate the research software efforts done in the research project. This format enables valuable feedback cycles between researchers and RSEs and allows RSEs to guide the project towards successful software engineering best practices without overloading the researchers with information at a walk-in consultation. When an RSE unit carries out many of these project consultations, they will gather valuable experiences in transferring RSE knowledge to practitioners. An RSE hub puts these experiences into institutional memory, allowing for better RSE practice in the future. RSE consultation services also have a positive impact on grant proposal quality. Many proposals critically depend on research software to be developed and the requirements of funding agencies with respect to research software are growing and will continue to do so. Similar to dedicated RDM units that provide institutional support for data management plans, the RSE hub can support researchers by providing expertise with software management plans and the software engineering best practices required by these plans. Consultation services that are already involved in the proposal phase are expected to lead to an improved research workflow and thereby to better research. This in turn leads to improved proposal acceptance rates, thereby amortising the initial investment into RSE units. 3.3 Module 3: Development services There is a huge demand for the development and customisation of research software tailored to the needs of specific research projects. In many cases this can be achieved by educating researchers to write their own software according to RSE best practices. Bringing in expert RSEs to deal with the development of complex research software frees up the researchers to focus on research. In these cases, RSE development services are a great opportunity that can have a huge impact on the digitisation of science at a research institution. Similar to consultation services, this service can be offered at multiple scales. Many times, even a small effort of a skilled RSE can have a huge impact on a research project that requires dedicated research software development. With the impact of these projects being usually very high, realising as many of them as possible gives a great boost to the research institution. Many existing RSE units (e.g., Manchester, Heidelberg) offer this type of small scale service free of charge and use it to promote their services within the institution. For research projects requiring more substantial software development resources, an RSE unit could — either through central or embedded RSEs — provide the required developer capacity. This is especially relevant if the researchers hired for the research projects do not have the required software development skills and the volume of the development is too small to hire a dedicated developer. Depending on the scale of the involvement, the RSE unit can either be included into the grant proposal via a co-PI or as an internal service provider. If the research within an institution heavily relies on specific pieces of software, it is of vital importance for the long term success of the institution to sustain these pieces of software. Relying on a workforce that is subject to academic labour turnover poses the risk of knowledge loss and incurs a significant overhead due to the need to constantly search for and then retrain new staff. If the development is done in an RSE unit with long-term contracts, institutional memory about critical research software infrastructures can be created and the long term availability of these infrastructures can be improved. This applies both to domain-specific research software (e.g., simulation frameworks widely used throughout the institution) and to domain-agnostic software and data infrastructure (e.g., Jupyter, workflow management systems, data repository software). While all of the above development services can be flexibly performed either at the central RSE unit or by embedded RSEs, there are advantages of having a hub in the process: It allows building up highly specialised technical expertise with a long-term perspective and reuse it across the entire institution. Examples of topics that would benefit from such expertise pooling are, e.g., mobile app development and UI/UX development. Success Story: The University of Manchester Software and Data Science group has successfully established specialised development services within their institution: The “Mobile Development Service” 49 team consists of RSEs that focus solely on developing and deploying mobile apps. Without a central RSE unit to anchor such specialised expertise, it would be difficult to establish such a service. Also, having this expertise centralised allows for synergies in the deployment procedure for mobile apps: The RSE unit can create institutional accounts with the app stores and manage the time-consuming deployment process including hard-to-setup procedures like code signing. Besides the technical benefits of this central deployment procedure, the institution benefits from the increased visibility and the ability to build a brand with its technological output. RSE units that offer development services at all scales have proven to be a success story at many research institutions and have rapidly grown in size due to the influx of third party funding. Notable examples 43 are, e.g., Manchester, 44 Notre-Dame, 45 Stanford, 46 Princeton. 47 , 48 3.4 Module 4: Teaching services A central RSE unit can provide or organise training for researchers and embedded RSEs. This can replace self-education for foundational software development skills and provide a basis from which researchers can continue to learn more specialised skills guided by experts of the central RSE unit. Since teaching material for foundational software development skills is freely available, the tasks remaining for a central RSE unit are to adapt the material to local requirements as well as to organise and hold courses and workshops. For more complex software development projects, a central RSE unit can offer individual training. In both cases, the expert RSEs from the central RSE unit can pass on their knowledge precisely adapted to the concrete needs of those that they support. Finally, in organisations that educate RSEs, members of a central RSE unit may contribute to the curriculum of the institutional study programmes and teach corresponding courses. 3.5 Module 5: Create a network of institutional partners Within a research institution, a lot of groups or departments touch the topic of research software one way or another. However, their coverage of RSE-related needs of researchers is often limited and their main responsibilities are diverse and typically lie elsewhere. This is one of the main arguments for the creation of dedicated RSE units. However, it also shows the necessity for an RSE unit to closely interact with those partners. In the following, we describe groups or units that can typically be found within academic organisations, their focus, and how we envision their collaboration with an RSE unit. However, note that as research organisations can differ widely from one another, so can the tasks and even existence of these entities. Arguments and conclusions below have to be adapted to specific circumstances when applying them to specific environments. All research institutions in Germany can use the services provided by a central IT unit in one form or another. The central IT unit typically looks after common compute and storage infrastructure in data centres and associated network infrastructure. They also provide software services such as Email, web services, and databases, and administer standard desktops and laptops (at least for administrative staff ). Research software often has to work within the environment provided by the IT unit. A central RSE unit can help researchers adapt their software to run on central services where necessary. RSEs can also work with central IT staff to provide IT infrastructure well suited for research projects. Usually, this requires a level of engagement and understanding of both the underlying research concepts and IT infrastructure that the staff of the IT unit or the researchers each cannot provide alone. If available, a second important partner is a scientific library , which has already gained tasks much beyond the preservation and organisation of publications on physical paper for quite some time. Besides digital forms of rather traditional publications, these more and more include digital data and recently also software publications, their discovery and citation. With the dedicated help of RSEs, research software can be enabled to be added to the organisational bibliography, facilitating internal reporting. At the same time, through collaboration with the library, the RSE group can address the first two letters of FAIR: Findability and Accessibility. Both RSE and RDM units provide research-oriented services that are supporting digital research, covering different aspects of the research cycle. They need to collaborate directly because research software both consumes and produces research data. Requests for support on digital research therefore often touch both aspects, RSE and RDM. Thus, a close collaboration between RSE and RDM groups helps everyone: both RSE and RDM groups by being able to offer a more comprehensive service than when working alone, as well as the researcher, who benefits from receiving this single coordinated service, instead of dealing with two independent entities. The question whether RSE and RDM should be located in two separate groups or should be combined in one common group is intentionally left open, as the answer depends on local, pre-existing circumstances. Some research institutions host a dedicated HPC group which may or may not be part of the central IT unit. HPC is an RSE-related field, so HPC groups might already provide training, consulting and funding opportunities in this area. At the same time, HPC by nature focuses on highly efficient, many-core, if possible parallel computations. The challenges of an average researchers often start a long way before reaching that level, and they might not ever need to consider HPC. There are obvious reasons to closely collaborate on both consulting and training, yet at the same time a central RSE unit has to provide a much broader portfolio. 3.6 Module 6: RSE infrastructure provisioning IT and (potentially high-performance) computing infrastructure provisioning is usually the purview of an institution’s IT unit. However, a central RSE unit can provide extra services by acting as an intermediary for RSE infrastructure and by hosting pilot instances of new tools and services. IT departments typically provide the service for hosting and accessing long-term IT infrastructures, including RSE infrastructures. Central RSE units are a link between the central, generally available services on one side, and embedded RSEs on the other, offering documentation, training and best-practices to efficiently use available services and comply with established processes. Furthermore, the central RSE unit can offer consulting for embedded RSEs to guide selection processes of the tools and services best suited for each project. This holds for existing RSE, or more general IT, infrastructure. However, as scientists are working, by definition, at the cutting edge, they will often need or want to use the newest tools. When such a need is identified in the course of a consultation, a central RSE unit can set up and provide access to pilot instances to evaluate these tools. This evaluation will specifically consider a wider applicability of the tool, with the aim of handing over administration of widely required tools and services to, e.g., the central IT unit. It is crucial that the RSE unit does not compete with the IT unit, nor should it duplicate existing infrastructure. On the contrary, the RSE unit should act as a multiplier for the RSE-relevant services offered by the IT unit, helping RSEs to discover and use existing and upcoming services. Similarly, the RSE unit can promote the use of the available computing infrastructure provided by an IT unit, providing support for users when RSE-related questions in this context arise. Once the mutual collaboration between an RSE unit and an IT unit has been established, a stricter policy-based involvement of the RSE unit for infrastructure requests is envisioned. Overall, by acting as an intermediary for RSE infrastructure related requests, the central RSE unit can augment the central IT unit, providing embedded RSEs with the specific support they require. 3.7 Module 7: Research Software Engineering Research If software engineering research about research software is conducted at the research institution, an RSE unit can serve as a valuable resource and experimentation field to these researchers. It might therefore be of mutual benefit to co-locate SE researchers and RSEs. Additionally, RSEs employed at the hub can be given the opportunity to conduct research on meta aspects of RSE work and publish about them. This allows the staff working at the hub to contribute to and shape the emerging field of RSE research. 50 3.8 Module 8: Software maintenance service Funder policies such as the DFG “Guidelines for Safeguarding Good Research Practice” 28 require long-term preservation of used research data and software in an adequate way. For research software, dedicated archiving solutions such as Software Heritage 51 , 52 or Zenodo’s GitHub integration 53 exist. In contrast to research data, however, the long-term availability and usability of research software requires more than an adequate archiving method: Software maintenance is an ongoing change process of software after its release. It includes both fixing bugs that are discovered in the software and adapting the software to changes in the execution environment, such as hardware, operating system, toolchain, and software dependencies. In the scientific community there is a demand for long-term maintenance of research software, but academic labour turnover and the disconnect between project funding cycle and target software lifecycle make research software maintenance often rely on the (potentially unpaid) efforts of individuals. An RSE hub with long-term core staff can partially address this problem by taking over maintenance tasks. In order for this to be feasible, three criteria need to be met: • The software needs to be developed according to software engineering best practices with a strong emphasis on testing and continuous integration. • The RSE hub needs to be involved during the development period either through development or consultation services in order to ensure that best practices are followed and the required knowledge is transferred to the hub. • A mechanism for selecting and prioritising software projects to be maintained needs to be in place. 3.9 Module 9: Communication and outreach Success Story: As a national initiative integrating Research Software Engineering (RSE) principles, natESM (the national Earth System Modelling strategy 54 ) is developing a sustainable and high-performance Earth system modelling capability for Germany while addressing several of the key aspects outlined above. By coordinating RSE activities across multiple institutions through a well-structured sprint process, natESM fosters collaboration between scientists and RSEs, ensuring that future Earth system models remain efficient, maintainable, and HPC-compatible. Within this process, natESM also provides structured consultation services, supporting researchers in adopting modern software development practices and strengthening the technical foundations of their models. Beyond development and maintenance, regular training events and workshops equip scientists with the expertise needed to work effectively within the natESM system. A GitLab service, community newsletters, a Mattermost channel for direct exchange, and a dedicated website ensure transparency and engagement across the national Earth system modelling community. Through this integrated approach, natESM reinforces the technical backbone of Earth system and climate modelling, ensuring that it remains adaptable, scalable, and future-proof. We identify three categories of communication and outreach activities according to the participating individuals and groups, connecting the RSE unit to (i) the RSEs at the institution, (ii) other entities within the institution, and (iii) regional, national and international initiatives. Concerning category (i), options for communication among the RSEs at the institution include messaging channels (for quick communication) and forums or wikis integrated to developer platforms to have longer discussion while keeping track of the conversation. Additionally, project management tools should enable all stakeholders to participate in a transparent manner. Regarding category (ii), the connection to other entities within the institution can be established by a web/wiki page including the portfolio of services and training materials offered by the RSE unit. The RSE unit should advocate the use of RSE techniques and best practices within their institutions actively to strengthen the local community and to reach out to new groups whenever possible. One possible additional measure in this regard is sharing the work done by the RSE unit and the network RSEs as part of, for instance, institutional research colloquia. Activities in category (iii), i.e., outreach to RSE initiatives outside the institution include contributing to events, position papers and the initiatives themselves, either directly from the RSE unit or by advertising at the institution and matchmaking with local RSEs interested in becoming active beyond their local tasks. The RSE unit thus contributes to the RSE communities on a regional, national or international level on the one hand and opens these up to the local RSEs and enables networking on the other hand. It organises the bidirectional exchange between the local and the global community and is the central hub for information coming both ways. 4. Existing implementations A number of successful RSE units have already been established in Germany and many more exist in other countries, especially the UK and the US. In order to understand the service portfolio of these existing RSE units, we conducted a small survey that received a total of twelve responses from Germany, the UK and the US. We asked RSE units for the composition of their service portfolio — the results are shown in Figure 1 . The collected data and evaluation scripts can are published in Ref. 61 . Figure 1. National and international examples of RSE units and their service portfolio, structured by activities corresponding to the modules described in Section 3. a: Kompetenzzentrum Digitale Forschung, Friedrich Schiller University Jena, b: Scientific Software Center, Heidelberg University, c: Research Software Engineering, The University of Reading, d: Research Software Engineering Group, Princton University. Heidelberg and Princeton offer development services, whereas Jena and Reading focus mostly on teaching and consultation services. From the gathered data and the additional free text information of the participants, we conclude that the service components that we have identified in Section 3 are indeed relevant for existing RSE units. Additionally, we see a large diversity in the weighting of these components, which is to be expected given the different environments of the RSE units. Within this diverse data set, we identified two rather different archetypes of RSE units: those that offer development services and those that do not. The RSE units offering development services would typically invest a lot of their resources into this component, whereas others put a much larger emphasis on teaching and consultation services. We should note however, that our survey did not collect information about the size of the RSE unit. It is likely that the RSE units offering development services are also larger in size, and that their total resource commitment to teaching and consultation services is similar to that of those RSE units that do not offer development services. When setting up a new RSE unit, it is important to find the best service portfolio composition for the local environment. This depends on the demand by scientists at the institution, existing structures and the available funding. 5. Realisation strategy We propose building blocks for individual realisation strategies for central institutional RSE units. We start by listing different possibilities for funding RSE positions at a research institution. Following that, we describe a potential transition pathway, starting from existing structures that have grown in research alliances such as, e.g., DFG-funded Collaborative Research Centres or also in research departments of an institution. This is complemented by discussions of the possibility of outsourcing RSE services and of the challenging task of identifying and hiring suitable RSE candidates. 5.1 Funding sources We see four basic options for financing RSE positions, which we will briefly explain below: 1. ordinary budget positions, 2. overhead of externally funded projects, 3. explicitly requested person-months in externally funded projects, and 4. dedicated RSE calls. While each option stands for itself, in reality, an institutional RSE unit will likely need to finance its staff by an appropriate mixture of possibly all four options. The mixture at a particular institution depends heavily on the local conditions. At research institutions, it is important to resolve the conflict between time-limited research funding and the need for permanent positions, the latter being required to remain competitive with industry when hiring highly-qualified RSEs. Experience is also an essential component of software engineering, which makes long-term employment indispensable. In principle, pooling of positions and funds makes it possible to finance permanent positions from changing and mixed sources. An institution’s leadership has to justify taking the corresponding risk of failing to raise external funds. 1. It seems natural to allocate ordinary budget positions for RSEs. However, particularly at German universities, it is usually impossible to create completely new budget positions and the only feasible way is to rededicate an existing position after its corresponding holder has left. Depending on the local circumstances at an institution, this can be a cumbersome and time-consuming process for each such position. 2. Funding organisations additionally allocate a portion of the direct project funds as overhead, which is typically divided between the institution and the applicant. We propose using a small percentage of the overhead agglomerated at the institution to permanently finance central RSE positions. Assuming a third-party funding income of €50 million annually and a 20% overhead, €100,000 in permanent funding requirements for one person-year would only account for 1% of this overhead. 3. In project applications involving the development of research software, corresponding person-months should be requested to finance RSE tasks. In this way, an applicant can book a fixed number of working hours from the RSE pool and pay for the costs accordingly. This model has been successfully implemented at several UK universities. In order to scale, it needs to be supported by an institutional policy. Large scale collaborative projects can often apply for dedicated technical support positions that align well with the idea of RSE units. For example, the German Research Foundation allows requesting funding for “central service units or external service providers” in grant proposals aimed at developing research software. 55 4. Funding organisations are increasingly recognising the need for sustainable research software development and are setting up correspondingly designated funding programmes. The DFG has already organised three calls for proposals in 2016, 56 2019, 57 and 2022. 58 , 59 It is to be expected that even more programs will be launched in the future. An already established RSE unit at an institution increases the chances of being successful in such calls. In addition to these funding options, we encourage funding agencies to provide seed funding for the establishment of RSE structures. Such seed grants ease the decision making process in organisations and give RSEs the leeway to establish collaborations with researchers without the direct need to ask for remuneration. 5.2 Transition pathway We propose a potential transition path, beginning with purely embedded RSEs—distributed across the institution and linked to individual research groups and their projects—and leading toward a centralised institutional RSE unit. After starting with initial measures not necessarily requiring dedicated funding, we discuss developing a business plan and how the RSE unit can be established. We conclude with measures for promoting its growth. 5.2.1 Initial measures The following measures initialise the two modules presented in [Module 1: Foster a local Network of RSEs] and [Module 4: Teaching Services]. While dedicated funding certainly is beneficial already for this step, it is not strictly necessary. Once the two measures are in place, they can be used to illustrate the need for institutional RSE activities and therefore support funding proposals. Network of RSEs Forming a network of RSEs localised at an institution can be initiated by any existing RSE individual or group that is preferably already in contact with other RSEs at the institution. An institutional dedicated mailing list, chat group, and possibly other communication platforms can be created and a request for participation can be circulated via institutional channels such as an employee newsletter. First common events such as social gatherings or RSE-related seminar talks can be organised and announced via the communication platform. If the initiative is geographically local, this process can be accompanied, facilitated and strengthened by founding a local de-RSE chapter [6] . Such network-building has been successfully initiated and implemented at several German research institutions such as the German Aerospace Center and the Forchungszentrum Jülich. Pooling of existing teaching materials and training offers Depending on local RSE efforts, teaching materials and associated training formats are likely to already exist, distributed over individual institutional groups. With the established network, the materials can be pooled and joint training can be offered to a wider institutional audience. This step can be facilitated and formalised by offering introductory courses with a recognised curriculum as provided by The Carpentries [7] or CodeRefinery [8] . 5.2.2 Developing a business plan Decision processes at institutions usually require a business plan on which to base the decision on whether to establish an RSE unit. The business plan should include an outline of the RSE unit, its responsibilities and offerings as a subset of the nine modules presented in [Vision], the funding, and the resulting benefits for the institution and its researchers. A crucial and sometimes difficult question is how to position the RSE unit within the institution’s organisational structure. A canonical place would be a new subunit of an existing unit close to software, training services and computing such as the local or central IT unit or the library. Since most institutions already have an RDM unit, it seems natural to add the RSE unit as a parallel structure. Another choice for the parent unit, particularly at universities, is the faculty for computer science. A key aspect for this decision is that the RSE unit must be able to work with all research groups at the institution, for which it needs to act independently and thus should not be absorbed by a larger unit. Since it offers a unique view on challenges related to research software, a smartly placed RSE unit is able to serve as link between the individual research groups and other central institutional units. Therefore, determining the best place may involve discussions with several stakeholders at the institution and can already be beneficial for creating a network of institutional partners, see the module described in [Module 5: Create a Network of Institutional Partners]. The business plan also needs to address funding for the RSE unit’s initial staff. We consider it necessary that there is a certain amount of base funding provided by the institution that covers a basic RSE unit because much RSE work is not project based. While options can be drawn from the discussion above, specific ideas should be discussed beforehand with the decision makers. In order to facilitate long-term growth of the RSE unit, an institutional policy for requesting person-months in externally funded projects dedicated to RSE should be established. Another part of the business plan should be the governance structure of the RSE unit. One of the decisions to be made is if the unit head is supposed to be part of the unit itself or if the unit will be headed by somebody outside of it. Additionally, installing an advisory board can be proposed in the plan, recruiting from the prospective institutional partners. 5.2.3 Establishing the unit Once the business plan has been approved by the institution, the RSE unit can be established accordingly. The initial staffing depends crucially on the local institutional conditions. One promising possibility is to start with two positions. The first position is an RSE coordinator who is the contact person for all embedded RSEs. Among other things, they are also responsible for organising meetings, developing training programs and reporting to stakeholders. The second position is a central RSE, responsible for providing selected services and infrastructure. These core positions complement the network of RSEs as described in [Module 1: Foster a local Network of RSEs]. Drawing from the business plan and considering the initial staff situation, a first task of the centrally-funded structure is to define a basic service portfolio according to the modules described in [Vision]. In addition to the aforementioned networking and teaching activities, see [Module 1: Foster a local Network of RSEs] and [Module 5: Create a Network of Institutional Partners], it seems natural to start with consultation, see [Module 2: Consultation Services], as this allows to evaluate the potential necessities for other services such as development, infrastructure provisioning, and maintenance. An extension of the initial service portfolio for a larger target audience requires the acquisition of funding for further positions, see below. The best RSE unit can easily become useless if other departments as well as RSEs outside the central hub do not know about it. Therefore, communication and outreach activities as described in [Module 9: Communication and Outreach], particularly connecting to entities within the institution, is of utmost importance at this stage. Although the inception of the RSE unit will be announced once the business plan has been approved by the institution, communication across the RSE hub, the RSE network and other departments should be done on a regular basis. Such a communication should facilitate collaboration among RSEs while also keeping non-RSEs in the loop. 5.2.4 Growth of the unit Acquisition of further funding The most promising possibilities to acquire further funding seem to be explicitly requesting person-months in externally funded projects and dedicated RSE calls, as discussed in [Funding Sources]. We believe that the credibility of a research proposal that is asking for RSE funds is greatly enhanced if the RSE unit is part of this proposal from the beginning. Over time, more and more researchers and proposals are expected to follow the institutional policy such that a consistent stream of income can be generated. Success Story: Founded in January 2017, the Research Computing department of Princeton University has experienced a tremendous growth from the initial two FTEs to a total of 18 FTEs in the span of five years. 48 This growth is based on a continuous influx of new funded projects once successful projects showcase the additional value of RSE services to researchers. Offering of additional services With the additionally acquired funds, the service portfolio of the RSE unit can be enhanced regarding the modules described in [Vision]. Obviously, the selection of modules and their share in the overall portfolio depend on the services that have been applied for in the corresponding proposals. As this is strongly connected to hiring persons with the required expertise, this has to be carefully planned, see also below. Success Story: The Scientific IT Services of ETH Zurich (SIS) started in 2013 with a handful of members and has (as of March 2024) around 50 members. In addition to HPC services, the group also offers RSE services in various areas. These include the development of software applications for RDM, support in the development and improvement of scientific software or the long-term maintenance of software developed in research groups. In addition, SIS offers services in the areas of data science, machine learning, bioinformatics, trusted compute environments, and training and consulting. 5.3 Outsourcing Another possibility for the realisation of local RSE Service providers is by forming a spin-off and pooling the RSE Skills into an external company, which has benefits but also drawbacks. This is an idea that so far lacks examples but for completeness we list some of the advantages and disadvantages. Among the most obvious benefits is that this enables the creation of contracts outside of the WissZeitVG. This also widens the customer base of the RSE unit since the newly founded company may obtain contracts from industry. If this company is backed/branded by the institution, this enables another possibility for an institution to interact with local companies. This might open opportunities for employees to more freely move between industries and academia. But there are drawbacks. Since the company is now an entity external to the institution, the procurement guidelines (“Vergaberichtlinien”) have to be fulfilled, which could, e.g., mean to publicly invite tenders in order to have a competitive procedure. A company has to be profitable entity but this could be partly softened by founding a not-for-profit entity. Moreover, during the outsourcing contract, there has to be a coordinator at both sides and the flow of information from the academic institution to the contracted company has to be established. These are some examples of additional administrative overhead due to the interaction with external partners, and certain domains will have issues with ensuring data privacy in this collaboration. Some of these issues might be legally alleviated by forming framework agreements between an institution and the company. It is of particular importance to agree on requirements and handover criteria, including quality assurance and license specifications. On top of these drawbacks, there are soft factors, like whether an external company is accepted by scientists. 5.4 Staff acquisition/people RSE units need to be staffed, but where do potential employees come from? So far, researchers accidentally find themselves in the role of an RSE because they pursued software development as part of their research. A more deliberate approach with specific RSE education may be necessary to train people in sufficient numbers for central RSE units. Being an RSE should be a career worth aspiring to, just as any other profession, with a long-term perspective. This is a topic covered by a separate paper, 4 but we provide a brief summary here: These RSEs will bring a diverse set of skills centred around the topics of research, digital tools, and team-based work and hence can easily offer the consulting services mentioned in the previous section and guide people to their implementation in their workgroups. To fill gaps, the RSE unit can also maintain a roster of freelance workers. In order to retain RSEs, it should be possible for them to become experts in a field and hence this should make this job more attractive to budding RSEs, in order to mitigate the problem that some will only see this job as a one-year stint after their PhD and then move on to something else. To facilitate the retention of skilled people, industry has long identified education as an effective tool. For RSEs, this should be helped by yet to be formed academic facilities that enable them to keep on learning skills after their first professional qualification, supported by the respective certification programs. In the longer run, research software engineering should be integrated into the existing study programmes. One option here is the creation of an RSE master as a specialisation for computer science or application-domain bachelor programmes. This should be complemented by adding a minor in these application-domain study programs such as biology, music, engineering etc. to facilitate the communication between the corresponding two groups of RSEs. There are already some master’s programs available (e.g., in Berlin, Munich, and Stuttgart), that develop this specialisation on top of a domain bachelor. Moreover, data science curricula already exist and more are in the process of being created. A curated and continuously updated list of these programs is available at Ref. 60 . 6. Conclusions In this paper, we have outlined a vision for central RSE units in research institutions, focusing particularly on the German research landscape. We have proposed a modular framework for structuring the services of such units, identifying nine fundamental modules and providing concrete pathways for their implementation. Our survey of existing RSE units illustrates that such structures can take various forms, ranging from consultation-focused groups to those offering extensive software development services. Yet, all serve to consolidate expertise within a research institution, strengthen cooperation across scientific disciplines, and increase the overall quality of research. Besides addressing local needs in software development and maintenance, well-established RSE units also bring broader institutional benefits, such as improved funding acquisition or enhanced reputational standing. They further enable closer collaboration among related domains like HPC, data management, and digital infrastructure. This ultimately leads to more sustainable, reproducible, and impactful research on and with software-based methods. We encourage decision makers to strategically invest in and formalise central RSE units, recognising their role as indispensable partners in modern research environments. By unifying previously scattered RSE efforts into a coordinated approach with clear mandates, stable funding, and long-term career prospects, institutions have the opportunity to significantly enhance their research capabilities and competitiveness in an increasingly digital scientific world. Data availability Zenodo: Developing central Research Software Engineering units in German research institutions: materials, see Ref. 61 . Accessible under the terms of CC0 at https://doi.org/10.5281/zenodo.16939089 . The project contains an archive containing the responses to the survey in JSON format, as well as all software used to produce the plot in Figure 1 . Data are available under the terms of the Creative Commons Zero “No rights reserved” data waiver (CC0 1.0 Public domain dedication). Software availability Source code available from https://github.com/DE-RSE/2023_paper-RSE-groups . Archived software available from https://doi.org/10.5281/zenodo.16939089 . The software is available under the Creative Commons CC0 1.0 Universal license (note that only the group_composition_plot subfolder is licensed under CC0 – the rest of the repository is licensed CC-BY 4.0). Acknowledgements The authors express their gratitude towards all participants of community meetings that gave input into writing this paper. These meetings were held at deRSE23 in Paderborn, the deRSE Unconference 2023 in Jena and deRSE24 in Würzburg. References 1. Hannay JE, MacLeod C, Singer J, et al. : How do scientists develop and use scientific software? Proceedings of the 2009 ICSE workshop on software engineering for computational science and engineering. IEEE; May 2009. Publisher Full Text 2. Hettrick S, et al. : UK research software survey 2014. Zenodo. Mar. 2015. Publisher Full Text 3. Goble C: Better software, better research. IEEE Internet Comput. 2014; 18 (5): 4–8. Publisher Full Text 4. Goth F, et al. : Foundational Competencies and Responsibilities of a Research Software Engineer: Current State and Suggestions for Future Directions [version 2; peer review: 2 approved]. F1000Res. 2025; 13 : 1429. Publisher Full Text 5. Barker M, Katz DS: Resources on how to create a research software engineering (RSE) group (within an organisation) or association (national, etc). Zenodo. Nov. 2024. Publisher Full Text 6. Martin KC: Research software engineering groups in the UK; origins, organisational context, and practices -‘RSE roadtrip’ planning document. Zenodo. Apr. 2023. Publisher Full Text 7. Barker M, Chue Hong NP, Katz DS, et al. : Introducing the FAIR principles for research software. Sci. Data. 2022; 9 (1): 622. PubMed Abstract | Publisher Full Text | Free Full Text 8. Gruenpeter M, et al. : Defining research software: A controversial discussion. FORCE11, Research Data Alliance, Research Software Alliance; Zenodo, Summary Report of FAIR4RS Subgroup 3 activity and discussion Version 1. Sep. 2021. Publisher Full Text 9. Östlund L, Wicklund N, Glassey R: It’s never too early to learn about code quality: A longitudinal study of code quality in first-year computer science students. Proceedings of the 54th ACM technical symposium on computer science education v. 1, in SIGCSE 2023. Association for Computing Machinery; 2023; pp. 792–798. Publisher Full Text 10. Schulmeyer G: Handbook of software quality assurance. 4th ed. Artech House; 2008. 11. Anzt H, et al. : An environment for sustainable research software in Germany and beyond: Current state, open challenges, and call for action [version 2; peer review: 2 approved]. F1000Res. 2021; 9 (295). Publisher Full Text 12. Grima F, Trépo G: Internal consultants: Why do clients use them and for what benefits? Eur. Manag. J. Apr. 2011; 29 : 144–154. Publisher Full Text 13. Elsholz U, Jäkel L, Megerle A, et al. : Verstetigung von Netzwerken. Berlin, Germany: Arbeitsgemeinschaft Betriebliche Weiterbildungsforschung e. V., Projekt Qualifikations-Entwicklungs-Management; 2006. Reference Source 14. Haupt C, Stoffers M: Roles in research software engineering (RSE) consultancies. Proceedings of the research software engineers in HPC workshop at SC21 (RSE-HPC-2021): Creating community, building careers, addressing challenges. Sep. 2021. Publisher Full Text 15. Helmholtz: Helmholtz federated IT services (HIFIS). Accessed: Feb. 20, 2025. Reference Source 16. Keegan L, Kempf D, Ulusoy I: Scientific Software Center at Heidelberg University: White paper. Zenodo. Mar. 2024. Publisher Full Text 17. University Heidelberg: Scientific Software Center. Accessed: Feb. 20, 2025. Reference Source 18. University Jena: Competence center digital research (zedif). Accessed: Feb. 20, 2025. Reference Source 19. Blech C, et al. : SURESOFT: Towards sustainable research software. campusSOURCE award 2022. Jul. 2022. Publisher Full Text 20. SureSoft: TU Braunschweig, FAU Erlangen Nürnberg. Accessed: Feb. 20, 2025. Reference Source 21. Schima-Voigt K: Research Software Engineering als Service an einer wissenschaftlichen Bibliothek. Zenodo. Mar. 2023. Publisher Full Text 22. National Competence Centres: EuroCC-access. Accessed: Sep. 22, 2025. Reference Source 23. Members of EuroCC Consortium: EuroCC success stories. 1st ed.Stuttgart, Germany: HLRS; 2023. Reference Source 24. Members of EuroCC 2 Consortium and CASTIEL 2 Consortium: EuroCC success stories. 1st ed. Stuttgart, Germany: HLRS; 2024. Reference Source 25. Crouch S, Hong NC, Hettrick S, et al. : The software sustainability institute: Changing research software attitudes and practices. Comput. Sci. Eng. 2013; 15 (6): 74–80. Publisher Full Text 26. Smithies J: Research software (RS) careers: Generic learnings from King’s Digital Lab, King’s College London. King’s Digital Lab; Nov. 2018. Report. Publisher Full Text 27. German Research Foundation: Clusters of excellence funding line - proposal template. Accessed: Feb. 08, 2025. Reference Source 28. Deutsche Forschungsgemeinschaft: Guidelines for safeguarding good research practice. Deutsche Forschungsgemeinschaft, Code of Conduct version 1.1. Apr. 2022. Publisher Full Text 29. Redaktion von forschungsdaten.info: Forschungsdatenmanagement und forschungsförderer. Accessed: Feb. 09, 2025. Reference Source 30. Redaktion von forschungsdaten.info: Software management plans - managing of (research) software efficiently. Accessed: Feb. 09, 2025. Reference Source 31. Task Group Research Software: Recommendations for the implementation of guidelines and policies on research software management at the Helmholtz Centers. Helmholtz Open Science Office, Potsdam, Germany, Position paper. Nov. 2019. Publisher Full Text 32. Bach F, et al. : Model policy on sustainable software at the Helmholtz Centers. Potsdam, Germany, Model policy: Helmholtz Open Science Office; Nov. 2019. Publisher Full Text 33. Konrad U, Förstner K, Reetz J, et al. : Digital services for science – where is the journey heading? Zenodo. Feb. 2021. Position paper. Publisher Full Text 34. Schlauch T, Meinel M, Haupt C: DLR software engineering guidelines. German Aerospace Center; Aug. 2018. Zenodo, Version 1.0.0. Publisher Full Text 35. Utrecht University: University policy framework for research data Utrecht University. Policy paper. Jan. 2016. Accessed: Mar. 06, 2024. Reference Source 36. Does your code stand up to scrutiny? Nature . Mar. 2018; 555 (7695): 142–142. PubMed Abstract | Publisher Full Text 37. Chue Hong NP, et al. : FAIR principles for research software (FAIR4RS principles). Zenodo. May 2022. Publisher Full Text 38. Barker M, et al. : The FAIR for research software principles after two years: An adoption update. Zenodo. 2024. Publisher Full Text 39. Wilkinson MD, Sansone S-A, Marjan G, et al. : FAIR assessment tools: Towards an ‘apples to apples’ comparisons. EOSC Association AISBL; Zenodo, Project deliverable. Jan. 2023. Publisher Full Text 40. FAIR Data Maturity Model Working Group: FAIR data maturity model: Core criteria to assess the implementation level of the FAIR data principles. Accessed: Mar. 06, 2024. Reference Source 41. Lamprecht A-L, Garcia L, Kuzak M, et al. : Towards FAIR principles for research software. Data Sci. Jan. 2020; 3 (1): 37–59. Publisher Full Text 42. Carver J, Heaton D, Hochstein L, et al. : Self-perceptions about software engineering: A survey of scientists and engineers. Comput. Sci. Eng. 2013; 15 (1): 7–11. Publisher Full Text 43. Katz DS, McHenry K, Reinking C, Haines R: Research software development and management in universities: Case studies from manchester’s RSDS group, illinois’ NCSA, and notre dame’s CRC. 2019 IEEE/ACM 14th international workshop on software engineering for science (SE4Science). 2019; pp. 17–24. Publisher Full Text 44. Sinclair G: Research software engineering. Accessed: Jan. 31, 2025. Reference Source 45. University of Notre Dame: Center for research computing. Accessed: Jan. 31, 2025. Reference Source 46. Standford University IT: Research software engineering services. Accessed: Jan. 31, 2025. Reference Source 47. Princeton University: Princeton research computing: Research software engineering. Accessed: Jan. 31, 2025. Reference Source 48. Cosden IA: The Princeton University research software engineering group model: Operational and organizational approaches. Comput. Sci. Eng. Sep. 2022; 24 (5): 24–31. Publisher Full Text 49. Mobile development service (MDS). http 50. Felderer M, Goedicke M, Grunske L, et al. : Investigating research software engineering: Toward RSE research. Commun. ACM. Jan. 2025; 68 (2): 20–23. Publisher Full Text 51. Di Cosmo R: Archiving and referencing source code with software heritage.Bigatti AM, Carette J, Davenport JH, et al. , editors. Mathematical software – ICMS 2020. Lecture notes in computer science. Vol. 12097. Cham: Springer International Publishing; 2020; pp. 362–373. Publisher Full Text 52. Di Cosmo R, Zacchiroli S: The software heritage open science ecosystem. Software ecosystems: Tooling and analytics. Mens T, De Roover C , Cleve A, editors. Cham: Springer International Publishing; 2023; pp. 33–61. Publisher Full Text 53. GitHub: Referencing and citing content. Accessed: Mar. 06, 2024. Reference Source 54. Ehlert I, et al. : natESM strategy: Uniting earth system modeling for a sustainable future. Hamburg, Germany: Deutsches Klimarechenzentrum GmbH, Projekt natESM; 2025. Reference Source 55. Katerbow M, Mannseicher F, Metzler S, et al. : Handling of research software in the DFG’s funding activities. Bonn, Germany: German Research Foundation; Oct. 2024. Publisher Full Text 56. German Research Foundation: Call: Nachhaltigkeit von Forschungssoftware (pdf). Accessed: Feb. 20, 2025. Reference Source 57. German Research Foundation: Call: Qualitätssicherung von Forschungssoftware durch ihre nachhaltige Nutzbarmachung. Accessed: Feb. 20, 2025. Reference Source 58. German Research Foundation: Call: Research software – quality assured and re-usable. Accessed: Feb. 20, 2025. Reference Source 59. Katerbow M, Royeck M, Raabe A: DFG-Förderung und der digitale Wandel in den Wissenschaften: Ein Wegweiser zu Fördermöglichkeiten und Leitlinien. Inform. Spektrum. 2018; 41 (6): 421–428. Publisher Full Text 60. The teachingRSE project: Learn research software engineering. Accessed: Feb. 24, 2024. Reference Source 61. Kempf D, Löffler F, Caspart R, et al. : Developing central Research Software Engineering units in German research institutions: materials (1.0.0). [Data set]. Zenodo. 2025. Publisher Full Text Footnotes 1 Nationale Forschungsdateninfrastruktur: the national research data infrastructure in Germany. 2 https://forschungsdaten.info/fdm-im-deutschsprachigen-raum/deutschland/ . 3 Sonderforschungsbereich (SFB). 4 Cluster der Exzellenzinitiative. 5 https://www.nature.com/nature-portfolio/editorial-policies/reporting-standards . 6 A list of existing chapters: https://de-rse.org/chapter/ . 7 Carpentry examples: https://software-carpentry.org/lessons/ . 8 CodeRefinery examples: https://coderefinery.org/lessons/ . Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 12 May 2026 ADD YOUR COMMENT Comment Author details Author details 1 Scientific Software Center, Heidelberg University, Heidelberg, Germany 2 Scientific Computing Center, Karlsruhe Institute of Technology, Karlsruhe, Germany 3 Institute for Modelling Hydraulic and Environmental Systems, University of Stuttgart, Stuttgart, Germany 4 Institute for Theoretical Physics and Astrophysics, University of Würzburg, Würzburg, Germany 5 University Library, Technische Universität Braunschweig, Braunschweig, Germany 6 de-RSE e.V. – Society for Research Software in Germany, -, Germany 7 Competence Center Digital Research, Friedrich Schiller University Jena, Jena, Germany 8 Jülich Supercomputing Centre, Forschungszentrum Jülich GmbH, Jülich, Germany 9 Cluster of Excellence Matters of Activity. Image Space Material at Humboldt- Universität zu Berlin,, Berlin, 10099, Germany 10 Center for Computational and Theoretical Biology, University of Würzburg, Würzburg, Germany 11 Semantic Technologies team, ZB MED Information Centre for Life Sciences, Köln, Germany 12 German Climate Computing Centre, Hamburg, Hamburg, Germany 13 Institute for Computational Physics, University of Stuttgart, Stuttgart, Germany 14 Geschäftsbereich IT, Charité Universitätsmedizin Berlin, Berlin, Germany 15 Institute of Biomedical Engineering, Karlsruhe Institute of Technology, Karlsruhe, Germany 16 Centre for Advanced Analytics and Predictive Sciences, University of Augsburg, Augsburg, Germany 17 Scientific IT Services, ETH Zurich, Zürich, Switzerland 18 Institute of Carbon Cycles, Helmholtz Coastal Data Center, Helmholtz-Zentrum Hereon, Geesthacht, Germany Dominic Kempf Roles: Conceptualization, Funding Acquisition, Investigation, Project Administration, Visualization, Writing – Original Draft Preparation, Writing – Review & Editing René Caspart Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Bernd Flemisch Roles: Conceptualization, Project Administration, Writing – Original Draft Preparation, Writing – Review & Editing Florian Goth Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Jan Linxweiler Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Frank Löffler Roles: Conceptualization, Data Curation, Investigation, Project Administration, Visualization, Writing – Original Draft Preparation, Writing – Review & Editing Philipp Matthias Schäfer Roles: Conceptualization, Investigation, Resources, Writing – Original Draft Preparation, Writing – Review & Editing Robert Speck Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Alexander Struck Roles: Conceptualization, Writing – Original Draft Preparation, Writing – Review & Editing Markus J. Ankenbrand Roles: Writing – Review & Editing Leyla Jael Castro Roles: Writing – Review & Editing Iris Ehlert Roles: Writing – Review & Editing Jean-Noël Grad Roles: Writing – Review & Editing Magnus Hagdorn Roles: Writing – Review & Editing Axel Loewe Roles: Writing – Review & Editing Michael Schlottke-Lakemper Roles: Writing – Review & Editing Uwe Schmitt Roles: Writing – Review & Editing Philipp S. Sommer Roles: Writing – Review & Editing Competing interests No competing interests were disclosed. Grant information BF would like to thank the Federal Government and the Heads of Government of the Länder, as well as the Joint Science Conference (GWK), for their initiative within the framework of the NFDI4ING consortium (German Research Foundation (DFG) - project number 442146713). FG acknowledges funding from the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) through the SFB 1170 “Tocotronics”, project Z03 - project number 258499086. JNG acknowledges funding from the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) - project numbers 391126171 (PI: Holm) and 528726435 (PI: Weeber), from the German Federal Ministry of Education and Research (Bundesministeriums für Bildung und Forschung, BMBF) under the funding code 16HPC095, and from the European Union – this work has received funding from the European High Performance Computing Joint Undertaking (JU) and countries participating in the project under grant agreement No 101093169. DK acknowledges support from the Scientific Software Center which is funded as part of the Excellence Strategy of the German Federal and State Governments. AL acknowledges funding by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) – project number 507828355. AS acknowledges the support of the Cluster of Excellence »Matters of Activity. Image Space Material« funded by the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) under Germany's Excellence Strategy – EXC 2025 – 390648296. MSL acknowledges funding from the Deutsche Forschungsgemeinschaft (DFG, German Research Foundation) through the research unit FOR-5409 "SnuBIC", project C2 (project number 501202213), and through individual grant "ACTRIX" (project number 528753982). The funders had no role in study design, data collection and analysis, decision to publish, or preparation of the manuscript. Article Versions (1) version 1 Published: 12 May 2026, 15:719 https://doi.org/10.12688/f1000research.171263.1 Copyright © 2026 Kempf D et al . This is an open access article distributed under the terms of the Creative Commons Attribution License , which permits unrestricted use, distribution, and reproduction in any medium, provided the original work is properly cited. Download Export To Sciwheel Bibtex EndNote ProCite Ref. Manager (RIS) Sente metrics Views Downloads F1000Research - - PubMed Central info_outline Data from PMC are received and updated monthly. - - Citations open_in_new 0 open_in_new 0 open_in_new SEE MORE DETAILS CITE how to cite this article Kempf D, Caspart R, Flemisch B et al. Establishing central Research Software Engineering units in German research institutions [version 1; peer review: awaiting peer review] . F1000Research 2026, 15 :719 ( https://doi.org/10.12688/f1000research.171263.1 ) NOTE: If applicable, it is important to ensure the information in square brackets after the title is included in all citations of this article. COPY CITATION DETAILS track receive updates on this article Track an article to receive email alerts on any updates to this article. TRACK THIS ARTICLE Share Open Peer Review Current Reviewer Status: AWAITING PEER REVIEW AWAITING PEER REVIEW ? Key to Reviewer Statuses VIEW HIDE Approved The paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved Fundamental flaws in the paper seriously undermine the findings and conclusions Comments on this article Comments (0) Version 1 VERSION 1 PUBLISHED 12 May 2026 ADD YOUR COMMENT Comment keyboard_arrow_left keyboard_arrow_right Open Peer Review Reviewer Status AWAITING PEER REVIEW Comments on this article All Comments (0) Add a comment Sign up for content alerts Sign Up You are now signed up to receive this alert Browse by related subjects Alongside their report, reviewers assign a status to the article: Approved - the paper is scientifically sound in its current form and only minor, if any, improvements are suggested Approved with reservations - A number of small changes, sometimes more significant revisions are required to address specific details and improve the papers academic merit. Not approved - fundamental flaws in the paper seriously undermine the findings and conclusions Adjust parameters to alter display View on desktop for interactive features Includes Interactive Elements View on desktop for interactive features Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Stay Updated Sign up for content alerts and receive a weekly or monthly email with all newly published articles Register with F1000Research Already registered? Sign in Not now, thanks close PLEASE NOTE If you are an AUTHOR of this article, please check that you signed in with the account associated with this article otherwise we cannot automatically identify your role as an author and your comment will be labelled as a “User Comment”. If you are a REVIEWER of this article, please check that you have signed in with the account associated with this article and then go to your account to submit your report, please do not post your review here. If you do not have access to your original account, please contact us . All commenters must hold a formal affiliation as per our Policies . The information that you give us will be displayed next to your comment. User comments must be in English, comprehensible and relevant to the article under discussion. We reserve the right to remove any comments that we consider to be inappropriate, offensive or otherwise in breach of the User Comment Terms and Conditions . Commenters must not use a comment for personal attacks. When criticisms of the article are based on unpublished data, the data should be made available. I accept the User Comment Terms and Conditions Please confirm that you accept the User Comment Terms and Conditions. Affiliation ✕ refresh Please enter your institution. Note: To add your institution or organisation, start typing the name and then select the correct name from the list. Where applicable, the name will appear in both the original language and in English. Do not paste in the name. If the name does not appear in the drop-down list, we will display the information you have entered. ✕ refresh Country/Region * USA UK Canada China France Germany Afghanistan Aland Islands Albania Algeria American Samoa Andorra Angola Anguilla Antarctica Antigua and Barbuda Argentina Armenia Aruba Australia Austria Azerbaijan Bahamas Bahrain Bangladesh Barbados Belarus Belgium Belize Benin Bermuda Bhutan Bolivia Bosnia and Herzegovina Botswana Bouvet Island Brazil British Indian Ocean Territory British Virgin Islands Brunei Bulgaria Burkina Faso Burundi Cambodia Cameroon Canada Cape Verde Cayman Islands Central African Republic Chad Chile China Christmas Island Cocos (Keeling) Islands Colombia Comoros Congo Cook Islands Costa Rica Cote d'Ivoire Croatia Cuba Cyprus Czech Republic Democratic Republic of the Congo Denmark Djibouti Dominica Dominican Republic Ecuador Egypt El Salvador Equatorial Guinea Eritrea Estonia Ethiopia Falkland Islands Faroe Islands Federated States of Micronesia Fiji Finland France French Guiana French Polynesia French Southern Territories Gabon Georgia Germany Ghana Gibraltar Greece Greenland Grenada Guadeloupe Guam Guatemala Guernsey Guinea Guinea-Bissau Guyana Haiti Heard Island and Mcdonald Islands Holy See (Vatican City State) Honduras Hong Kong Hungary Iceland India Indonesia Iran Iraq Ireland Israel Italy Jamaica Japan Jersey Jordan Kazakhstan Kenya Kiribati Kosovo (Serbia and Montenegro) Kuwait Kyrgyzstan Lao People's Democratic Republic Latvia Lebanon Lesotho Liberia Libya Liechtenstein Lithuania Luxembourg Macao Madagascar Malawi Malaysia Maldives Mali Malta Marshall Islands Martinique Mauritania Mauritius Mayotte Mexico Minor Outlying Islands of the United States Moldova Monaco Mongolia Montenegro Montserrat Morocco Mozambique Myanmar Namibia Nauru Nepal Netherlands Antilles New Caledonia New Zealand Nicaragua Niger Nigeria Niue Norfolk Island North Korea North Macedonia Northern Mariana Islands Norway Oman Pakistan Palau Palestinian Territory Panama Papua New Guinea Paraguay Peru Philippines Pitcairn Poland Portugal Puerto Rico Qatar Reunion Romania Russian Federation Rwanda Saint Helena Saint Kitts and Nevis Saint Lucia Saint Pierre and Miquelon Saint Vincent and the Grenadines Samoa San Marino Sao Tome and Principe Saudi Arabia Senegal Serbia Seychelles Sierra Leone Singapore Slovakia Slovenia Solomon Islands Somalia South Africa South Georgia and the South Sandwich Is South Korea South Sudan Spain Sri Lanka Sudan Suriname Svalbard and Jan Mayen Swaziland Sweden Switzerland Syria Taiwan Tajikistan Tanzania Thailand The Gambia The Netherlands Timor-Leste Togo Tokelau Tonga Trinidad and Tobago Tunisia Turkey Turkmenistan Turks and Caicos Islands Tuvalu UK USA Uganda Ukraine United Arab Emirates United States Virgin Islands Uruguay Uzbekistan Vanuatu Venezuela Vietnam Wallis and Futuna West Bank and Gaza Strip Western Sahara Yemen Zambia Zimbabwe Please select your country/region. You must enter a comment. Competing Interests Please disclose any competing interests that might be construed to influence your judgment of the article's or peer review report's validity or importance. Competing Interests Policy Provide sufficient details of any financial or non-financial competing interests to enable users to assess whether your comments might lead a reasonable person to question your impartiality. Consider the following examples, but note that this is not an exhaustive list: Examples of 'Non-Financial Competing Interests' Within the past 4 years, you have held joint grants, published or collaborated with any of the authors of the selected paper. You have a close personal relationship (e.g. parent, spouse, sibling, or domestic partner) with any of the authors. You are a close professional associate of any of the authors (e.g. scientific mentor, recent student). You work at the same institute as any of the authors. You hope/expect to benefit (e.g. favour or employment) as a result of your submission. You are an Editor for the journal in which the article is published. Examples of 'Financial Competing Interests' You expect to receive, or in the past 4 years have received, any of the following from any commercial organisation that may gain financially from your submission: a salary, fees, funding, reimbursements. You expect to receive, or in the past 4 years have received, shared grant support or other funding with any of the authors. You hold, or are currently applying for, any patents or significant stocks/shares relating to the subject matter of the paper you are commenting on. Please state your competing interests The comment has been saved. An error has occurred. Please try again. Cancel Post var lTitle = "Establishing central Research Software Engineering...".replace("'", ''); var linkedInUrl = "http://www.linkedin.com/shareArticle?url=https://f1000research.com/articles/15-719/v1" + "&title=" + encodeURIComponent(lTitle) + "&summary=" + encodeURIComponent('Read the article by '); var deliciousUrl = "https://del.icio.us/post?url=https://f1000research.com/articles/15-719/v1&title=" + encodeURIComponent(lTitle); var redditUrl = "http://reddit.com/submit?url=https://f1000research.com/articles/15-719/v1" + "&title=" + encodeURIComponent(lTitle); linkedInUrl += encodeURIComponent('Kempf D et al.'); var offsetTop = /chrome/i.test( navigator.userAgent ) ? 4 : -10; var addthis_config = { ui_offset_top: offsetTop, services_compact : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_expanded : "facebook,twitter,www.linkedin.com,www.mendeley.com,reddit.com", services_custom : [ { name: "LinkedIn", url: linkedInUrl, icon:"/img/icon/at_linkedin.svg" }, { name: "Mendeley", url: "http://www.mendeley.com/import/?url=https://f1000research.com/articles/15-719/v1/mendeley", icon:"/img/icon/at_mendeley.svg" }, { name: "Reddit", url: redditUrl, icon:"/img/icon/at_reddit.svg" }, ] }; var addthis_share = { url: "https://f1000research.com/articles/15-719", templates : { twitter : "Establishing central Research Software Engineering units in German.... Kempf D et al., published by " + "@F1000Research" + ", https://f1000research.com/articles/15-719/v1" } }; if (typeof(addthis) != "undefined"){ addthis.addEventListener('addthis.ready', checkCount); addthis.addEventListener('addthis.menu.share', checkCount); } $(".f1r-shares-twitter").attr("href", "https://twitter.com/intent/tweet?text=" + addthis_share.templates.twitter); $(".f1r-shares-facebook").attr("href", "https://www.facebook.com/sharer/sharer.php?u=" + addthis_share.url); $(".f1r-shares-linkedin").attr("href", addthis_config.services_custom[0].url); $(".f1r-shares-reddit").attr("href", addthis_config.services_custom[2].url); $(".f1r-shares-mendelay").attr("href", addthis_config.services_custom[1].url); function checkCount(){ setTimeout(function(){ $(".addthis_button_expanded").each(function(){ var count = $(this).text(); if (count !== "" && count != "0") $(this).removeClass("is-hidden"); else $(this).addClass("is-hidden"); }); }, 1000); } close How to cite this report {{reportCitation}} Cancel Copy Citation Details $(function(){R.ui.buttonDropdowns('.dropdown-for-downloads');}); $(function(){R.ui.toolbarDropdowns('.toolbar-dropdown-for-downloads');}); $.get("/articles/acj/171263/188851") new F1000.Clipboard(); new F1000.ThesaurusTermsDisplay("articles", "article", "188851"); $(document).ready(function() { $( "#frame1" ).on('load', function() { var mydiv = $(this).contents().find("div"); var h = mydiv.height(); console.log(h) }); var tooltipLivingFigure = jQuery(".interactive-living-figure-label .icon-more-info"), titleLivingFigure = tooltipLivingFigure.attr("title"); tooltipLivingFigure.simpletip({ fixed: true, position: ["-115", "30"], baseClass: 'small-tooltip', content:titleLivingFigure + " " }); tooltipLivingFigure.removeAttr("title"); $("body").on("click", ".cite-living-figure", function(e) { e.preventDefault(); var ref = $(this).attr("data-ref"); $(this).closest(".living-figure-list-container").find("#" + ref).fadeIn(200); }); $("body").on("click", ".close-cite-living-figure", function(e) { e.preventDefault(); $(this).closest(".popup-window-wrapper").fadeOut(200); }); $(document).on("mouseup", function(e) { var metricsContainer = $(".article-metrics-popover-wrapper"); if (!metricsContainer.is(e.target) && metricsContainer.has(e.target).length === 0) { $(".article-metrics-close-button").click(); } }); var articleId = $('#articleId').val(); if($("#main-article-count-box").attachArticleMetrics) { $("#main-article-count-box").attachArticleMetrics(articleId, { articleMetricsView: true }); } }); var figshareWidget = $(".new_figshare_widget"); if (figshareWidget.length > 0) { window.figshare.load("f1000", function(Widget) { // Select a tag/tags defined in your page. In this tag we will place the widget. _.map(figshareWidget, function(el){ var widget = new Widget({ articleId: $(el).attr("figshare_articleId") //height:300 // this is the height of the viewer part. [Default: 550] }); widget.initialize(); // initialize the widget widget.mount(el); // mount it in a tag that's on your page // this will save the widget on the global scope for later use from // your JS scripts. This line is optional. //window.widget = widget; }); }); } close Error Close Add Reset F1000.MICROSERVICES.AFFILIATION = ''; $(document).ready(function () { $('.js-affiliations-form').each((index, form) => { new AffiliationForm({ formId: form.id, institutionErrorSelector: '.comment-enter-institution', departmentErrorSelector: '.comment-enter-department', placeSelector: '.js-add-comment-place', stateSelector: '.js-add-comment-state', zipCodeSelector: '.js-add-comment-zipcode', countrySelector: '.js-add-comment-country', countryErrorSelector: '.comment-enter-country', }); }); }); $(document).ready(function () { var reportIds = { "484759": 0, "484758": 0, "484757": 0, "484756": 0, "484755": 0, "484754": 0, "484753": 0, "484762": 0, "484761": 0, "484760": 0, }; $(".referee-response-container,.js-referee-report").each(function(index, el) { var reportId = $(el).attr("data-reportid"), reportCount = reportIds[reportId] || 0; $(el).find(".comments-count-container,.js-referee-report-views").html(reportCount); }); var uuidInput = $("#article_uuid"), oldUUId = uuidInput.val(), newUUId = "ccd13487-c713-46c6-b724-b1775db4aa6c"; uuidInput.val(newUUId); $("a[href*='article_uuid=']").each(function(index, el) { var newHref = $(el).attr("href").replace(oldUUId, newUUId); $(el).attr("href", newHref); }); }); An innovative open access publishing platform offering rapid publication and open peer review, whilst supporting data deposition and sharing. Browse Gateways Collections How it Works Contact For Developers Cookie Notice Privacy Notice RSS Submit Your Research Follow us © 2012-2026 F1000 Research Ltd. ISSN 2046-1402 | Legal | Partner of Research4Life • CrossRef • ORCID • FAIRSharing R.templateTests.simpleTemplate = R.template(' $text $text $text $text $text '); R.templateTests.runTests(); var F1000platform = new F1000.Platform({ name: "f1000research", displayName: "F1000Research", hostName: "f1000research.com", id: "1", editorialEmail: "
[email protected]", infoEmail: "
[email protected]", usePmcStats: true }); $(function(){R.ui.dropdowns('.dropdown-for-authors, .dropdown-for-about, .dropdown-for-myresearch');}); // $(function(){R.ui.dropdowns('.dropdown-for-referees');}); $(document).ready(function () { if ($(".cookie-warning").is(":visible")) { $(".sticky").css("margin-bottom", "35px"); $(".devices").addClass("devices-and-cookie-warning"); } $(".cookie-warning .close-button").click(function (e) { $(".devices").removeClass("devices-and-cookie-warning"); $(".sticky").css("margin-bottom", "0"); }); $("#tweeter-feed .tweet-message").each(function (i, message) { var self = $(message); self.html(linkify(self.html())); }); $(".partner").on("mouseenter mouseleave", function() { $(this).find(".gray-scale, .colour").toggleClass("is-hidden"); }); }); Sign In Remember me Forgotten your password? Sign In Cancel Email or password not correct. Please try again Please wait... $(function(){ // Note: All the setup needs to run against a name attribute and *not* the id due the clonish // nature of facebox... $("a[id=googleSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("GOOGLE"); $("form[id=oAuthForm]").submit(); }); $("a[id=facebookSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("FACEBOOK"); $("form[id=oAuthForm]").submit(); }); $("a[id=orcidSignInButton]").click(function(event){ event.preventDefault(); $("input[id=oAuthSystem]").val("ORCID"); $("form[id=oAuthForm]").submit(); }); }); If you've forgotten your password, please enter your email address below and we'll send you instructions on how to reset your password. The email address should be the one you originally registered with F1000. Email address not valid, please try again You registered with F1000 via Google, so we cannot reset your password. To sign in, please click here . If you still need help with your Google account password, please click here . You registered with F1000 via Facebook, so we cannot reset your password. To sign in, please click here . If you still need help with your Facebook account password, please click here . Code not correct, please try again Reset password Cancel Email us for further assistance. Server error, please try again. If your email address is registered with us, we will email you instructions to reset your password. If you think you should have received this email but it has not arrived, please check your spam filters and/or contact for further assistance. Please wait... Register $(document).ready(function () { signIn.createSignInAsRow($("#sign-in-form-gfb-popup")); $(".target-field").each(function () { var uris = $(this).val().split("/"); if (uris.pop() === "login") { $(this).val(uris.toString().replace(",","/")); } }); });
Text is read by the "Ask this paper" AI Q&A widget below.
Extraction quality varies by source — PMC NXML preserves structure
cleanly, OA-HTML may include some navigation residue, and OA-PDF can
have broken hyphenation. The publisher copy
(via DOI)
is the canonical version.