Come join SparkMeter’s Systems Engineering team and help increase electricity access in developing countries. As a Wireless Network Research Engineer, you will research, design, build, and maintain our cutting edge communications network, protocols, and applications that utility customers around the world depend, 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 Systems 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:
Protocol Research and Design. Communications play a key role in the SparkMeter system. At the heart of this system is a reliable, high throughput, and efficient wireless network. You will help research, design, and build the next generation of the system, evaluating the cutting edge and adapting the network design to meet new market opportunities. You will propose new and contribute to existing R&D efforts, evaluate network performance through simulation, and stay well informed of the latest developments in wireless communications. Furthermore, you will work with the rest of the team to develop intuition around the product and support real world deployments.
Software Engineering. R&D is key to continued excellence of our wireless communications systems and ensuring that we are deploying these developments to real world systems is key to improving the product. You will work to implement your research in production environments by designing and building production quality software. You will work closely with the other members of the Systems Engineering team to improve the functionality and robustness of our product. In addition to developing protocols, you will build applications that automatically assess network quality, find weaknesses, and suggest improvements to operators on what changes need to be made to improve operation.
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
- 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 around the world
You will be a good fit for the role if you meet the following requirements of the role:
- Core Concepts of Computer Science: You have a Master's or Doctoral degree in CS, or other quantitative engineering / science degree. You have spent time learning and thinking about programming languages, logic, algorithms, data structures, binary, 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.
- Skilled and Efficient Programmer: You are very skilled in C / C++ / Go / Rust / Elixir or other systems / application programming language. You have completed several major production projects in one or more of these languages. You understand one or more of these languages at a core level and are very familiar with their standard library (if applicable). Given a problem, you are very comfortable implementing your solution in one or more of these languages.
- Networking: Network failure is ever present on remote wireless links, you should have demonstrated experience in how to deal with network failures and designing applications to perform reliably in the face of them. 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 and how they might manifest in POSIX APIs. Ideally you should have experience with these protocols under poorly functioning links. Experience working with wireless communication protocols (WiFi, Bluetooth, IEEE 802.15.4, LoRa, etc.). Experience with network simulation software such as OMNet.
- Delivered Products: In the Systems 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 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.
- 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.
While these skills aren't a prerequisite for this role, they will help you flourish in this position:
- Experience working with real time operating systems
- Experience with hardware and basic electrical engineering (schematic design, pcb layout, test equipment, etc.)