Is Technology too hard? (or Be Nice to your Geek)
Posted on Sunday, April 15, 2007 ( Technology )

We spent this past Easter weekend visiting Crystal's family in Boardman, Oregon. It's a sleepy little town with only one grocery store and a hardware store that is also the pharmacy and liquor store. Suffice to say, there isn't a great deal to do in Boardman, so we spend a lot of time talking (not a bad thing) with family and friends. One of my conversations was with Crystal's younger brother, Derrin, about his radio show on KLAY 1180 in the Seattle area.

Derrin is a residential loan consultant (and licensed loan originator) for Trusted Home Mortgage in Seattle. In January he broadcast the first installment of his weekly radio talk show. While the show is only aired in NW Washington, his  station has a live feed on the Internet. However, his show comes on at 4pm Pacific, which is one of those rare moments when, more often than not, you'll actually find me working hard for my employer. The end result being, even though I want to tune in, I usually miss his show either because I forget about it or am busy with something else and unable to listen.

Aside from being a world-wide broadcast radio host (isn't the Internet great?), Derrin is also a reasonably intelligent person and a fairly computer savvy guy. He attended college at OSU and works in a field heavily dependent on technology, so I know he can get around a PC without constant hand holding. Which is why I felt comfortable suggesting that he post the digital recordings of his shows on the Internet. And as the (borrowing a term from Scott Hanselman) Chief IT Dude for all my immediate and non-immediate family, I was merely doing what I assumed to be my duty.

Upon my recommendation, Derrin dove head-first into the shallow end and created his own domain name and a hosted website at TheMortgageHour.com. Shortly thereafter, I received a flood of forwarded emails from his host (which I also recommended) with information about new accounts and instructions, along with a question from Derrin, "what do I do now?" While skimming these messages it became clear that even though I viewed the instructions like an experienced checker suffering through the annoying voice prompts of a self-checkout machine at the grocery store, Derrin probably saw them more like I view the simple instructions for a new piece of Ikea furniture. Totally uncertain where to begin.

Technology has been used, even since the beginning, to make life easier for humans. And as such, there is an expectation on the part of humans that technology doesn't work unless it seems easy. Obviously, just like Ikea instructions, what seems easy to one person may seem quite complicated to another.

Ultimately, Derrin's new website led to a series of conversations between he and I with regard to the complexity and, more specifically, his frustration with the complexity of the current state of Internet technology. Why does he have to call me, a profession software engineer, to figure out how to tell people about his radio program, share a bit of mortgage info, and provide links to his recorded shows?

I believe a big part of the answer is, it's all about the money. For instance, if he worked for a large radio conglomerate, like Clear Channel or Entercom, they would provide a website for him, along with an in-house IT person to take care of any difficulties. On the other hand, he could remain independent but opt to pay big bucks for high quality, user friendly web hosting, which would remove all the complex parts from what he's trying to accomplish. Instead, Derrin pays $10 a month for high value bandwidth and server access, and hosts his site with free software written by a community of developers that don't get paid for their time, but rather, do it primarily because they enjoy it - what most people would consider "a hobby." And if he does well, Derrin could stand to make a fair bit of money off of the hard work of those developers' hobbies.

But I digress...

Back to the original question, "is technology too hard?" In some ways, I think the answer is yes - if putting up a decent website requires calling your software engineer brother-in-law, then yes, it is too hard. But the reality is, clichéd or not ... in most cases you really do "get what you pay for." So if you find yourself wanting a faster this, an easier that, or a prettier whatsit, ask yourself a simple question - how much and in what forms are you willing to pay? If the answer is, "not much" or especially, "not any" - then I would encourage you to A) lower your standards and B) always be nice to your geek.

I told Hermione to tell you that Seamus told me that Dean was told by Parvari...
Posted on Friday, April 13, 2007 ( Technology | Software Development )

Geek Alert: This is a technical post for software engineers - those of you uninterested in such things, feel free to skip it (and all posts like it).


