Firmware Engineer

  • SparkMeter
  • Washington, DC, USA
  • Jul 16, 2020

Job Description

Come join SparkMeter’s Engineering team and help increase electricity access in developing countries. As a Firmware, you will design, build, and maintain our base station 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. 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:

  • Firmware Development. Your work will focus on our metering platform, from the base-station interface services and gateway, to the metering firmware and the communication protocols that connect the two. Reliable and resilient design principles are key requirements of our systems to meet the demands of these remote autonomous systems.
  • Systems Engineering. Engineering supports all aspects of the product - not just writing code. 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 the product is designed and implemented properly.


You will be a good fit for the role if you have experience in the following areas:

  • Core Concepts of Computer Science: You might have 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 are key to finding the best and most reliably designed solutions for our customers.
  • Skilled and Efficient Programmer: You are very skilled in embedded C and have a working knowledge of assembly. Ideally you have experience in low level drivers for things like SPI, ADC, I2C, GPIO, timers, etc. You have worked in one or more embedded RTOS such as FreeRTOS, Contiki, or RIOT.
  • Constrained Hardware: Developing on embedded devices comes with a whole slue of constraints. Some of the key ones are embedded hardware constraints. If your application needs more memory you simply do not have the option of spinning up more instances. You should have demonstrated experience in optimizing solutions for resource constrained environments and ensuring that this is core part of the design process.
  • 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 have applied aspected of distributed systems design in your past projects.
  • 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 important 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:

  • Experience working with wireless communication protocols (WiFi, Bluetooth, IEEE 802.15.4, LoRa, etc.)
  • Experience with hardware and basic electrical engineering (schematic design, PCB layout, test equipment, etc.)
  • Python: Python is a core component of a lot of our existing systems and used in our automated test bed. 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.

Organization Type


Organization Size