About this role
The Origin Model sits at the centre of Aurora's forecasting capability, allowing Aurora to help governments, investors, and utilities make billion-dollar decisions on the journey to net zero. It forecasts power prices, generation, capacity expansion, and investment across more than 20 electricity markets worldwide, translating complex energy system dynamics into robust, scalable software that underpins our market outlooks, client insights, and software platforms. The Origin model is a substantial Python codebase, with optimisation components written in GAMS and solved using MOSEK. Prior experience with mathematical optimisation is not required. Models are executed on Docker containers supported by an AWS-based infrastructure. You'll join one of the squads in the Origin Model Development team , a squad of 4–7 engineers working alongside a product representative. You'll own features from requirements through adoption to production. Much of the work is about making complex model concepts easier to understand and finding the core set of functionality that meets the needs of diverse power markets in a scalable way. We use AI tooling across the development process not just for writing code, and you'll help us find where it genuinely adds value. Aurora takes the work seriously. We do not take ourselves too seriously. The team that operates well is one where people are direct, admit mistakes, and enjoy the work. The person in this role will help maintain this culture. Own features and components end-to-end: requirements, design, implementation, testing, deployment, and live operation. You operate what you build, not just ship it. Break down and estimate your own work accurately, and deliver to those estimates reliably. Deliver in increments so value is visible early and feedback arrives continuously. Review others' code regularly, giving substantive, constructive feedback that helps the author improve, not just catching bugs. Identifying and championing best practices and processes for software development. Write maintainable, robust code. Favour simple solutions over complex ones, and treat operational requirements (logging, scalability, security) as part of the design, not an afterthought. Use AI tooling to write, review, test, and analyse code, and help shape how the team applies it. Actively support others in the squad, both junior engineers and those with varied backgrounds. You don't need to be their line manager to make a difference to their development.