We do a lot of things in Software Engineering that seem to be overcomplication for its own sake. One of those is, perhaps, the principle of separation of responsibilities and concerns, partially described by SRP: The Single Responsibility Principle [PDF]. However, I believe most engineers agree that when used with care the benefits of this type of separation, more often than not, outweigh its costs over the life of an application. Certainly Martin Fowler would agree, and he's a kind of rockstar in the agile development world - which if any camp was going to be "anti-separation" I would expect it to be them.

Unfortunately, though, having strict separation creates a scenario not unlike the one depicted in the book, Harry Potter and the Goblet  of Fire, quoted as the subject of this post.Sequence: MVC Basic

A Tablet PC application I worked on utilized a common MVC pattern. We had a View (the User Interface, made up of Forms, Dialogs, etc), a Controller (various controllers, actually, each with their own set of concerns), and a Model (in this case, a Business Object Layer (BOL), Business Logic Layer (BLL), and Data Access Layer (DAL)). Controllers manage critical UI behavior (beyond simple form interactions) and mediate between the View and the Model. The View does not directly cause action in the Model nor does the Model directly interact with the View (a possible exception being, well, exceptions, which if not handled at the controller layer will bubble up into the View).

There was an activity, a long-running activity, that happened in the Model layer. It prepared a large amount of data for export to another system by compiling it into a compressed file and, at the same time, updated the state of that data. That all happened within a single Transaction, such that if any part failed, the whole transaction was rolled back.

This all worked well, but a new requirement was introduced. The BLL (part of the Model) now had to determine as part of its processing whether the amount of data is "very large" (exceeds some configurable limit) and may result in a timeout during export. If the data is "very large" then the user is to be notified and given three options:

  1. Ignore the warning and continue anyway.
  2. Send the data to the local filesystem instead (for manual transmission via SneakerNet).
  3. Cancel the export altogether.

The first two options are simple enough to handle. Since an export is going to be executed in either case, we can perform the first part of processing (gather all the export data and update data states), then validate the size of the export data, receive user input if needed, and finally perform the export (either to web service or local filesystem). Since these scenarios involve an entirely serial workflow, we just modify our sequence diagram slightly.

Sequence: Break up export steps

But wait a minute - there was a third option, right? The one that reads, "Cancel the export altogether." No problem - if the user wants to cancel then just don't make the ExecuteExport call, right? right? Not exactly. See - there's a problem. During the preparation step it updated the data states of all the data to be exported. This all happened within a Transaction such that any failure to complete the task would result in a roll-back of those data states. In fact, this same issue arises with the first two options as well, because there is no guarantee that sending the export data is going to succeed (even SneakerNet fails occasionally...)

This creates a bit of a pickle. Easily resolved, of course, by moving the Transaction Root out of the Model and into the Controller - but should a Controller really be managing transactions? In general, it is assumed that the logical place for transaction management is the BLL and it makes sense because that is where the truly "critical" business decisions are made.

Courtesy of MSDN

If determining which changes are persisted and which are rolled back is a business decision (hint: it is) then transaction management ought to remain firmly planted inside the Model and away from any UI Controllers. And if the Controller can't host transactions, then it certainly shouldn't be responsible for canceling the export and rolling back data states. What to do?!?!?

The solution actually turned out to be fairly simple: fire a synchronous event from the BLL, which is handled by the UI Controller, that returns the user's response back to the BLL within the event arguments. This allows us to maintain isolation of transaction management in the Model while gaining user interactivity in the midst of a long-running process.

Here's the final sequence reflecting the addition of an event and evaluating the result of the user's response.

Sequence: User Interaction outside Model

Dear sweet Deere
Posted on Saturday, April 07, 2007 ( Ecology )

About one year ago, Crystal and I had a knock-down, drag-out via cell phone regarding the purchase of a new riding lawnmower. To set the stage, however, I think I should jump back even further.

Since moving to the Portland area in 2001, we have lived in (this is fun): Beaverton for six months, Scappoose for a year and a half, Sherwood for two years and downtown (east side) Portland for 10 months. Though we enjoyed our stint as urbanites, the simple life drew us out - west of Newberg - where we purchased some land on which sits a 50+ year old house that has been our home since November of 2005. While I realize two and a half acres is not a great deal of land to a real farmer, having grown up in the 'burbs, it seems like a lot to me.

One of the perks of having so much land is that our neighbors' homes are far enough away that I can yell at our dog, Katie, without disturbing them. I can even take practice golf shots from the backyard without fear of hurting anything (aside from my pride). There is plenty of space to mess around on two wheels. And soon I will be making some calls to start us on the path to viticulture.

However, while having so much land has a great deal of benefits; it doesn't come without a cost. A multi-faceted cost, actually, with layers, levels and forms of payment that will no doubt be recompensed continually for as long as we call this home. Perhaps the most obvious and visible cost being the need to maintain two acres of grassy field.

I'm certainly not complaining about the costs. Without hesitation I can say that we both feel very blessed to own property in such a wonderful place with such amazing views that stop me in my tracks almost daily. However, caring for the land can be a tedious and time consuming exercise. As such, I do all I can to reduce the time, energy and money required to keep it up.

Our first step was to acquire a riding lawnmower. Fortunately, we found out that my wife, Crystal's Grandparents had a riding mower that they were no longer using. Unfortunately, that mower only lasted for a few hours before its engine gave up the ghost. How thankful we were, then, when we discovered that one of our neighbors, a family we know from church, had rebuilt a mower and was selling it. Once again, however, my mechanical ineptitude shone through as the mower was apparently burning most of its oil and seized up on its second use. At that point my frustration with used lawn mowers grew to an unrecoverable level. I was done.

Immediately I began a search for a new mowing implement. I considered Zero Turn Radius (ZTR) mowers, compact tractors with mid-mount mower decks, and even fully-automated robotic mowers. Ultimately, however, all my research and analysis led me to an old farm favorite: John Deere. While the Deere may be more expensive than other brands, they have an impeccable reputation and a huge variety of equipment for every need. Once I discovered the top rated X304 with four-wheel steering and a reasonable price point, I was sold. Now all that was left was to convince Crystal that such a purchase was both feasible and prudent - which is where this post started - with a very lively cell phone discussion as I sat in the parking lot of our local John Deere dealership.

Me: "I found the perfect mower for us, and..."
Crystal: "No."
Me: "it is not the most expensive one..."
Crystal: "No."
Me: "but has all the features we need, including four-wheel steering..."
Crystal: "No."
Me: "which will cut down mowing time a lot."
Crystal: "No."
Me: "I really think you'll like it, and it's affordable!"
Crystal: "How much?"
Me: "$3500"
Crystal: "No."

Convinced that her negative responses were based on a misguided belief that that day was, in fact, "opposite day", I headed in to initiate negotiations, and walked out the door the proud owner of a brand new lawn tractor.

John Deere X304

And that brings us to the real reason for writing this post (took a while getting there, I know.) As part of my purchase I included John Deere's "Maintenance Plan Plus" - a $500 (MSRP) investment in my new mower's health, which includes two at-home maintenance services, a third year of extended warranty protection, and free transportation for all warranty services. Honestly, the extra year of warranty coverage and free transportation didn't carry much weight for me, but getting that in addition to two at-home services is clearly a great deal.

Almost a year after our purchase, we recently had the first of two at-home services performed. Here's what they did: 


It was wonderful. I didn't have to take any time off work to haul the mower to the dealer. In fact, I wasn't even home when they came - Crystal is home with Cora so I had her show them to the mower. After that, they drove it up into their truck, performed the service, and returned the mower to our shop. All without leaving our driveway. The value of having these services done for us, without any effort required on our part is immeasurable.

We both really enjoy our John Deere mower. It does an excellent job of tackling our over-grown field, is easy to drive, has plenty of power, and always fires right up. But my favorite part is knowing that someone else is going to maintain it. Now if only I could get them to maintain our cars, as well.

All content © 2010, Shawn Hempel