OPOWER has a set of company values, the first of which is “We are double bottom line.” Our two bottom lines are the environment (we want to improve that) and money (we want to make that). Everyone in the company is fully bought in to the first bottom line. Given our enterprisey business model, the engineering team cannot contribute directly to the company making money (accounting lingo deems us a liability, as does HR sometimes), so we have a slightly different second bottom line.
We focus on how we build the product to ensure it supports the business for the long haul. We take this part of our job very seriously and are constantly working to improve how we work. We use some of the obvious practices from agile like scrum teams, story pointing, and short-term iteration planning to keep ourselves on track with the functionality we need to build over a three iteration horizon. A more out-of-the-ordinary practice is having test team members fully embedded on our scrum teams. The software engineers in test work alongside software engineers building functionality, and a task is not considered finished until it is tested through our automated regression suite.
We do team retrospectives almost every iteration and keep a backlog of tasks to work on during regression weeks to keep improving our tools and process. When it comes to coding, we have formal code reviews every three weeks as part of the iteration cycle, and ad hoc code reviews happen during the build. Some of our reviews can get heated (though not personal), and everyone knows that the intent is to build the best product we can. The reviews are also a lot of fun.
The point of all of this work is to get everyone in line with building a product for the future. OPOWER is only four years old, and our product has been live and generating energy efficiency gains for over three years. We are pushing ourselves to build new products to improve those efficiency gains and to positively impact the environment in other ways. Our clients are pushing us to deliver more functionality to them faster and faster, and in the meantime, they keep giving us more and more data to learn from and use. If we took a short-term approach to our jobs as engineers, the platform we are building would collapse in on itself, and that would do no one any good.
Wil Shipley, of Delicious Monster fame, wrote an interesting article recently, drawing an analogy comparing building software companies to either farming or mining. When you mine, you take out a loan, purchase a ton of equipment, hire people to dig, strike gold, and profit. When the gold runs out, you retire. On the other hand, when you farm, you take out a loan, purchase some equipment and seed, and then you plant and tend. If things go well, you reap some reward during the harvest season, after which you repeat the cycle, reinvesting your money back into your land. If you are an adept farmer, you may figure out how to rotate crops and make the most of your land all year long, thus increasing profits. In his analogy, farming is a long-term approach to building a company, and mining is what you do with a social network for dogs — build it to flip it.
At OPOWER, this analogy is particularly apropos, because of our first bottom line. What is more sustainable — farming or mining? Clearly, OPOWER is a farming company, and the engineering team is working to ensure the harvest comes in season after season.