It took me a while to come up with the title for this post. It’s an Opinion Piece, not a Techincal one, so you’ll see why in a moment.

This article is Post #2 in my series, Dumb Shit I’ve Done in a Production Environment. Post #1 recounts an incident from a more personal scale. Whereas I got paid to screw this one up.

The series will conclude once I stop doing dumb shit in a Production enviroment.

I’m working for a new company now, and they’re rocking it for RoR apps on the iPhone. Sounds like a good place to be. One of the many reasons why this position works for me is because these guys are all about GTD and getting it out there. Lean ‘n’ mean.

Whereas I’ve become very used to a holistic detail-orented, wisened test-backed process. Great for Enterprise, but not so much for the reckless streets of Startup 3.0 . So I’m in a learning process. I’ve turned around some good stuff quickly, and it’s very satisfying.

But seriously. Pooch screwed. Twice.

The First

I started out working on a project related to account management. They wanted a quick turn-around, I gave it a shot and had the whole thing backed with solid testing, ready for on-time deployment with a smile. And in trying to keep track of all the new system permutations – I’d been there 2 weeks or so – I forgot one basic thing, and forgot to test for another. A nice little Perfect Storm. One emergency 1am database rollback later, we had a load of pissed customers and a helluva lot of explaining to do.

The Second

This past week, I went in to fix a minor rounding issue bug. Those can be touchy. The right way to do it is with BigDecimal. Yep, I’ve done that in Java too with BigDecimal. Overall, it’s somewhat ponderous, detail-oriented, and can easily be polluted with Floats and the like. So I’d taken a shortcut, realizing that the low-level C impl was doing String conversion without the rounding issue. ¨So I took the low-hanging fruit:

total.to_s.to_i

Awesome !!1!. Well, that is until you get into the 100-of-trillions area, otherwise shown as 1.0e+14. Guess what happens when you parse that into a Fixnum? No need for a database rollback this time, but Da Boss had to spend days sorting out the visceral impact of ridiculous sums of bogus exploit money pouring into our RPG.

*Ahem*

Security, privacy and account management. Payment calculations. Not the sort of things to take shortcuts on. Yet, if you’re embracing a culture that wants it done quickly and with minimum impact, it’s a risk you might be willing to take. It’s not like I didn’t have test scripts … I just forgot to head into scientific notation territory. Just like I forgot to check for the implication of null password acceptance ( long story there, special account cases, etc. )

I’m putting these things up here for my fellow developers to laugh at. “I mean, c’mon. All that’s totally obvious stuff.” “I’d never miss that, that’s sophmore shit.” Good, get it out of your system, laughing boy.

But believe me, when you’re on the other end of it, and had been in the middle of it and all full of all the other things that you needed to keep track of at that time, heh, well, that’s when you’ll really need to keep yerself laughing :smile: