The Book of Revelation

Before you read any further be warned that I'm raising a Level 1 Geek Warning: if you are not in the software development industry, you'd probably enjoy your time better here.

Today, unlike most days recently, was a wonderful day at work. I actually didn't want to leave. I'm considering going to work early tomorrow. What happened? Well, let's go back in time a few months...

I think it all started with Ryan. Now, every day starts with Ryan talking. Usually before I get a chance to sit down and read my e-mail he's already bombarding me with questions about some obscure problem (perhaps only obscure because I'm only half-listening at this point). But those days he started talking about books - or more specifically, the interesting things he was learning about from those books - and I started to pay attention. He told me about this crazy mystical practice called 'test-driven development', where not only do the developers test all their code, but they write the tests before they write any code!?!?! I don't think I actually laughed at him, but I let him know that it all sounded well and good as an academic exercise, but it couldn't really be done in practice by sane individuals.

And so we moved on. Ryan kept reading and kept telling me to read these books, and I kept deflecting and diverting. Then something happened, and I'm not quite sure what it was (hey, I never claimed to be a good storyteller!) but I finally relented to the pressure. The book was 'The Pragmatic Programmer' by Andy Hunt and Dave Thomas (not of Wendy's fame). I don't want to say that this book changed my life, because I hate it when people say things like that. So, I'll just say that this book had a profound impact on how I view myself as a professional software developer. That sounds a lot less sappy.

This isn't a technical book. It's a book about good practices and good attitudes. It's about taking pride in one's career. The book is littered with tips, but here are the first five (which I also have posted on my office door) that I feel are applicable to anyone in any profession:

Care About Your Craft
Why spend your life developing software unless you care about doing it well?

Provide Options, Don’t Make Lame Excuses
Instead of excuses, provide options. Don’t say it can’t be done; explain what can be done.

Be a Catalyst for Change
You can’t force change on people. Instead, show them how the future might be and help them participate in creating it.

Make Quality a Requirements Issue
Involve your users in determining the project’s real quality requirements.

Critically Analyze What You Read and Hear
Don’t be swayed by vendors, media hype, or dogma. Analyze information in terms of you and your project.

In a sense, this book revealed a whole new world to me. I had been blind as to how software development could be done. I didn't realize how much more I could be (and arguably should be) doing. And thus I started to read.

I have since read (and recommend)


The book I am currently reading is 'The Art of Unit Testing'. I'm not terribly fond of the format of this book (a lot of repetition), but it's a good beginner reference. I knew before reading this of the importance of formal unit testing (even though I had done little of it myself), but it has enlightened me to some techniques, common problems, and frameworks that could save a lot of time and effort in generating new tests.

So that brings me to today. I had been working on a connectivity bug over the last couple of days and during my analysis had uncovered a few 'loose ends' in the connectivity framework that Ryan and I had developed. Empowered by the 'fix broken windows' philosophy we decided to fix the root of the problems as opposed to patching the symptoms. The root of the problem was unfortunately embedded in the original design, but as Martin Fowler says: refactoring means never having to say you're sorry.

It was this morning that we first embarked on our first voyage of pair-programming test-driven-development. We had done plenty of pair-programming before (very successfully I might add), but never true test-driven-development (TDD). We knew that one of the main classes in our framework had too much varied responsibility, and we wanted to break that up. Instead of liberally ripping apart the code we wrote test cases to help guide how we wanted to refactor. Instead of building from the inside out (i.e. implementation->API), we were building from the outside in (usage->implementation).

This shift in thinking was phenomenal. Traditionally in developing something, I would figure out generally what a component needs to do, and then figure out the best way for it to do that (i.e. figure out the best implementation). The API would then be driven by the implementation. In the act of generating the test cases however, we were thinking about what we wanted to be able to do with the class, which in turn defined how we wanted to use the class. Thus, we first defined the API, and the implementation flowed naturally from there.

Now, perhaps this is how everyone else has been developing software and I've just been in the dark. But I've been around long enough to know that this isn't necessarily common practice, even if it is common sense to define the API and interactions first. The great thing about doing TDD is that it creates a smart and usable design, and you get a mechanism to automatically verify the functionality of your component. Two birds, one stone.

If you haven't tried or heard of TDD, don't laugh and discount it like I did; I encourage you to research it to see if it's right for you. And, as Ryan has already mentioned to most of our colleagues, if you value your career as a software developer, you owe it to yourself to read 'The Pragmatic Programmer'. Let me know if you want to borrow it.

Stating the Obvious

I haven't posted anything in quite a long time.

To go, please

The Couch Sessions


"Of course I'm comfortable!"





How George got his mowing groove back

As most of you probably don't recall, several Earth Day's ago -- that is to say, three years ago, on Earth Day -- we bought a battery-powered lawn mower. It was a gesture to Mother Earth, but also an opportunity to avoid gas-permeated hands. I remember those days fondly.

But, frankly, the old lady doesn't quite cut it anymore (pun intended). I can mow the front and part of the back in one evening, and the rest has to wait until the next night (which is typically not actually the subsequent evening). I happen to have busy evenings so the grass gets longer faster than I'd like it too, particularly when the weather has been as rainy as it's been. So, we come to the second problem of the mower, which is that it doesn't really like cutting long grass.

