bout the Role
The Algorithm Developer is responsible for developing and maintaining the optimization engines and ancillary calculations in our products. These form a core part of the overall company’s platform offering and require in-depth domain knowledge and mathematical programming experience. Not only does this role address the platforms content software development needs, but it also covers the technical support element to the business. This includes interaction with clients to understand the domain issues they are trying to solve, as well as the implementation of these solutions.
Key Accountabilities and Duties
Algorithm Design and Development
- Research new and emerging technologies in the energy domain (concentrating on specific areas, e.g. transmission developments, market rules, etc.)
- Propose concise and performant formulation specifications for new features required
- Develop the proposed feature / s while maintaining high quality coding standards (see “High Code Quality Contribution” accountability)
- Design, develop, review, re-factor, and maintain software with quality and performance in mind
- Collect feedback from design and technical staff on development needs
- Conduct technical testing to resolve existing or introduced problems
- Engage in requirement specification process for new software functionality
- Produce technical documentation such as incremental design specifications and user manuals.
Technical Support
Liaise with colleagues and clients to reproduce and correct any defective softwareProvide technical advice and suggestions to customersEnsure high priority items are addressed urgently, providing timely responsesUnderstand the clients query, answering technical queries concisely in language they understand (i.e. understand the domain).High Code Quality Contribution
Produce concise high-quality code, with performance and memory considerations at the forefront of any designDevelop and demonstrate functionality through PoC (proof of concept) buildsUnderstand core programming paradigmsExperience with core development fundamentals, e.g. system architecture, memory management, parallel processing, base classing, etc.Add to engineering team’s culture of high code quality.Global Team Interaction and Collaboration
Seek support from local and global developer teams when requiredRecommend solutions and options to global team when requiredParticipate in global projects and attend stakeholder meetings, as and when required (often outside of “normal” work hours, due to the global nature of the meetings).Required Knowledge, Skills and Experience
Breadth of experience with .NET (including VB.NET and C#), and other development languages (e.g. C++, Python, etc.)Strong mathematical skills, with solid theoretical background in numerical analysis and optimization techniquesA deep understanding of Operations ResearchStrong knowledge and experience working with complex modelsStrong knowledge and experience working with energy system modelling and simulation, analysis and operation, optimization and numerical analysis methodologyAbility and willingness to work independently and collaborativelyAbility to interact effectively with team membersAbility and desire to effectively present to othersDriven and passionate about the code and products being producedEDUCATION AND EXPERIENCE
Bachelor's Degree in Computer Science or a related fieldPost graduate degree (MSc, PhD, etc.), comp science , Maths, in relevant fieldexperience in a .NET development environmentExperience working in an Agile development environmentExperience with linear and mixed integer programming toolsFamiliarity with analytical tools, such as Unit Commitment, Economic Dispatch, Load Flow, Contingency Analysis, etc.