SparkMeter is a venture-backed company that was founded in late 2013, a spin-off of the non-profit EarthSpark International. We developed our low-cost, pre-pay enabled, smart metering system as a solution for electric utilities in developing countries to serve low-income customers. Our metering system is being widely adopted by utilities serving customers in rural parts of Asia, Sub-Saharan Africa, and Latin America and the Caribbean.
Come join SparkMeter’s Systems Engineering team and help increase electricity access in developing countries. As a Software Engineer, you will design, build, and maintain our application 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. As a Software Engineer 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 product as a whole, and working in concert with the rest of the company.
You’ll focus on:
- Software Engineering. Your work will focus on our cloud application, from the core customer interface to the critical backend synchronizing layer and reporting system. Fast execution of ideas with well-tested component design is vital to rapidly shipping reliable features to our customers.
- Systems Engineering. Systems 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 and 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
- Resilience and efficiency of the link between the two 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 meet the following requirements of the role:
- Core Concepts of Computer Science: You might have 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, base 2 numbering, complexity analysis, etc. Experience with distributed systems: the tradeoffs, fallacies, and CAP theorem. We believe a solid foundation in these concepts is key to finding the best and most reliably designed solutions for our customers.
- Skilled and Efficient Full-Stack Developer: You have completed several major production projects. You have worked on all levels of the application stack including the backend, frontend, database, etc. Your development environment is setup for productivity and you use the best tools for the job. You follow the industry standard development practices: version control, unit testing, code coverage, code quality, continuous integration, etc.
- Python: You have a solid understanding of Python. When it is the right tool for the job, it is likely your first choice. You have extensive knowledge of modern Python and the standard library. You also have experience with one or more web frameworks / libraries such as Flask or Django. Familiarity with Python 3 conventions, including asyncio and type-hinting, is a plus.
- 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. You keep your eye on that final target and ensure that the solutions you come up with are always pushing for it.
- 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 the system is performing.
- Communication Skills: You can succinctly express technical concepts to both technical and non-technical individuals alike. Systems Engineering provides documentation to empower the customer support team, and also collaborates with remote colleagues, necessitating the ability to convey ideas in writing, diagrams, and mockups.
As soon as possible