Posted 16 days ago
Come join SparkMeter’s Engineering team and help increase access to electricity worldwide. As an Infrastructure Engineer, you will design, build, and maintain our infrastructure and software platform that utility customers around the world depend on to provide reliable power, and the tools that our colleagues need to sell, provision, and support installations of our smart metering systems.
SparkMeter provides a highly integrated solution. You will play a key role in component design and integration. While the Engineering team has a strong background in software engineering, we are at our best when we are applying these same analytic and design principles to the whole product and working in concert with the rest of the company.
You’ll focus on:
Infrastructure Engineering. You will design, implement, deploy, and maintain the infrastructure that our customers and team rely on to host our cloud platform. You will help grow the infrastructure as we scale and adapt it to new use cases as the needs of the system change. Always being mindful of stability of the platform with a keen focus on uptime of our systems.
Engineering. Engineering supports all aspects of the company - not just our product. You’ll take a holistic approach to our systems by working closely with our colleagues in other teams like hardware, customer support, and sales. Your role will be as a technical lead to ensure that systems are designed and implemented to fulfill their part of the product.
What makes our product unique:
- At its core, our product revolves around synchronizing data between Cloud servers and embedded equipment over unreliable, low-bandwidth connections
- On embedded equipment (aka base stations), ease of configuration, reliability of service, deployability of fixes and updates, low/controlled bandwidth are key
- On Cloud servers, scalability, maintainability, ease of deploying new applications, are critical
- Resiliency and efficiency of these communication links is critical to the success of our customers
- We have hundreds of systems deployed in rural/difficult to reach areas in more than 20 countries
You will be a good fit for the role if you have experience in the following areas:
Resilient, dependable infrastructure: You have deployed systems using some key technologies such as AWS, Terraform, container orchestration (e.g. Kubernetes), Ansible, Docker, etc. You value measuring and maintaining uptime targets. You follow a rigorous, scheduled, proactive maintenance plan with the goal of preventing unplanned outages and hitting those uptime targets.
Programming: You are familiar with one or more languages (ideally Python and bash). You have used programming to automate or improve workflows in the past. You have no problem reading through others' code, extracting the logic, and finding bugs.
Linux: You should be quite familiar with Linux and POSIX standard utilities and navigating the system. You feel very comfortable working on the terminal and with shell scripts.
Networking: Network failure is ever present on remote wireless links, you should have demonstrated experience in how to deal with network failures. You understand the core protocols of networking and when they are applicable: IP, TCP, UDP, DHCP, ARP, ICMP, and DNS. You have a working knowledge of the various modes of failure of the network.
Core Concepts of Computer Science: You might hold a Bachelor's degree in CS, or other quantitative engineering / science degree or learned them on the job. Either way, you have spent time learning and thinking about programming languages, logic, algorithms, data structures, complexity analysis, etc. Experience with distributed systems: the tradeoffs, fallacies, and CAP theorem. We believe a solid foundation in these concepts are key to finding the best and most reliably designed solutions for our customers.
Delivered Products: In the Engineering team, we are focused on the overall system. We know that a solution goes beyond implementation and extends into deployment, and support phases. It is thus important to demonstrate that this is of key importance to you as well.
Quantitative and Analytical Reasoning: Many questions that we face do not have a clear answer. Bugs come up that are not readily resolved by searching StackOverflow. You must be able to approach difficult problems with an analytical mind and remove possibilities while refining your hypothesis. It is critical to have the necessary quantitative skills to answer tough questions about how the system is performing.
While these skills aren't a prerequisite for this role, they will help you flourish in this position:
- Security: You are familiar with the key security threats to software systems and network security. Locking down the network, minimizing services, testing for vulnerabilities, etc.
- Python: While the core focus of this role will utilize a systems language, Python is a core component of a lot of our existing systems. Having at least a working knowledge will really help accelerate your on-boarding. Ideally you would have written several small to medium scripts in Python, are confident that you can implement new tools in Python through the help of the Python docs and you understand the tradeoff between using Python and a systems language.
Additionally, we recognize that the best candidates may not have fully developed all of the above skills. We strongly believe that those areas that may be lacking can be further developed after starting the position.
Please apply through our website: http://www.sparkmeter.io/en/jobs/