Tie Tuesday – more fun that it sounds

The developers have an informal “Tie Tuesday” each work. It’s exactly what it sounds like. And, since you asked, yes, it is more fun to wear a tie when you don’t have to. Not everyone does it every week, but this week, we had the best participation yet:

Riley Dawg participates in tie tuesday

Riley Dawg participates in tie tuesday

Locking screens on Macs with the keyboard

Desktop security is a big issue when you have access to massive amounts of data. As far as plain old terminal security, locking your computer while you're away is a pretty basic rule. We have lots of OSes around the office here - Ubuntu, Windows, and OSX. Of those, Ubuntu and Windows natively provide a way to lock your desktop with a keystroke (Win+L or Ctrl+Alt+Del, Enter on Windows and Ctrl+Alt+L on Ubuntu). Strangely, Mac gives no easy way to lock your desktop. We've been using HotCorners for the screen saver, but who wants to touch the mouse if you don't have to (especially when you're racing to grab a free lunch)? Enter Quicksilver, everyone's favorite application interface. (There are all sorts of things you can do with…
Continue reading ...

When adding more threads makes it all slower

I've been working on a new feature that requires analysis of each individual's entire energy-use history. In other words, I have a process that will touch every single bit of data in our database. This should be a rare thing, so if it takes a while, it's not that big of a deal. My initial implementation was on track to complete in...11 days. My first thought was: there's lots of blocking reading and writing from the database, so adding some threads should speed things up. While one thread was analyzing Bob's energy data, another could be fetching Mary's, while another could be updating Joe's meta-data with the results. Or so I thought. The more threads I added, the slower the entire thing became. It turned out that…
Continue reading ...

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.
Continue reading ...

Slides on Improving Your Agile Development Process

Dead last, after the headline act, and after Joel Spolsky told everyone to go home, I did a lightning talk at DC's recent DevDays (A StackOverflow production) on how we have used process metrics from our bug tracker to improve our process.

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.
Continue reading ...

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.
Continue reading ...

Best javadoc ever

/**
  * Whatever to satisfy whatever.
  *
  * @author dave.copeland
  */

expectations==trouble

expectations will get you in trouble :)

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?
Continue reading ...