About the role
WeaveGrid’s Core engineering team is responsible for our internal data services and products, which process, store, and combine data from many different sources including electric utilities and EVs. These systems underpin all of our products, and their quality and performance are central to our business.
We are searching for a backend engineer passionate about designing and running distributed data processing systems, which transform information from many different sources into powerful insights and real-time optimization decisions and lie at the heart of all WeaveGrid products . This individual will work closely with other infrastructure engineers, as well as data scientists and data engineers.
Our current system is built entirely on AWS, with much of our processing taking place in containerized services managed by Kubernetes. We use AWS's native queueing and messaging services, as well as tools such as Redis. We are currently largely a Python shop, and a solid grounding in that language and its ecosystem is preferred, but more important is that you bring practical experience building and running data processing systems in demanding settings.
We are a small team, though growing fast. You appreciate that the specific responsibilities described here may evolve as the company expands.
- Maintain and improve the performance, robustness, and feature velocity of our existing data processing systems
- Design/deploy new data processing pipelines as our requirements evolve through further product development
- Adjust our overall architecture and technology choices as demands on our systems evolve
- Collaborate closely with data engineers and data scientists to support and “host” the algorithms and application-level capabilities that they develop
You are passionate about building and running distributed, cloud-native applications; you naturally break systems into components such as processing workers, job queues, and storage units. You enjoy balancing tradeoffs between system aspects such as scalability, reliability, simplicity, understandability, feature velocity, isolation/multi-tenancy, and more.
You have experience building, maintaining, or evolving distributed applications in practical contexts; ideally, you have seen at least one such system through its entire life cycle, from design to maturity.
You understand that building and running reliable distributed systems is a team sport, and you enjoy collaborating with other smart, creative, and down-to-earth engineers. You are comfortable with agile software engineering practices, and you are focused on results and shared success.
- Experience with a range of distributed services and architectures, including at least one system across the entire lifecycle
- Familiarity with the fundamental pieces of data processing systems sufficient to play a major role in their design and refinement
- Working familiarity with some of the primary messaging, queueing, or processing frameworks