Kurser i Domain-Driven Design - VĂ¥ren 2012




Thursday, August 30, 2007

The Customer Service Paradox

You could say that I am somewhat sensitive in the customer service experiences department. I don't think I demand too much, I just expect things to work and for any problem that may occur to be handled responsibly in a timely fashion. Although rare, sometimes that actually happens.

I ordered a few things from the Apple Store the other day. The actual buying experience was as dreadful as always, but fulfillment was fast and I was to expect my order to be delivered by UPS a few days later. I usually try to stay away from receiving shipments to my residential home address. The delivery truck typically shows up when you're not at home, and it is a pain to later try to track down the forwarder to get your stuff. But since I was at home on vacation anyway, I made an exception this time.

Carefully tracking the shipment on the UPS web site I suddenly noticed that the delivery was in an exception state; UPS had failed to find my delivery address. This was around five in the afternoon. So I looked up the UPS contact info on the site and gave them a call. Pretty much immediately a human picks up the phone and inquires how he can be of service. No waiting in a long phone queue, no ten-levels deep interactive phone menu of "press one for great deals on shipping", "enter tracking number followed by pound", "enter phone number", and definitely no embarrassingly worthless natural language voice recognition crap that never works and makes you feel like you're a total moron with no communication skills whatsoever. None of that. Just a friendly voice. A friendly voice that asked a couple of questions and promised to contact someone who could help me get the shipment back on track. "If you haven’t heard anything within one hour call us back, we're here until 8 p.m.”

After about ten minutes another person from UPS called and informed me that the driver, a bit embarrassed, had admitted that he had failed to find my house. She asked for directions and told me to expect the shipment to arrive soon. After another twenty minutes or so the UPS man arrived and delivered my packages.

They had me by the human answering the phone. This is what great service looks like. You make it easy to report issues, and when informed about a problem you take responsibility, you own the problem, until it is resolved. You promise to call back, and you call back. You promise to deliver something, and you do deliver. In theory this is very easy. In practice, apparently surprisingly hard.

Great customer service story, eh? Except it really isn't. After all, this is UPS, you'd expect them to be able to read a map. Or if not, they could at least try to call the receiver to get directions, it is a listed number. They really should have been able to deliver the package without any of this. Had they done that everything would have been OK. The service would have worked, I'd have my stuff and think nothing more about it. But now, after this, I sit here writing a blog entry praising UPS.

And herein lies the paradox. A quick and effortless resolution of a problem is actually better received and remembered than a problem that doesn't occur in the first place.

Never underestimate the power of great customer support and outstanding exception handling.




This and more great drawings from http://xkcd.com/

Friday, June 29, 2007

The Patch Game

One problem with gadgets of today is that they seem to need constant patching. Barely a day passes without some automatic update service is telling me to download and apply a patch. Sometimes the patch provides new functionality, but most of the time it simply tries to fix functionality that were there from the start but isn't working properly. With more and more things shipping with small embedded computers this is starting to become quite the time-sink. It's also annoying. And it feels like it is only getting worse.

I'm really tired of patching my cell phone, the iPod, the other iPod, the digital camera, the GPS, the cell phone again, the computer, the Wii; even the damn car needs software updates! Why is it so hard to ship stuff with software that is actually working? Has technology grown too complex? Are products rushed to the market to beat the competition and the software development process isn't coping? Are product developers getting sloppy since they know they can fix most things very late in the product life-cycle? What is the problem here?

Monday, June 18, 2007

Enjoying an Ingenious Life

As it turns out, my friend, and Citerus consultant, Rickard Johansson has stopped boiling frogs, and started to enjoy an ingenious life.

Not a bad choice I'd say.

Wednesday, June 06, 2007

Fulhack Annotation 1.0

Introducing Fulhack Annotation 1.0 for Java - finally you can come clean with your fulhacks!

Download the Fulhack Annotation jar and drop it on your classpath. You can now annotate your fulhacks like this:

@Fulhack(blameDeveloper = "patrik",
badExcuse =
"Didn't have time to make it nice",
hack =
"Perhaps use same solution as for Cat, it looks OK.")
public void setBrownColor() {
color =
"Brown";
}

Using the Annotation Processing Tool (apt) shipping with Java 5, you can then create reports of your fulhacks by running:

