Software Engineer

Job description

Our company

Evergreen Smart Power are solving real problems facing the energy industry as we move into the decarbonised future of electric vehicles and electric heating.

We're building sustainable solutions to help the energy infrastructure of today handle the demands of tomorrow. Our platform links people with energy suppliers, grid operators, and generators to make smart use of domestic loads to balance the grid and make the best use of renewable and green energy.

We strongly believe in giving people the trust and flexibility to work the way they find most effective, empowering them to make decisions which shape both the products we deliver as well as the organisation itself.

Your role

We're looking for an imaginative Software Engineer to join our team building our Virtual Power Plant platform. Your efforts will help society tackle the climate emergency through its transition to a zero-carbon future.

You'll become an integral member of a close-knit team focused on the development of a software platform responsible for management and optimisation of flexible electrical loads in domestic installations. This means large-scale, real-time communications with Internet of Things devices; insightful data analysis using cutting-edge processing techniques and learning; an emphasis on data and operational security; while upholding our engineering principles of quality and resilience.

Our work frequently takes us in exciting new directions, whether using new technologies or finding new applications for existing technologies. You'll get the opportunity to work with the latest energy devices including battery storage, electric vehicle chargers, and next-generation heat pump systems. You'll be finding ways to optimise for lower carbon and energy costs, while empowering owners to benefit from their own flexibility.

Your job will be developing brand new features on top of a modern Software-as-a-Service platform. You'll work on reactive data pipelines, APIs, and optimisation algorithms. The functionality you deliver will run in a cloud environment, utilising containerised and serverless technologies to deliver a highly available and resilient solution to our customers. You will be a part of every stage of the development lifecycle, from work specification through to final delivery.

Your day-to-day responsibilities

Here's a flavour of what you'll be doing each day:

  • Delivering features on a modern, cloud-based software platform.
  • Supporting quality and maintainability through test-driven development (TDD) and pair programming.
  • Contributing to the design of technical solutions within a collaborative environment of a cross-functional team.
  • Bringing fresh ideas into the team, along with taking on the ideas of others, developing them into workable solutions we can make a reality.
  • Participating in problem exploration sessions through whiteboarding and investigatory work.
  • Carrying out operational and maintenance work on our production platform.
  • Picking up a wide range of work across a number of domains, from coding to architecture and operations to security.

Job requirements

Your skills

These are the skills we think you will make use of most in your day-to-day work, but we don't treat it as a box-ticking exercise. We're looking for people who have proven experience in a number of the areas below, but believe strongly in the ability for good people to learn any skills they need to on-the-job, and are more than happy to do our part to help you learn.

The most important thing is that you work in a way which will complement and grow our team as a whole!

  • TypeScript, as the language we use for the vast majority of our platform. We have a strong preference towards functional programming.
  • Amazon Web Services, as the foundation of everything we build.
  • Containerised services make up a good number of our components, running on top of Docker and Amazon ECS.
  • Serverless components form another significant portion of our platform, via Amazon Lambda.
  • Relational data stores, including PostgreSQL and MySQL on top of AWS RDS.
  • Document data stores, including AWS DynamoDB.
  • Test-driven development.
  • Pair programming.

We're also very interested in the knowledge and skills you can bring to the team that aren't something we have already. Whether it's a skill in something we might have plans to do in the future, or experience with technologies we may want to adopt, we want to hear about everything you can do!

How our team builds software

Every team builds software differently, so we think it's important to say how we like to go about our work. Our process is defined by the team, for the team, so you can expect to have a say on how we work.

  • We use a simple agile process based around Kanban principles. It's light-weight, and keeps us moving forward.
  • Test-driven development (TDD) and pair programming are things we believe are super important to delivering quality and communication. We test-drive all our code, and pair the majority of the time.
  • We like functional programming and strongly typed languages as we think they're effective tools for delivering quality software.
  • Security is part of each feature we build, not something we bolt on every so often. We strive to do the right thing rather than the quick thing.
  • The team owns operations of the platform we work on. It gives us a better understanding of what we're building and helps us deliver stronger solutions.
  • Infrastructure as code is something we do everywhere. No hand-crafted servers here!
  • Automation helps deliver quality, security, and predictability. We judiciously automate whatever we can.


  • A minimum of 25 days holiday, plus public holidays.
  • Health care expenses scheme.
  • Remote working from anywhere in the UK.
  • Flexible working hours, so long as we can maintain an ability to work and communicate effectively as a team.
  • Pension contributions matched by the company, up to 4%.
  • Discretionary paid sick leave.