Opower

I spent 7 years, 7 months, and 27 days at Opower, saving 22+ terawatt hours for the planet and $1,500,000,000+ for the people. I was lucky enough to work on some impactful projects along the way. Here is a breakdown of those efforts. Some of this information can be found in a more condensed form in my resume.

Numbers

Opower // Outbound

What I helped accomplish, broken down. We saved over 22 trillion watt hours, more than the annual energy production of at least 135 countries.

24+ unique products built to make an impact on our outbound communication platform
1000's of possible experiences available to people around the globe
10,000,000's of homes receiving personalized content to help them save energy
100,000,000's of communications sent to inboxes, mail boxes, and phones worldwide
10,000,000,000's of records captured, processed, and analyzed by the platform
22+ terawatt hours saved for the planet
$1,500,000,000+ kept in people's wallets

Language Contributions

The programming languages I worked in, over time.

Code Reviews

The share of new code I issued versus new code I reviewed, over time.

Tech Contributions

The types of technical contributions I made. The outer ring compares the type of artifact, e.g. micro services versus web apps, while the inner ring compares the level of contribution, e.g. creator of the artifact versus contributor.

Work Varieties

The kinds of tracked work I completed, measured in percentage.

Projects

Outbound Platform

Stack: Java, Dropwizard, Spring Batch, MySQL, RabbitMQ, S3, Cloudfront

Opower effects positive change by sending informative, empowering content to people to increase their energy efficiency. The Outbound Platform is a set of inter-related systems that integrate to generate, deliver, and track all of Opower's outbound communications. This is composed of a series of services and libraries for data retrieval and content generation, a set of batch-oriented jobs for primary operations, integration with delivery vendors, communication history, state management, operational tools, a framework for functional, scale, integration, and content testing, and a framework for new product creation. It has been used for the migration or creation of two dozen products and rising, driving almost all of Opower's energy and utility bill savings.

Peak Time Rebates

Stack: Java, Spring Batch, MySQL, HTML5, CSS3

In the Summers of hot regions in the United States, everyone comes home from work around the same time, turns on the AC, and puts enormous strain on the power grid, putting the entire area at risk of blackouts. This strain is only increasing with time. To combat this, we designed and launched a product designed to convince people to use less energy during times of peak demand, with behavioral psychology, financial incentive, and mass communication. It worked wonders in its pilot phase and has since been launched for a variety of utilities across the world. It has spawned related demand response products, including a version that accomplishes the same goal without financial incentive.

Communication History

Stack: Java, Ruby, RabbitMQ, Kafka, Hadoop

In the early days of the Outbound Platform, we only had coarse-grained introspection into the actual progress of products being executed on the platform. We did not know what was happening at the level of individual communications (e.g. emails, text messages), although we knew of an increasing variety of use cases for that information. We designed a dataset and suite of APIs for working with communication history, built a distributed logging system for capturing data at runtime, developed a fleet of services for composing useful projections of the dataset, and provided libraries to allow other teams to build their own projections.

Outbound Operations

Stack: Java, Dropwizard, Rails, Angular, MySQL, Redis, OpenTSDB, Sensu

Related to our need for more granular communication history, the young Outbound Platform needed improved operational tooling to help ramp up a half dozen teams and a couple of dozen products onto the platform at a rapid pace. Using communication history as our chief dataset, we built a few services to project that data in ways useful for monitoring and troubleshooting. Layered on top of that, we built a service for anomaly detection and business-rule alerting, a web app for real-time monitoring and administration, and a system for fine-grained operation, including execution control, blocking, and scheduling. Adjacent to this we built a system for operational//infrastructural alerting.

Tips 2

Stack: Java, Dropwizard, Rails, Angular, MySQL, S3, Cloudfront

Targeted tips are one of the primary ways that we drive energy efficiency. The previous system for storing, exposing, and updating tip content had become a significant maintenance burden, impacted product performance, and reduced program flexibility for our clients. We decided to perform an overhaul of the entire system, piece by piece. We built a new service with a backwards-compatible API for accessing tip content and metadata, developed a migration strategy to easily cut over all products across the company, overhauled the tip administration web app to take advantage of new functionality, and migrated static assets into S3 and Cloudfront.

