Internship: Software Engineering

Richmond, California, United States Full-time

What You’ll Do

Would you like to see your work have physical impact on our planet?  Do you want to build cloud software that controls a fleet of hundreds, potentially thousands, of industrial-scale clean energy devices in the field?

We're looking for intern candidates who are ready to get their hands dirty, are as passionate about energy storage as we are, and will do whatever it takes to bring a new energy storage system to market!

As our Software Engineering Intern, you’ll be developing the software that turns our Refrigeration Battery hardware into smart storage devices.  You’ll write applications that will bring our cutting-edge energy efficiency algorithms to life, thereby having a real world effect on our customers’ energy savings.

Your Responsibilities

You will work directly with the Lead IoT Cloud Engineer and the Director of Controls Development on the following strategic initiatives:

  • Apply optimization and machine learning concepts to build software services, from the IoT edge to the cloud, that improve energy savings.
  • Turn algorithm concepts from our Data Scientist into production software that operates industrial IoT systems in the field.Design a cloud service & APIs to connect energy management appliances to clients.
  • Enhance our embedded IoT software to leverage your new cloud functionality.
  • Build a web-based analysis platform for generating actionable reports on our system’s performance.
  • Generate metrics to drive beautiful & intuitive displays of energy savings data in our web apps.
  • Many other engineering / software projects not specifically outlined here.

Who You Are

(a general guide - we can bend these rules for an incredible candidate!) 

  • At least junior standing pursuing a B.S. in computer science, computer engineering, or similar.
  • Excellent software design instinct; object orientation should be core to your thinking.  Skilled at algorithm design.
  • Solid programming experience:
    • Python or Java required; experience with both a plus
    • Interest in learning other domain-specific languages
    • Experienced with common web backend frameworks (Python Flask, Java Spring, Node.js / MEAN stack)
    • Linux servers, AWS & EC2 instances, Heroku and other Paas platforms
    • Ability to develop rapidly prototype web applications (Node.js, HTML5 / CSS3, JQuery) a plus
    • Experience with serverless cloud infrastructure a plus 
  • Interested in learning and contributing to a wide variety of software projects, including web backend, IoT Edge, creative data analysis, and control using machine learning algorithms
  • An enthusiastic self-starter who can work with minimal supervision, generates novel and creative solutions to tough problems, and is willing to put in the effort it takes to get this energy storage startup off the ground.
  • Passionate about technology innovation, product development, energy engineering, and energy storage.

Our Preferred Stack:

  • Data processing, modelling: Python
  • APIs, data pipeline: Python, Node.js, Java / JAX-RS
  • General purpose web apps: Python Flask, MEAN stack
  • Embedded software: Java

The Fine Print

  • Start May-June 2019 and work with us for ~3 months; both negotiable.
  • Compensation in cash.
  • As startups go, the work is demanding and the hours are long, but we’ll make every effort to find an arrangement that works.
  • Some travel, mostly local.
  • This position is an internship with the opportunity to transition into full-time employment. 

Bonus Question

Please answer any or all of the following questions. You can keep your answers brief - no more than 10 lines each. Use pseudocode, Python, or Java. Thanks!

1) Write three functions that compute the sum of the numbers in a given list using a for-loop, a while-loop, and recursion.

2) Write a function that combines two lists by alternatingly taking elements. For example: given the two lists [a, b, c] and [1, 2, 3], the function should return [a, 1, b, 2, c, 3].

3) Write a function that computes the list of the first 100 Fibonacci numbers. By definition, the first two numbers in the Fibonacci sequence are 0 and 1, and each subsequent number is the sum of the previous two. As an example, here are the first 10 Fibonnaci numbers: 0, 1, 1, 2, 3, 5, 8, 13, 21, and 34.

Apply for this opening at