Author Archives: Tom Vaughan

Moving Day

We officially out-grew our Rosslyn space today and moved in to a new space right next to the Court House metro stop.

Tweaking the Agile Calendar

For the first five iterations, the dev team had been following this schedule:
  • Iteration N, Week 1 = Design for iteration N and 2nd week of QA for iteration N-1
  • Iteration N, Week 2 = Development
  • Iteration N, Week 3 = Development
  • Iteration N, Week 4 = 1st week of QA for iteration N
  • Iteration N, Week 5 / Iteration N +1, Week 1 = 2nd week of QA for iteration N, design for iteration N + 1
We started to notice a couple things that have caused us to try out a new schedule in our upcoming 6th iteration.

Agile impressions, 5 iterations in…

I'm assuming from the amount of hype out there that if a development team isn't using "Agile" right now, they probably feel like the one kid on the block who didn't have a Nintendo (with the Duck Hunt option, of course). duckhuntWell, we here at OPOWER loved our Duck Hunt, so we've been attempting to use "Agile" for the last 5 months or so. Agile means a lot of things to a lot of people, so I'll spell out what it means for us and then reflect on some of the pros, cons, and room-for-improvement in our practice.

When is a null not a null?

tl/dr: Don't have a non-null object's .toString() display "null". It's confusing and not helpful when looking at object states in IDE debuggers. I recently converted the attribute of our Person POJO that stored a user's email address from a java.lang.String to a javax.mail.InternetAddress.  Call it not enough testing or lack of imagination, but I introduced a Null Pointer Exception in a back-office web flow where a new user is created for our customer service application.  When a new CSR account is created and the email address is left blank, an NPE gets thrown up.  Embarrassing, but easy to fix, right?

Move meetings to move developers

Here's the scenario: You cruise in to the office at 8:45, get your coffee, check the reddits, and ignore that email from your parents asking if their computer picked up a virus because McAfee won't stop popping up a tooltray icon helpfully informing them that they're totally vulnerable. Right around 9:15, you get motivated to tackle that 2 point user story for the current iteration. You head over to the wiki, check out the specs for the requirement, find out what the Trac ticket number is and see if there are any comments with last minute advice or dependencies. None? Good. . . let's get started!

New Developer Law

NEW LAW FOR DEVELOPERS: If you throw an exception about some connection being refused, you'd better damn well put what connection you were attempting to make in the exception message. What inspired this law?  Thanks for asking.

The Cheated Frogs of Vim

We're still too small of a company to have more than 1 or 2 logical groupings of the development team, and before today they've been basically "the web team" and "everyone else."  Of course, there's a lot of cross-pollination and everything nowadays ultimately manifests itself somehow as "'web". Still, the "everyone else" paint brush was wearing thin.  In addition to the "web team", we had "the scale team" (a.k.a "Ops R&D") and "the AMI team" and "the core team" and "the report team". . .but most of those were "teams" averaged size 1 and their membership varied from iteration-to-iteration.