Development Guidelines

Stack: Markdown, Gitbook, the written word

After some organizational change brought together both the Outbound Platform team and a variety of teams building atop the platform, a new organization arose with 40 engineers across 6 teams, little working familiarity, a new charter and goals, and a new stack for many. To help bootstrap our organization with a shared vision and reduced developer friction, I drafted, published, evangelized, and socialized a new set of development guidelines. This covered API standards, code guidelines and style, code reviews, continuous integration and delivery, documentation, new tech adoption, operations, security, testing, and version control.

Home Energy Audit

Stack: Java, Spring, MySQL

One of the most compelling visualizations that we give to people is a disaggregation of their energy usage: how much is used on cooling, lighting, appliances, and so forth. To tailor our disaggregation process when it was still fresh and improve accuracy, we developed a questionnaire that people could take through their utility's Opower web portal to provide another relevant set of inputs to the algorithm. We integrated this with other inputs, including signals from actual usage data, to display an immediate disaggregation breakdown. We then used this to target more relevant tips, empowering steps towards energy efficiency. One of the earliest Opower products that put together our full story. It has since been rebuilt and improved.

Outbound SDK

Stack: Java, Dropwizard, MySQL, S3

Not every type of outbound content that Opower sends or that utilities want to send is a long-term, polished product. Sometimes utilities want to send out one-off communications or experimental types of content to validate ideas. The Outbound Platform, powerful and expressive as it is, is not ideal for this kind of quick idea validation. We embarked on a project to develop an SDK with a smaller footprint, more rapid development, and a quicker loop through generation, delivery, and feedback. We successfully launched a pair of experimental products on this SDK before an organizational pivot ended the project. We learned much, though, and have since repurposed some artifacts for our use.

Trajectory

06/2011 - Initialization

My first day at Opower. I was the first college hire in Engineering -- maybe the entire organization? -- and the youngest engineer by at least a few years. I started on our Web Portal team, working on an earlier version of our white-label web portal for Opower clients. We fulfilled a variety of critical commitments to our clients, including some of the largest utilities in the world. We also built the first version of the Home Energy Audit.

09/2012 - Outbound

I switched teams to become a core contributor to two related projects: the launch of a new, business-creating product, Peak Time Rebates, and a complete rebuild of our platform for generating and delivering outbound content, the Outbound Platform. We launched the product for the second largest utility in the United States, and proved the viability of our new platform, initiating a wave of new product development.

04/2014 - Technical Lead

I became the Technical Lead for the Outbound Platform team. The success of the platform encouraged other teams to develop new Outbound products and migrate existing ones. The flurry of activity necessitated new functionality and performance and stability improvements. We built out a set of operational tools for monitoring, alerting, troubleshooting, administration, and analysis. We also developed a new platform for working with Communication History.

12/2014 - Mentorship

Alongside a few close colleagues, I co-founded the Opower Engineering Mentorship Program, designed to facilitate mentorship across the organization. Our guiding idea was that the people most in need of mentorship are the least likely to proactively seek it out. We set up a process to establish new relationships, provide guidance on how to be good mentors and mentees, help resolve conflicts, and improve the program over time.

01/2016 - Architect

In addition to Technical Lead responsibilities, I became the Architect for the Outbound organization, comprising the teams responsible for both the Outbound Platform and all Outbound products. We laid out a vision and roadmap for the long-term architectural vision of the platform, created new development guidelines for our group of 40 engineers across 6 teams, and aligned with other engineering organizations on cross-cutting initiatives.

05/2016 - Content // Tools

Switched from the Outbound Platform team to become the Technical Lead for the Content and Tools team, focused on systems for administering outbound content and generating content at runtime for individual recipients. We modernized Opower's system for storing and distributing static assets. We also rebuilt Opower's tip administration system, revamping the way in which one of Opower's core data models is stored, administered, and exposed across the organization.