apt -cp fulhack-1.0.0.jar <path-to-source-code>/*.java

Fulhack is licensed under the Apache License, Version 2.0.

Enjoy!

Download fulhack-1.0.0.zip

Thursday, May 31, 2007

Laziness is not a virtue of a programmer

In the late 1980:s Larry Wall stated that one of the three virtues of a programmer is laziness (the other two being impatience and hubris). With that in mind he created Perl, or possibly the order of the two events were the other way around.

After about 10 years of doing software development commercially I would like to argue that laziness is not a virtue of a programmer. My intention here is not to dis Larry based on a line taken out of context. Larry is after all much of a hero to an entire generation of system administrators and programmers. Perl also came to drive many of the first attempts at e-commerce and interactive web application, making a large contribution to the development of the web as we know it today. So, with that in mind, it is apparent that laziness can help you go places. But being lazy can also get you into all sorts of trouble.

Laziness may not be a virtue, but it sure seems to be an integral part of human behavior. I have to fight my own laziness everyday. When you have a task to complete it is often very tempting to do a fulhack* here, add an extra if-statement there, and hardcode some piece of information over in that end, i.e. do things that you know are wrong, but are very appealing for some reason. The right thing to do in these situations is typically something along the lines of rewriting a few more lines of code, extract a method, move a scattered responsibility to the class where it really belongs, etc.

The shortcuts are quick wins; you fix a problem momentarily and you can move on to other tasks. But as these quick wins starts to accumulate, it becomes even harder to stay away from them: "The code is ugly anyway, another one of these won't really matter now, will it?" This is the Broken window theory in action. And soon, your code is full of ugly hacks. Hacks that make the code hard to read, hard to understand and hard to maintain. Hacks that increase the entropy, or Technical Debt. All these things lead to a system that is more difficult and expensive to maintain. A system that is hard to change and extend with new functionality. A system that smells and no-one wants to work on.

So just stop being lazy. Pair-programming is a great tool to help you out here. It is much harder to write intentionally ugly code when someone is looking over you shoulder (or even stealing the keyboard).

Tim Ottinger has written an interesting piece on code as a liability.

Larry Wall on the virtues of community: Diligence, Patience, and Humility

*a 'fulhack' is a Swedish term for an ugly piece of code that you know is bad. But despite this you write it and leave it in the system you are working on, usually because you're too lazy to do it the nice way. A fulhack is typically annotated with some sort of code comment where the author clearly states that it is a fulhack, admits guilt and that way tries to escape responsibility. Which of course doesn't work...

Monday, April 02, 2007

Till Hell Freezes Over

I actually didn't think we would see this one this soon. It is, of course, the logical step to take but I really did think that the record industry would rather go bankrupt proudly singing the DRM tune before something like this happened. But today Apple and EMI announced "Higher Quality DRM-Free Music" on iTunes.

No, seriously. It appears to be true.

I will stop myself from ranting along about the true evils of DRM, the anti-customer business model of big conservative record companies, how they deserve a punishment and how they have completely frozen in a business model so dated that it isn't even funny. I don't mind paying for music, but the attitude the recording industry shows their paying customers makes me sick.

Sure, I would like to have seen a truly lossless encoding and a price decrease. But I guess you can't have it all.

Anyway, interesting move, now let's see what happens.

Saturday, March 17, 2007

Quality Money Can’t Buy

We needed a user forum for the sventon project, so we went looking for suitable software to implement this. We found phpBB that looked like a nice fit for the environment our hosting service is offering. I decided to try it out and downloaded the distribution. I discovered a beautiful piece of software, at least on the outside. I have not looked at the code, but my experience tells me that the outside and the inside tend to go together (at least when it comes to software, I’m not sure the same can be said about humans). The installation was a breeze: Upload the files to the server, point your browser to the installation page, enter a few configuration parameters and you’re pretty much done. No messing around with database schemas and SQL create scripts, no searching for configuration files in weird places and trying to figure out what needs to be changed, no nothing. For security reason the application won’t even start until you have deleted the configuration and installation directories, everything to minimize the possible ways to mess up.

This is ease of use money can’t buy. Have you ever tried to install an Oracle product you know what I mean: After wading through oceans of OLAF wizard screens, only to get harshly interrupted by a Java stack trace, you end up with an half baked install, and Java 1.1.8 as the system default runtime. Yuck.

My guess is that phpBB grew so popular that the ease of use had to be top-notch for the developers not to drown in support requests (but then again, I have never used phpBB before, the installation procedure may have been this good since day one, and that is the reason for its popularity). Oracle and their colleagues in the closed source arena, on the other hand, really don’t mind taking support calls from frustrated users; on the contrary, it’s a core part of their business.

I know, this hypothesis doesn’t really scale well. Many, perhaps most, open-source projects are a pain to install (trying to install Linux on an AST laptop in 1997 was an experience I’d rather not go through again), but the really successful ones are easy to use, easy to install and well documented, including frameworks such as Hibernate and Spring as well as Linux of year 2007. And of course, there are commercial offerings that are great as well, Orion server comes to mind; unzip the download and the install is completed. Nice.

Regarding the sventon user forum, we finally settled on something even easier: Google Groups.

Conclusion: I don’t know. Whatever. Go code something.