CINXE.COM
DHI Head of Architecture – Implementation and Delivery
<!DOCTYPE html> <html lang="en-GB"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width,height=device-height,initial-scale=1.0" /> <base href="/"> <title>DHI Head of Architecture – Implementation and Delivery </title> <meta name="description" content="Company Overview: DHI is a global leader in delivering innovative solutions for water, environment, and sustainability. With a history of excellence spanning over 50 years, we combine digital technolo"> <meta property="og:title" content="DHI Head of Architecture – Implementation and Delivery "> <meta property="og:type" content="website"> <meta property="og:url" content="https://dhi.career.emply.com/ad/head-of-architecture-implementation-and-delivery/n4p1jv/en"> <meta property="og:image" content=""> <meta property="og:description" content="Company Overview: DHI is a global leader in delivering innovative solutions for water, environment, and sustainability. With a history of excellence spanning over 50 years, we combine digital technolo"> <meta property="fb:app_id" content=""> <link rel="preconnect" href="https://fonts.googleapis.com"> <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin> <link href="https://fonts.googleapis.com/css2?family=Roboto:ital,wght@0,400;0,700;1,400;1,700&display=swap" rel="stylesheet"> <link rel="shortcut icon" href="/img/favicon.ico"> <link href="/bundles/css?v=ym4IVaHb6jkuBKloU_CG28BUxzyZGWKkkoR7hS8hxfw1" rel="stylesheet"/> <script src="/bundles/js?v=y8nqM23MgD-BR9BqJqqcDXysymyvS9giJhpfWnCrnGY1"></script> <script type="text/javascript"> $(function () { $('.titleTooltip').tooltipster(); }); </script> <script type="text/javascript"> $(document).ready(function () { var referrer = document.referrer; if (referrer && localStorage && !referrer.startsWith(window.location.origin)) { localStorage.setItem('referrer', referrer); } }); </script> <script> var mapInits = []; var mapInitialized = false; function initMap() { mapInitialized = true; for (var i = 0; i < mapInits.length; i++) { mapInits[i](); } } </script> <script src="https://maps.googleapis.com/maps/api/js?callback=initMap&libraries=places&key=AIzaSyDDwJDtaszetWDicXKS6Fvkp-K8MO3NSxM"></script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> <style> .csl_body { font-family: 'Roboto', arial, verdana !important; color: #000000; } .css_headline { color: #000000; } .css_subheadline { color: #000000; opacity: 1; } .css_heightCell { color: #000000; } .csl_top { position: relative; background: #fff; line-height: 24px; font-size: 16px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); z-index: 100; } .csl_top .css_holder { padding-top: 0; padding-bottom: 0; } .csl_topTable { float: left; display: table; width: 100%; } .csl_topLogo { display: table-cell; padding: 20px 0; vertical-align: middle; } @media (max-width: 795px) { .csl_topLogo {padding: 10px 0;} } .csl_topLogo:empty:before { content: attr(careersite); line-height: 36px; font-size: 26px; } @media (max-width: 1275px) { .csl_topLogo:empty:before {font-size: 20px;} } .csl_topLogo img { float: left; max-width: 50vw; max-height: 90px; } .csl_topMenu { display: table-cell; vertical-align: middle; } .csl_topMenu > ul { transition: all 0.25s; float: right; list-style-type: none; padding: 0; margin: 0; } @media (max-width: 795px) { .csl_topMenu > ul { position: absolute; top: 0; left: 0; width: calc(100% - 60px); background: #fff; overflow: hidden; transform: translate(0, -100%); border-bottom-right-radius: 10px; } .csl_topMenu.active > ul { transform: translate(0, 0); box-shadow: 0 0 20px rgba(0, 0, 0, 0.15); } } .csl_topMenu > ul > li { position: relative; float: left; padding: 0 20px; box-sizing: border-box; } @media (max-width: 1275px) { .csl_topMenu > ul > li {padding: 0 10px;} } @media (max-width: 795px) { .csl_topMenu > ul > li { display: block; width: 100%; padding: 0; } } .csl_topMenu > ul > li:last-child { padding-right: 0; } .csl_topLink { transition: all 0.25s; position: relative; display: block; padding: 10px 0; text-decoration: none; color: #000; opacity: 0.75; } .csl_topLinkHolder.active .csl_topLink, .csl_topLinkHolder .csl_topLink:hover { opacity: 1; } .csl_topLink:after { transition: all 0.25s; content: ''; position: absolute; bottom: 5px; left: 50%; width: 0%; height: 2px; background: #1d9a3f; opacity: 0; transform: translate(-50%, 0); } .csl_topLink:hover:after, .csl_topLinkHolder.active .csl_topLink:after { width: 100%; opacity: 1; } @media (max-width: 795px) { .csl_topLink { padding: 15px 20px; font-weight: bold; border-bottom: 1px solid #eee; opacity: 1; } .csl_topLink:hover { background: rgba(0, 0, 0, 0.025); } .csl_topLink:after { display: none; } } .csl_topMenu ul li ul { transition: all 0.25s 0.5s; display: none; position: absolute; top: 40px; left: 0; background: #fff; list-style-type: none; padding: 5px 0; margin: 0; border-bottom-left-radius: 3px; border-bottom-right-radius: 3px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); opacity: 0; } @media (max-width: 795px) { .csl_topMenu ul li ul { display: block; position: relative; top: 0 !important; padding: 0; border-radius: 0; box-shadow: none; opacity: 1 !important; } } .csl_topMenu ul li:hover ul { transition: all 0.25s; display: block; top: 60px; opacity: 0.9; } @media (min-width: 796px) { .csl_topMenu ul li ul:before { content: ''; position: absolute; top: -21px; left: 0; width: 100%; height: 21px; } } .csl_topMenu ul li ul li { white-space: nowrap; } .csl_topMenu ul li ul li a { transition: all 0.25s; display: block; padding: 5px 20px; text-decoration: none; color: #000; } @media (max-width: 795px) { .csl_topMenu ul li ul li a { padding: 10px 20px 8px 30px; border-bottom: 1px solid #eee; } } .csl_topMenu ul li ul li a:hover { text-decoration: underline; } @media (max-width: 795px) { .csl_topMenu ul li ul li a:hover { background: rgba(0, 0, 0, 0.025); text-decoration: none; } } @media (max-width: 795px) { .csl_topMenu ul li.csl_topLanguages { float: left; width: auto; padding: 20px; } } .csl_topLanguages a { float: left; padding: 11px 5px 13px 0; opacity: 0.5; } .csl_topLanguages a:hover { opacity: 1; } .csl_topLanguages a:last-child { padding-right: 0; } .csl_topLanguages a img { float: left; } @media (max-width: 795px) { .csl_topMenu ul li.csl_topLogin { padding: 0 20px; } } @media (max-width: 795px) { .csl_topMenu ul li.csl_topLogin { float: right; width: auto; margin: 20px 0; } } .csl_topLogin a { display: block; background: #3296FA; padding: 5px 10px 4px; text-decoration: none; color: #fff; border-radius: 3px; margin: 5px 0; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15); } @media (max-width: 795px) { .csl_topLogin a { float: left; } } .csl_topLogin a:hover { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15), 0 0 5px rgba(255, 255, 255, 0.5) inset; } .csl_topLogin a:active { box-shadow: 0 1px 2px rgba(0, 0, 0, 0.15), 0 0 20px rgba(255, 255, 255, 0.5) inset; } .csl_topMenuIcon { float: right; position: relative; width: 20px; height: 20px; margin-left: 20px; } @media (min-width: 796px) { .csl_topMenuIcon {display: none;} } .csl_topMenuIcon span, .csl_topMenuIcon span:before, .csl_topMenuIcon span:after { transition: all 0.25s; position: absolute; top: 9px; left: 0; width: 100%; height: 2px; background: #3296FA; content: ''; } .csl_topMenu.active .csl_topMenuIcon span { background: rgba(0, 0, 0, 0); } .csl_topMenuIcon span:before { top: -6px; } .csl_topMenu.active .csl_topMenuIcon span:before { top: 0; transform: rotate(45deg); } .csl_topMenuIcon span:after { top: 6px; } .csl_topMenu.active .csl_topMenuIcon span:after { top: 0; transform: rotate(-45deg); } .css_button, .button, .button:hover, .tabs .line,.css_quote .slick-arrow { background: #1d9a3f; } .css_quoteMark { color: #1d9a3f; } .tabs .link:not(.active):not(.disabled):hover { border-color: #1d9a3f; } .css_jobsCell:hover:before { border-color: #1d9a3f; box-shadow: 0 0 0 1px #1d9a3f; } .csl_topLogin a { background: #1d9a3f; } .css_section p a, .csa_jobadText a { color: #1d9a3f; } .csl_topMenuIcon span, .csl_topMenuIcon span:before, .csl_topMenuIcon span:after { background: #1d9a3f; } .css_button { border-radius: 3px; } link-to-page-button:not(:first-child) .css_button { margin-top: 10px; } .css_jobagentNotify a.active { color: #1d9a3f; border-color: #1d9a3f; } .cse_iframe { -webkit-overflow-scrolling: touch; } .csa_jobadInfoMap agm-map { height: 192px; } @media print { body, .cse_iframe { height: 100%; overflow-y: visible; overflow-x: visible; } .css_bannerTable { height: auto !important; } .css_bannerTable * { color: #000 !important; } } .css_perksbenefitsBox { border: 5px solid #fff; box-sizing: border-box; } @media (min-width: 796px) { .csl_topLanguages { display: none; } .csl_topLanguagesDropdown { position: relative; } .csl_topLanguagesDropdown:before { content: ''; position: absolute; top: 0; left: 0; width: 100%; height: 50px; } .csl_topLanguagesDropdownTrigger { position: relative; float: left; width: 33px; height: 33px; background: url('/img/icons/flags/global.svg') 50% 50% no-repeat; margin-top: 5px; cursor: pointer; } .csl_topLanguagesDropdownHolder { transition: all 0.25s; display: none; position: absolute; top: 48px; left: 50%; width: calc(100% + 10px); background: #fff; padding: 10px 10px 0px 10px; border-radius: 3px; box-shadow: 0 1px 2px rgba(0, 0, 0, 0.25); transform: translate(-50%, 0); } .csl_topLanguagesDropdown:hover .csl_topLanguagesDropdownHolder { display: block; } .csl_topLanguagesDropdownHolder a { display: block; line-height: 13px; font-size: 12px; white-space: nowrap; text-decoration: none; color: #000; margin-bottom: 10px; } .csl_topLanguagesDropdownHolder a img { float: left; width: 12px; margin: 0 5px 0 0; } } @media (max-width: 795px) { .csl_topLanguagesDropdown { display: none !important; } } .css_jobagentFilters.ng-star-inserted{ background-color:white; } .css_jobagentInfo.ng-star-inserted{ background-color:white; } </style> <script> </script> <script type="text/javascript"> var isPageIdle = false; $(document).idle({ onIdle: function () { isPageIdle = true; }, onActive: function () { isPageIdle = false; }, idle: 60000 }); function scheduleKeepAlive() { setTimeout('callKeepAlive()', 60000); } function callKeepAlive() { if (isPageIdle) { scheduleKeepAlive(); return; } $.ajax({ type: 'POST', url: '/api/keep-alive', error: function () { scheduleKeepAlive(); }, success: function () { scheduleKeepAlive(); } }); } $(document).ready(function () { scheduleKeepAlive(); }); </script> <script> $(document).ready(function () { const burgerMenu = document.getElementById("topMenuIcon"); const style = window.getComputedStyle(burgerMenu); const isBurgerMenuHidden = style.display === "none"; const topMenu = document.getElementsByClassName("csl_topMenu")[0]; const topMenuList = topMenu.firstElementChild; const firstPageLink = topMenuList.firstElementChild.firstElementChild; if (!isBurgerMenuHidden) { topMenuList.ariaHidden = true; setTabIndexToChildElements(topMenuList); } $('.csl_topMenuIcon').click(function () { if ($('.csl_topMenu').hasClass('active')) { hideBackgroundForElement("body-without-popups"); removeTabIndexForChildElements(topMenu); burgerMenu.ariaExpanded = true; topMenuList.ariaHidden = null; } else { showBackgroundForElement("body-without-popups"); setTabIndexToChildElements(topMenuList); burgerMenu.ariaExpanded = false; topMenuList.ariaHidden = true; } }); $('.csl_topMenuIcon').keydown(function (event) { if ($('.csl_topMenu').hasClass('active')) { if (event.key.toLowerCase() === 'tab') { if (event.shiftKey) { return; } else { event.preventDefault(); firstPageLink.focus(); } } } else { return; } }); }); </script> </head> <body class=""> <div id="body-without-popups"> <div class="csl_body"> <div class="csl_top"> <div class="css_holder"> <div class="csl_topTable"> <a href="/../"> <div class="csl_topLogo" careersite="Egen hjemmeside"><img src="/api/file/get-optimized-image/8ae4c6a6-24c3-4f9f-85e8-5a9516e96a9d"></div> </a> <div class="csl_topMenu"> <ul> <li class="csl_topLinkHolder "> <a role="tab" class="csl_topLink" href="/job-alert">Job Alert</a> </li> <li class="csl_topLinkHolder "> <a role="tab" class="csl_topLink" href="/available-positions">Available positions</a> </li> <li class="csl_topLogin"><a class="ui_login_button_popup ui_popup_open" data-popup-id="popup_login" href="javascript:void(0);" style="display: none;">Login</a><a class="ui_login_button_profile" href="/profile" style="display: none;">My profile</a><a class="ui_login_button_onboarding_profile" href="/onboarding-profile" style="display: none;">My profile</a></li> </ul> <a role="menuitem" id="topMenuIcon" class="csl_topMenuIcon" onClick="if($(this).parent().hasClass('active')){$(this).parent().removeClass('active');}else{$(this).parent().addClass('active');}" href="javascript:void(0);"><span></span></a> </div> </div> <div class="clear"></div> </div> </div> <div role="tabpanel"> <div id="section_ae924485-5a6f-4ad9-a04e-b7989b5be605" class="css_section"> <style> .css_banner h1 { animation: adHeadline 2s; } @keyframes adHeadline { 0% {margin-top: 40px; opacity: 0;} 25% {margin-top: 40px; opacity: 0;} 100% {margin-top: 0; opacity: 1;} } @media print { .csl_top, .css_section.css_banner, .css_button, .csa_jobadShare, .csa_jobadInfoMap, .css_section.bottom {display: none;} .csa_jobadLeft {width: 65%; padding-right: 40px;} .csa_jobadRight {float: none; width: auto; overflow: hidden; margin: 0 !important;} .csa_jobadInfo {width: 100%; -webkit-print-color-adjust: exact; margin: 0 !important;} } </style> <div> <img src="/api/integration/v2/files/53aa39d6-54cb-4f45-828c-224fd1463e2b/content" style="float: left; width: 100%;"> <div class="clear"></div> </div> <div class="css_section csa_area csa_jobad"> <div class="css_holder"> <div class="csa_jobadLeft"> <h1 class="css_headline">Head of Architecture – Implementation and Delivery </h1> <div class="clear"></div> <div class="csa_jobadText"><p><strong>Company Overview:</strong></p><p>DHI is a global leader in delivering innovative solutions for water, environment, and sustainability. With a history of excellence spanning over 50 years, we combine digital technology, advisory services, and cutting-edge research to address complex challenges worldwide. Our mission is to make water environments more accessible and sustainable through innovation and collaboration.</p><p>Joining DHI means becoming part of a global, forward-thinking team dedicated to shaping the future of technology in our field. We seek individuals who are passionate about innovation, leadership, and delivering impactful results.</p><p><strong>About the Role:</strong></p><p>We are seeking a proactive <strong>Head of Architecture</strong> to lead the implementation and coordination of architectural frameworks and technology standards across DHI’s diverse portfolio. This role is pivotal in driving actionable outcomes and collaborating closely with cross-functional teams to ensure the successful rollout of architectural strategies.</p><p>Based in a <strong>European time zone</strong> (specific location dependent on the candidate), this position combines technical expertise, leadership, and collaboration to deliver practical and scalable solutions aligned with DHI’s business goals.</p><p><strong>Key Responsibilities:</strong></p><p><strong>Strategic Implementation:</strong></p><ul><li>Define and coordinate the rollout of <strong>new technology standards</strong>, ensuring adoption across teams and regions.</li><li>Conduct <strong>gap analyses</strong> to identify discrepancies in existing frameworks, followed by the creation and execution of comprehensive rollout plans.</li><li>Translate high-level architecture strategies into actionable steps and deliver tangible solutions that meet business needs.</li></ul><p><strong>Hands-On Collaboration:</strong></p><ul><li>Actively engage with cross-functional teams, working closely with stakeholders to ensure alignment between technical decisions and business objectives.</li><li>Partner with developers, product teams, and business leaders to integrate new standards into day-to-day operations.</li><li>Be directly involved in architectural design processes and the implementation of critical systems and solutions.</li></ul><p><strong>Technical Leadership:</strong></p><ul><li>Drive the adoption of modern architectures, and <strong>composable enterprise</strong> solutions, ensuring scalability and flexibility across platforms.</li><li>Leverage expertise in technologies like<strong> C#/.NET </strong>and<strong> Python</strong> to guide development teams and solve complex technical challenges.</li></ul><p><strong>Governance and Coordination:</strong></p><ul><li>Establish and oversee governance frameworks to ensure adherence to DHI’s technology standards.</li><li>Conduct regular design reviews to provide guidance, resolve technical conflicts, and align projects with organizational goals.</li><li>Act as the main point of contact for architectural decisions, ensuring clear communication and documentation of processes.</li></ul><p><strong>Required Skills and Qualifications:</strong></p><p><strong>Educational Background:</strong></p><ul><li>Bachelor’s or Master’s degree in <strong>Information Technology</strong>, <strong>Computer Science</strong>, <strong>Software Engineering</strong>, or a related field.</li></ul><p><strong>Experience:</strong></p><ul><li><strong>10+ years of professional experience</strong> in software architecture, development, and leadership roles.</li><li>Proven expertise in <strong>hands-on software development delivery</strong>, particularly with desktop and cloud-based solutions.</li><li>Demonstrated success in defining and implementing technology standards across multi-disciplinary teams.</li></ul><p><strong>Technical Skills:</strong></p><ul><li>Strong knowledge of <strong>cloud technologies</strong>, <strong>microservices architectures</strong>, and <strong>modern software frameworks</strong>.</li><li>Proficiency in <strong>C#/.NET </strong>and<strong> Python</strong>.</li><li>Experience implementing code quality measures, such as static analysis tooling.</li><li>Experience with <strong>scientific programming solutions</strong> is a plus.</li></ul><p><strong>Leadership and Collaboration:</strong></p><ul><li>Exceptional ability to lead and collaborate across diverse, multi-national teams.</li><li>Strong communication skills to articulate complex technical concepts and their business implications effectively.</li><li>Proven track record of working closely with stakeholders to drive change and achieve implementation success.</li></ul><p><strong>What We Offer:</strong></p><ul><li>A dynamic role focused on <strong>implementation and action</strong>, providing opportunities to shape DHI’s technology landscape and deliver real-world impact.</li><li>Collaboration with a global network of experts at the forefront of innovation in sustainability and digital solutions.</li><li>Professional growth and development in a supportive, innovation-driven environment.</li></ul><p><strong>Location:</strong></p><p>Flexible within a <strong>European time zone</strong>, dependent on the right candidate.</p><p><strong>How to Apply:</strong></p><p>Submit your application, including your CV and a cover letter, via our website: <a href="http://www.dhigroup.com/careers"><strong>www.dhigroup.com/careers</strong></a>.</p><p><strong>Application Deadline:</strong> December 30, 2024.</p><p><strong>About DHI:</strong></p><p>DHI has been a global leader in water and environment solutions for over half a century, serving clients in more than 140 countries. Through our innovative technologies and expertise, we empower stakeholders to manage water resources effectively and sustainably. To learn more about DHI, visit <a href="http://www.dhigroup.com"><strong>www.dhigroup.com</strong></a>.</p></div> <a class="css_button" href="https://dhi.career.emply.com/apply/head-of-architecture-implementation-and-delivery/n4p1jv" style="margin-top: 40px;"> Apply </a> <div id="share_167ea6be-63f1-4abd-9208-c5fa45f775e5" class="csa_jobadShare"> <span tabindex="0">Share in your network</span> <a class="ui_share_facebook" role="link" href="javascript:void(0);"><img class="titleTooltip" title="Share on Facebook" src="/img/careersite/share/facebook.svg" alt="Share on Facebook"></a> <a class="ui_share_twitter" role="link" href="javascript:void(0);"><img class="titleTooltip" title="Share on X" src="/img/careersite/share/twitter.svg" alt="Share on X"></a> <a class="ui_share_linkedin" role="link" href="javascript:void(0);"><img class="titleTooltip" title="Share on LinkedIn" src="/img/careersite/share/linkedin.svg" alt="Share on LinkedIn"></a> <a class="ui_share_googleplus" role="link" href="javascript:void(0);"><img class="titleTooltip" title="Share on Google Plus" src="/img/careersite/share/googleplus.svg" alt="Share on Google Plus"></a> <a class="ui_share_print" role="link" href="javascript:void(0);"><img class="titleTooltip" title="Print" src="/img/careersite/share/print.svg" alt="Print"></a> <a class="ui_share_mail" role="link" href="javascript:void(0);"><img class="titleTooltip" title="Tip a friend" src="/img/careersite/share/mail.svg" alt="Tip a friend"></a> </div> <script> $(document).ready(function() { var adLink = 'https://dhi.career.emply.com/ad/head-of-architecture-implementation-and-delivery/n4p1jv'; $('#share_167ea6be-63f1-4abd-9208-c5fa45f775e5 .ui_share_facebook').click(function() { window.open('https://www.facebook.com/sharer/sharer.php?u=' + encodeURIComponent(adLink), '_blank'); }); $('#share_167ea6be-63f1-4abd-9208-c5fa45f775e5 .ui_share_twitter').click(function () { window.open('https://twitter.com/intent/tweet?url=' + encodeURIComponent(adLink), '_blank'); }); $('#share_167ea6be-63f1-4abd-9208-c5fa45f775e5 .ui_share_linkedin').click(function () { window.open('https://www.linkedin.com/shareArticle?mini=true&url=' + encodeURIComponent(adLink), '_blank'); }); $('#share_167ea6be-63f1-4abd-9208-c5fa45f775e5 .ui_share_googleplus').click(function () { window.open('https://plus.google.com/share?url=' + encodeURIComponent(adLink), '_blank'); }); $('#share_167ea6be-63f1-4abd-9208-c5fa45f775e5 .ui_share_print').click(function () { const jobAdHeadlineContents = document.querySelector('.css_headline').outerHTML; const jobAdTextContents = document.querySelector('.csa_jobadText').outerHTML; const jobAdInfoContents = document.querySelector('.csa_jobadInfo').outerHTML; const printContents = jobAdHeadlineContents + jobAdTextContents + jobAdInfoContents; const printWindow = window.open('', '_blank'); printWindow.document.title = document.title; printWindow.document.head.outerHTML = document.head.outerHTML; printWindow.document.body.outerHTML = printContents; printWindow.onafterprint = function () { printWindow.close(); }; printWindow.print(); }); $('#share_167ea6be-63f1-4abd-9208-c5fa45f775e5 .ui_share_mail').click(function () { window.location.href = 'mailto:?subject=' + this.mailSubject + '&body=' + encodeURIComponent(adLink); }); }); </script> <div class="clear"></div> </div> <div class="csa_jobadRight"> <div class="csa_jobadRight"> <div class="csa_jobadInfo"> <div class="csa_jobadInfoItem"> <strong>Deadline:</strong> <span data-fact-id="deadline"></span> <script> $(document).ready(function () { var dateMoment = moment('2024-12-30T22:59:00.000Z'); var datePattern = 'DD/MM/YYYY'; var timePattern = 'HH:mm'; var dateFormat = dateMoment.hours() === 23 && dateMoment.minutes() === 59 ? datePattern : datePattern + ', ' + timePattern; var dateString = dateMoment.format(dateFormat); $('span[data-fact-id="deadline"]').html(dateString); }); </script> </div> <div class="csa_jobadInfoItem"> <strong>Expected start date:</strong> <span>01/01/2025</span> </div> <div class="csa_jobadInfoItem"> <strong>Contact person:</strong> <div class="csa_jobadInfoContact"> <div class="csa_jobadInfoContactData"> <span>Na’Tosha Bard</span> <span>naba@dhigroup.com</span> </div> </div> <div class="marginBottom"></div> </div> <div class="csa_jobadInfoItem"> <strong> Position type:</strong> <span>Full time </span> </div> <div class="csa_jobadInfoItem"> <strong>Country:</strong> <span>Czech Republic, Denmark, Germany, Poland, Sweden</span> </div> <div class="csa_jobadInfoItem"> <strong>Job type:</strong> <span>Software development and IT</span> </div> <div class="csa_jobadInfoMap" style="padding-top: 0;"> <a href="https://www.google.com/maps/place/55.871266,12.4932203/" target="_blank"> <img src="data:image/jpeg;base64,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" alt="Agern Alle, 5, 2970, Hørsholm, Denmark"> </a> </div> </div> </div> <div class="clear"></div> </div> <div class="clear"></div> <br><br> DHI are the first people you should call when you have a tough challenge to solve in a water environment – be it a river, a reservoir, an ocean, a coastline, within a city or a factory. <br><br> Our knowledge of water environments is second-to-none. It represents 50 years of dedicated research and real-life experience from more than 140 countries. We strive to make this knowledge globally accessible to clients and partners by channelling it through our local teams and unique software. <br><br> Our world is water. So whether you need to save water, share it fairly, improve its quality, quantify its impact or manage its flow, we can help. Our knowledge, combined with our team's expertise and the power of our technology, holds the key to unlocking the right solution. <br><br> For more information please visit <a href="https://www.dhigroup.com">www.dhigroup.com</a> <div class="clear"></div> </div> </div> <style> #section_ae924485-5a6f-4ad9-a04e-b7989b5be605 .videoIframe , #section_ae924485-5a6f-4ad9-a04e-b7989b5be605.videoIframe { float: right; position: relative; width: 100%; padding-top: 56.25%; overflow: hidden; border-radius: 3px; margin-bottom: 30px; } #section_ae924485-5a6f-4ad9-a04e-b7989b5be605 .videoIframe iframe , #section_ae924485-5a6f-4ad9-a04e-b7989b5be605.videoIframe iframe { position: absolute; top: 0; left: 0; width: 100%; height: 100%; } #section_ae924485-5a6f-4ad9-a04e-b7989b5be605 .csa_jobadInfo , #section_ae924485-5a6f-4ad9-a04e-b7989b5be605.csa_jobadInfo { padding: 30px; border: 1px solid #ddd; border-radius: 3px; } #section_ae924485-5a6f-4ad9-a04e-b7989b5be605 .csa_jobadLeftLang , #section_ae924485-5a6f-4ad9-a04e-b7989b5be605.csa_jobadLeftLang { float: right; height: 50px; padding: 14px; overflow: hidden; border: 1px solid #eee; margin-left: 30px; box-sizing: border-box; } #section_ae924485-5a6f-4ad9-a04e-b7989b5be605 .css_headline , #section_ae924485-5a6f-4ad9-a04e-b7989b5be605.css_headline { font-weight: 400; } </style> <script> $(function() { $(".csa_jobadInfoItem:contains('Logo')").find('strong').remove(); }); </script> </div> </div> <div id="section_26393fb5-a17c-4589-a38b-6169f765d875" class="css_section"> <div class="css_section bottom"> <div class="css_holder"> <div class="bottom_table"> <div class="bottom_cell"> <strong>DHI A/S</strong><br /> Agern Alle 5<br /> 2970 Hørsholm<br /> Denmark<br /> hr-support@dhigroup.com<br /> </div> <div class="bottom_cell"> </div> <div class="bottom_cell bottom_social"> <a class="bottom_facebook" href="https://www.facebook.com/DHIgroup" target="_blank"></a> <a class="bottom_linkedin" href="https://www.linkedin.com/company/dhi" target="_blank"></a> <a class="bottom_youtube" href="https://www.youtube.com/user/DHIGroup" target="_blank"></a> </div> </div> </div> </div> <style> @media (max-width: 700px) { .bottom_table, .bottom_cell {display: block !important;} .bottom_cell:not(:first-child) {margin-top: 30px !important;} } </style> <style> #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom { background: #1d9a3f; color: #fff; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom a , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom a { color: #fff; text-decoration: none; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom a:hover , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom a:hover { text-decoration: underline; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_table , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_table { display: table; width: 100%; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_cell , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_cell { display: table-cell; vertical-align: top; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_phone, #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_phone, #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_mail , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_mail { height: 36px; background: url('/api/file/get/39d12231-06e0-41c5-bae9-f982451207bc') 0 5px no-repeat; padding: 0 0 0 36px; line-height: 37px; overflow: hidden; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_mail , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_mail { background-image: url('/api/file/get/1182e1bb-9042-4ddb-b93e-3b22d39fe9fd'); } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_social , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_social { width: 10px; font-size: 0px; white-space: nowrap; color: 000; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_facebook, #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_facebook, #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_instagram, #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_instagram, #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_linkedin, #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_linkedin, #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_youtube , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_youtube { display: inline-block; width: 40px; height: 40px; background: url('/img/careersite/perksbenefits/social_facebook.svg') 0 0 no-repeat; background-size: cover; margin: 16px 0 0 15px; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_facebook , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_facebook { margin-left: 0; } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_instagram , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_instagram { background-image: url('/img/careersite/perksbenefits/social_instagram.svg'); } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_linkedin , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_linkedin { background-image: url('/img/careersite/perksbenefits/social_linkedin.svg'); } #section_26393fb5-a17c-4589-a38b-6169f765d875 .bottom_youtube , #section_26393fb5-a17c-4589-a38b-6169f765d875.bottom_youtube { background-image: url('/img/careersite/perksbenefits/social_youtube.svg'); } </style> <script> </script> </div> </div> <div class="csl_bottom"> <style> .csl_bottom .css_holder { padding-top: 35px; padding-bottom: 35px; } @media (max-width: 795px) { .csl_bottom .css_holder { padding-top: 15px; padding-bottom: 15px; } } .csl_bottomPowered { transition: all 0.25s; float: left; width: 100%; display: block; height: 20px; line-height: 100px; background: url('/img/careersite/new_logo_poweredby.svg') 50% 50% no-repeat; overflow: hidden; } .csl_bottomPowered:hover { opacity: 1; filter: brightness(0) saturate(100%) invert(13%) sepia(48%) saturate(1860%) hue-rotate(186deg) brightness(95%) contrast(92%); } </style> <div class="css_holder"> <a lang="en-US" class="csl_bottomPowered" href="https://emply.com" target="_blank">Powered by Emply</a> <div class="clear"></div> </div> </div> </div> <div class="popup" role="dialog" id="popup_login" data-open-script="initLoginPopup()" style="display: none;"> <div class="holder"> <div class="content" style="width: 500px;"> <div id="showLoginDiv" class="showLogin"> <div role="dialog" aria-labelledby="login-title" aria-describedby="login-description" aria-modal="true" class="contentPadding"> <div id="login-title" class="headline marginBottom">Login</div> <div id="login-description" class="marginBottom">Have you applied for a job or created a job agent? Login below to show/change your preferences.</div> <div class="ui_login_email input icon marginBottom"> <input placeholder="Email" type="email" aria-required="true"> <div class="icon_holder" style="background-image: url('/img/icons/12/letter_bbbbbb.svg');"></div> </div> <div class="ui_login_names" style="display: none;"> <div class="ui_login_first_name input icon marginBottom"> <input placeholder="First Name" required> <div class="icon_holder" style="background-image: url('/img/icons/12/link_bbbbbb.svg');"></div> </div> <div class="ui_login_last_name input icon marginBottom"> <input placeholder="Last Name"> <div class="icon_holder" style="background-image: url('/img/icons/12/link_bbbbbb.svg');"></div> </div> </div> <div class="ui_login_password input icon marginBottomExtra"> <input type="password" placeholder="Password" aria-required="true"> <div class="icon_holder" style="background-image: url('/img/icons/12/key_bbbbbb.svg');"></div> </div> <div id="error-box" tabindex="0" role="alert" class="infomessage notallowed marginBottomExtra" hidden> Incorrect credentials </div> <a class="ui_login_login button" style="margin-right: 15px;" role="button" href="javascript:void(0);"> <span>Login</span> </a> <a class="button secondary" role="button" onClick="onForgotButtonClick()" href="javascript:void(0);"> <span>Forgot</span> </a> <a class="button cancel ui_popup_close" role="button" onClick="onMainCancelButtonClick()" href="javascript:void(0);"> <span>Cancel</span> </a> <div class="clear"></div> </div> </div> <div role="dialog" class="showForgot" style="display: none;"> <div aria-labelledby="forgot-title" aria-describedby="forgot-description" class="contentPadding"> <div id="forgot-title" class="headline marginBottom">Forgot Password</div> <div id="forgot-description" class="marginBottom"> Please fill in your email address if you have forgotten your password. We will send you an email with a link to create a new password. This link will be valid for 24 hours. </div> <div roll="form" class="showForgotForm"> <div class="ui_forgot_expired infomessage warning marginBottom" style="display: none;"> <span>Link to renewing your password has expired request a new link by entering your email below</span> <div class="clear"></div> </div> <div class="ui_forgot_email input icon"> <input type="email" aria-required="true" placeholder="Email"> <div class="icon_holder" style="background-image: url('/img/icons/12/letter_aaaaaa.svg');"></div> </div> <div class="ui_forgot_names" style="display: none;"> <div class="clear marginBottom"></div> <div class="ui_forgot_first_name input icon marginBottom"> <input placeholder="First Name"> <div class="icon_holder" style="background-image: url('/img/icons/12/link_aaaaaa.svg');"></div> </div> <div class="ui_forgot_last_name input icon"> <input placeholder="Last Name"> <div class="icon_holder" style="background-image: url('/img/icons/12/link_aaaaaa.svg');"></div> </div> </div> <div class="clear marginBottomExtra"></div> <a role="button" class="ui_forgot_renew button" href="javascript:void(0);"> <span>Renew</span> </a> <a role="button" class="button cancel" onClick="onForgotPasswordCancelClick()" href="javascript:void(0);"> <span>Cancel</span> </a> </div> <div class="showForgotSuccess" style="display: none;"> <div class="infomessage marginBottomExtra"> <span>Link to renewing your password is sent to your email.</span> <div class="clear"></div> </div> <div class="clear"></div> <a class="button secondary ui_popup_close" href="javascript:void(0);"> <span>Close</span> </a> </div> <div class="clear"></div> </div> </div> <div class="showSecure" style="display: none;"> <div class="contentPadding"> <div class="headline marginBottom">We have sent a security code to your e-mail.</div> <div class="showSecureForm"> <div class="ui_secure_code input icon"> <input placeholder="Code"> <div class="icon_holder" style="background-image: url('/img/icons/12/letter_aaaaaa.svg');"></div> </div> <div class="clear marginBottomExtra"></div> <a role="button" class="ui_secure_login button style="margin-right: 15px;" href="javascript:void(0);"> <span>Login</span> </a> <a role="button" class="button secondary" onClick="$('.showLogin, .showForgot').slideToggle(250);" href="javascript:void(0);"> <span>Forgot</span> </a> <a role="button" class="button cancel ui_popup_close" href="javascript:void(0);"> <span>Cancel</span> </a> </div> <div class="clear"></div> </div> </div> </div> </div> </div> <script> function initLoginPopup() { show('.showLogin'); hide('.showForgot'); hide('.showSecure'); hideBackgroundForElement("body-without-popups"); show('.showForgotForm') hide('.showForgotSuccess') hide('.ui_forgot_expired'); $('.ui_login_email input').val(''); $('.ui_login_first_name input').val(''); $('.ui_login_last_name input').val(''); $('.ui_login_password input').val(''); hide('.ui_login_names'); $('.ui_forgot_email input').val(''); $('.ui_forgot_first_name input').val(''); $('.ui_forgot_last_name input').val(''); $('.ui_secure_code input').val(''); hide('.ui_forgot_names'); setTimeout(() => { $('#showLoginDiv').attr('tabindex', '0').focus(); }); } function onMainCancelButtonClick() { $('.ui_login_button_popup').attr('tabindex', '0').focus(); showBackgroundForElement("body-without-popups"); hide('#error-box'); } function onForgotButtonClick() { $('.showLogin, .showForgot').slideToggle(250); hide('#error-box'); $('.showForgot').attr('tabindex', '0').focus(); } function onForgotPasswordCancelClick() { $('.showLogin, .showForgot').slideToggle(250); $('.showLogin').attr('tabindex', '0').focus(); } function openForgotPasswordWithExpired() { openPopup('popup_login'); hide('.showLogin'); hide('.showSecure'); show('.showForgot'); show('.ui_forgot_expired'); } function openSecureCodeMode() { hide('.showLogin'); hide('.showForgot'); show('.showSecure'); } function updateLoginButtonState(loggedIn, hasOnboarding) { if (loggedIn) { hide('.ui_login_button_popup'); if (hasOnboarding) { show('.ui_login_button_onboarding_profile'); hide('.ui_login_button_profile'); } else { hide('.ui_login_button_onboarding_profile'); show('.ui_login_button_profile'); } } else { show('.ui_login_button_popup'); hide('.ui_login_button_profile'); hide('.ui_login_button_onboarding_profile'); } } function show(selector) { $(selector).show(); } function hide(selector) { $(selector).hide(); } $(document).ready(function() { var loginInProgress = false; var forgotInProgress = false; var isSecureMode = false; //login status function hasLoginHash() { return window.location.hash && window.location.hash === '#login'; } function checkLoginHash() { if (hasLoginHash()) { openPopup('popup_login'); } } function checkCandidateLoggedIn() { $.ajax({ type: 'GET', contentType: 'application/json', url: '/api/integration/v2/candidate/logged-in', success: function (data) { updateLoginButtonState(data.candidateExists, data.hasOnboarding); if (!data.candidateExists) { checkLoginHash(); } }, error: function () { updateLoginButtonState(false); checkLoginHash(); } }); } checkCandidateLoggedIn(); //login function onLoginClick() { if (loginInProgress) { return; } loginInProgress = true; var loginData = { email: $('.ui_login_email input').val(), firstName: $('.ui_login_first_name input').val(), lastName: $('.ui_login_last_name input').val(), password: $('.ui_login_password input').val(), secureCode: isSecureMode ? $('.ui_secure_code input').val() : '' }; $.ajax({ type: 'POST', contentType: 'application/json', url: '/api/integration/v2/candidate/login', data: JSON.stringify(loginData), success: function (pageType) { if (pageType === 16) { openSecureCodeMode(); isSecureMode = true; loginInProgress = false; return; } if (pageType === 17) { isSecureMode = true; loginInProgress = false; return; } closePopup('popup_login'); const hasOnboarding = pageType === 14; updateLoginButtonState(true, hasOnboarding); window.location.href = hasOnboarding ? '/onboarding-profile' : '/profile'; loginInProgress = false; showBackgroundForElement("body-without-popups"); }, error: function(response) { if (response.status === 403 && response.responseJSON && response.responseJSON.requiresName) { show('.ui_login_names'); showErrorPopup('Enter first and last name to login'); } else { show('#error-box'); document.getElementById("error-box").focus(); } loginInProgress = false; } }); } $('.ui_login_login').click(onLoginClick); $('.ui_login_email input').on('enterKey', onLoginClick); $('.ui_login_password input').on('enterKey', onLoginClick); $('.ui_secure_login').click(onLoginClick); $('.ui_secure_code input').on('enterKey', onLoginClick); //forgot function onForgotClick() { if (forgotInProgress) { return; } forgotInProgress = true; var forgotData = { email: $('.ui_forgot_email input').val(), firstName: $('.ui_forgot_first_name input').val(), lastName: $('.ui_forgot_last_name input').val(), languageKey: 'en-GB' }; $.ajax({ type: 'POST', contentType: 'application/json', url: '/api/integration/v2/candidate/forgot-password', data: JSON.stringify(forgotData), success: function () { hide('.showForgotForm'); show('.showForgotSuccess'); forgotInProgress = false; }, error: function(response) { if (response.status === 403 && response.responseJSON && response.responseJSON.requiresName) { show('.ui_forgot_names'); showErrorPopup('Enter first name and last name'); } else { showErrorPopup('Incorrect e-mail'); } forgotInProgress = false; } }); } $('.ui_forgot_renew').click(onForgotClick); $('.ui_forgot_email input').on('enterKey', onForgotClick); }); </script> <div class="popup" id="popup_password" style="display: none;"> <div class="holder"> <div class="content" style="width: 500px;"> <div class="contentPadding"> <div class="headline marginBottom">Create password</div> <div class="ui_password_new_password input icon marginBottom"> <input type="password" placeholder="Password"> <div class="icon_holder" style="background-image: url('/img/icons/12/key_aaaaaa.svg');"></div> </div> <div class="ui_password_verify_password input icon marginBottomExtra"> <input type="password" placeholder="Verify password"> <div class="icon_holder" style="background-image: url('/img/icons/12/key_aaaaaa.svg');"></div> </div> <a class="ui_password_save button" style="margin-right: 15px;" href="javascript:void(0);"> <span>Save</span> </a> <div class="clear"></div> </div> </div> </div> </div> <script> $(document).ready(function() { var savePasswordInProgress = false; function getForgotCode() { return window.location.hash ? window.location.hash.replace('#newpassword/', '') : null; } function hasForgotCode() { return window.location.hash && window.location.hash.startsWith('#newpassword/') && getForgotCode(); } function setForgotCodeData() { $('#popup_password').attr('data-open-script', "document.getElementById('popup_password').setAttribute('data-code','" + getForgotCode() + "')"); } function getForgotCodeData() { return $('#popup_password').data('code'); } //check forgot code expiration function checkForgotCodeExpiration() { $.ajax({ type: 'GET', contentType: 'application/json', url: '/api/integration/v2/candidate/check-reset-code?code=' + getForgotCode(), success: function (data) { setForgotCodeData(); openPopup('popup_password'); }, error: function () { openForgotPasswordWithExpired(); } }); } if (hasForgotCode()) { checkForgotCodeExpiration(); } //save password function onSavePasswordClick() { if (savePasswordInProgress) { return; } if ($('.ui_password_new_password input').val() !== $('.ui_password_verify_password input').val()) { showErrorPopup('Passwords must match'); return; } savePasswordInProgress = true; var renewData = { code: getForgotCodeData(), password: $('.ui_password_new_password input').val() }; $.ajax({ type: 'POST', contentType: 'application/json', url: '/api/integration/v2/candidate/renew', data: JSON.stringify(renewData), success: function (pageType) { closePopup('popup_password'); const hasOnboarding = pageType === 14; updateLoginButtonState(true, hasOnboarding); window.location.href = hasOnboarding ? '/onboarding-profile' : '/profile'; savePasswordInProgress = false; }, error: function (error) { //todo: correct error message showErrorPopup(error.responseJSON.message); savePasswordInProgress = false; } }); } $('.ui_password_save').click(onSavePasswordClick); $('.ui_password_new_password input').on('enterKey', onSavePasswordClick); $('.ui_password_verify_password input').on('enterKey', onSavePasswordClick); }); </script> <div class="popup" id="popup_delete" data-open-script="initDeletePopup()" style="display: none;"> <div class="holder"> <div id="popup_delete_content" class="content"> <div class="contentPadding"> <div class="headline marginBottom"> Do you want to delete? </div> <div style="margin-bottom: 25px;"> If you delete, all related data will be lost. </div> <a class="button warning ui_popup_delete_confirm" href="javascript:void(0);"> <span>Delete</span> </a> <a class="button cancel ui_popup_delete_cancel" href="javascript:void(0);"> <span>Do not delete</span> </a> <div class="clear"></div> </div> </div> </div> </div> <script> var deleteConfirmCallback = null; function initDeletePopup() { hideBackgroundForElement("body-without-popups"); } function showDeleteConfirm(callback) { deleteConfirmCallback = callback; openPopup('popup_delete'); $('#popup_delete_content').attr('tabindex', '0').focus(); } $(document).ready(function () { $('.ui_popup_delete_confirm').click(function () { deleteConfirmCallback(); deleteConfirmCallback = null; closePopup('popup_delete'); showBackgroundForElement("body-without-popups"); }); $('.ui_popup_delete_cancel').click(function () { deleteConfirmCallback = null; closePopup('popup_delete'); showBackgroundForElement("body-without-popups"); }); }); </script> <div class="popup" id="popup_error" style="display: none;"> <div class="holder"> <div class="content"> <div class="contentPadding"> <div class="headline marginBottom"> Error </div> <div class="infomessage notallowed marginBottomExtra" style="margin-bottom: 25px;"> <span class="ui_error_message">Unknown error</span> <div class="clear"></div> </div> <a class="button secondary ui_popup_close" href="javascript:void(0);"> <span>Close</span> </a> <div class="clear"></div> </div> </div> </div> </div> <script> function showErrorPopup(message) { $('.ui_error_message').text(message); openPopup('popup_error'); } </script> </body> </html>