Come join SparkMeter’s Systems Engineering team and help increase electricity access in developing countries. As an Embedded Systems Engineer, you will design, build, and maintain our base station firmware / software 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 an Embedded Systems 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 whole product and working in concert with the rest of the company.
You’ll focus on:
- Embedded Software Engineering. Your work will focus on the embedded systems that make up our unique metering platform. You will work closely with the other members of the Systems Engineering team to improve the functionality and robustness of our product. Your knowledge of embedded Linux and application development will be crucial to creating well designed and reliable systems.
- Application Development. You will design, implement, and maintain applications running on the embedded system foundation that you create. These applications must communicate locally and over the internet to synchronize data from the cloud to the meters and back.
- 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.