I mean, it cuts long grass, but it doesn't cut George-long grass. (Some of you may be familiar with the George-hour... the concept is very similar.) And because of this critical deficiency, I made the painful but necessary decision to seek a replacement.

Meet, the Bull. El Toro, the Magnificent.



This beautiful piece of self-propelled machinery galloped across my jungle of a lawn, dragging me behind while indiscriminately gobbling up all the herbage in its path. This was definitely a sight to see. Instead of taking 2+ hours over the course of multiple days, it took me a total of 45 minutes to cut my entire lawn!

I must admit, the decision to replace my Earth-friendly yet cojones-deficient mower with a gas-guzzling grass-eating beast was not an easy one. It took me two years to actually admit I had a problem. I had no choice but to eventually succumb to reality and accept the fact that my needs can only be met at present by the power of combustion. With that acceptance has come a sense of excitement that only comes when a man gets a shiny new toy. For the first time in a long time, I'm looking forward to mowing my lawn!

But I still hold out hope that one day I can return to friendly energy again, preferably in the form of the Bat Mower!

Jack: The Lovable Allergen

I've had nasal congestion for as long as I can remember. It's just one of those facts that you assume is an unalterable truth, like the fact that people will always add an 'a' or an 'r' to your last name when trying to pronounce it. I used to think I had a cold, 12 months of the year. I find it odd that people don't have boxes of tissue in every room of their houses. But mostly I didn't think about it, because there was no point.

I didn't think about it much until last year. I had started getting a wheeze whenever doing strenuous activities like shoveling snow. I attributed it to the cold weather, but the problem didn't dissipate by spring so I went to my doctor about it. It was at this time I decided to ask about the congestion problem too, as I figured I shouldn't waste a good trip to the doctor. After my appointment I had an inhaler for exercise, an appointment with a nose/ear/throat specialist, and a spot on a waiting list to get on an even more exclusive waiting list to see an allergist.

The inhaler works miracles. I take it before playing sports and I can breathe normally. If I didn't have it, I suspect I would have had to give up such activities, so I'm thankful to modern science.

The specialist had me in for septoplastic surgery within 6 weeks to correct a deviated septum that could be causing my congestion. I was anesthetized for the surgery, which I was told was a success. The post-op was very uncomfortable (apparently I'm a bleeder), and the recovery was just plain awful. My nasal passages were plugged to stop the bleeding, so I had to breathe through my mouth for 2 weeks. Breathe through your mouth for 1 minute and see how dry your mouth gets; now imagine how dry it gets after doing that all night. Rigging a humidifier with some duct work to redirect the moisture at my face didn't work, and neither did sleeping in the bathtub after getting the bathroom extremely humid. The unfortunate result was that I had so many mouth sores I couldn't eat anything that required chewing. As I mentioned, it was a miserable recovery.

The worst part of the experience was the end result: I was no less congested than previously, and possibly even worse off. It was very disheartening.

Okay, so that's the history.

Today, over 1 year later, I finally saw the allergist. I told him about my results with the deviated septum surgery. He told me I should have come seen him first. I restrained myself from attacking him. Actually, let me step back a moment.

For those who have never had an allergy test, here's what they do:

1) Clean the inside of your arms with some sort of alcoholic solution
2) Write a few numbers on your freshly-cleaned arms
3) Take what appears to be a souped-up bingo dabber, dipped in another liquid, and dab your arms beside each of the numbers
4) Find something pointy and jab your arm in each of the little drops of liquid

They then leave you alone for 10 minutes with instructions not to scratch. Of course, the only distraction in the room is a couple of out-dated magazines, and some large medical posters on the wall. If you're going in for one of these tests, make sure to bring a book or a video game.

The allergist finally came to inspect the damage, and immediately pointed at the angry red splotch on my left arm. That, he informed me, was cats. He pointed to a relatively insignificant splotch on my right arm: maybe I was allergic to mold too... but cats were definitely my problem.

Now, the best defense against an allergen is to eliminate it from your environment. He gave me a pamphlet explaining this. I can see how that tactic works well for things like dust mites and maybe even pollen, but Jack isn't exactly easy to move -- there's a lot of inertia there. Of course, I didn't even consider that option, so we went to plan B, which is a nasal spray to help with the congestion.

We then did two respiratory tests to check for asthma. The first test - the standard one - came back negative, just as it had the previous year. But the second and less widely-accepted (nitric oxide) test came back resoundingly positive. And I'm relieved because finally I have an explanation for my wheezing/breathing problems. The asthma too, he suspects is aggravated by (if not caused by) Jack. But I've got a prescription for another inhaler that should eliminate my wheezing.

The allergist seemed genuinely positive that my symptoms would disappear within a few months, and that has me excited. In retrospect, I've had cats for most of my life, so it's empowering to know how much I've been affected by them. Even if the inhaler/nasal spray combo doesn't work, there is one more chance in the form of allergy shots; however, that is a big commitment that I'm hoping to avoid.

I don't plan on eliminating cats from my life, so I'm optimistic that the solution is at hand. But, tonight I'll probably start insisting that Jack sleep at the foot of the bed, instead of beside my chest. Wish me luck.