Friday, November 30, 2007

Capistrano on Site5

Capistrano makes deployment management easy, once it's configured correctly for the site you're working with. My sites are hosted on site5...the configuration below is a basic example of a working site. It doesn't have mongrel setup, but hopefully that part isn't too much harder after this.

BTW - don't bother trying to get it running on windows/cygwin. It's such a PITA, and I never even got it working, despite many many hours of trying and crying. I eventually used VMWare workstation with an Ubuntu 7.1 installation as my OS. There's some decent documentation out there to get the proper ruby/rails/gems/ and other supporting cast setup for *nix. But site5 also has many required configuration quirks.

So here's the page I created on their wiki:
http://wiki.site5.com/Example_Site5_Capistrano_Configuration

If you find this useful, please pay it forward by keeping that wike page up to date. Their sticky forum pages are a mess. Even better would be a total step by step guide, since there's a lot of other steps that need to happen (covered by other guides)..but it'd be nice to have an all-in-one source somewhere.

Labels: ,

The Best Care In The Air (but not on land)

Yeah, another jab at an airline's nonsensical customer service. But rather than just whine about it, I thought I'd contrast actual interactions between Midwest Airlines and Newegg.com. Midwest, I love your plush leather seats and those oh-so-generous arm rests, but your operations area could learn a little something from the folks that grew Newegg from just another cut-throat online electronics competitor to today's best web retailer...

Here's an email I sent to newegg a while back when their online system charged me a restock fee for a defective product I was returning:
From: Dan
Subject: RMA - 12345 - why restock fee for defective product?

Hi,

I just completed an RMA form for a DVD burner I'm returning for being defective. Can you remove the restocking fee on the refund? It seems wrong that I paid for shipping on this drive twice (here and back to you), and will have to pay for a restocking fee for a drive that's not working right, and then will also have to pay for shipping when I order a replacement burner from you (different brand - I don't want to get that same one).

Thanks,
Dan
And here's their reply:
Dear Customer,

Thank you for contacting Newegg.

Please kindly note that I have issued a credit of $4.87 to cover the cost for the restocking fee of RMA # 205XXX as this item is defective. We humbly apologize for this inconvenience and please allow your card issuer 3-5 business days to process and make the funds available.

In addition, as you are our valued customer, I would like to extend our service by providing a shipping credit of $6.00 towards your next order. Please feel free to let us know by replying back to this email with your new order number so that we can issue the shipping credit onto your account, thank you in advance for your patience and understanding.

If you have any further questions or concerns, please do not hesitate to contact us.

Thank you,

[CSR's Name]
Pretty cool, huh? Now contrast that with a business trip that I'm on right now. I should be flying home right now to avoid an oncoming snow storm that's about to hit Minneapolis tomorrow morning, but instead I'm in my hotel writing negative press about Midwest Airlines. Here's the online chat I had with them yesterday:
Nick: Hello, welcome to Midwest Airlines Online Customer Service. This is Nick. How may I help you?
dan: hi, i'd like to fly back a day early for conf# MXBVBH...
dan: the problem is that the rebooking fee is too high because of the fri/sat night stay restriction. is it possible to get that number down to the $50 fee?
Nick: Unfortunately not. The administrative fee on this ticket is $100 plus any difference in the fare.
dan: or even $150? i can't authorize a full ticket purchase, and i'd much rather continue flying midwest in the future than NWA
Nick: There's nothing that can be done about the fees. They are set in with the rules of the ticket.
dan: c'mon - you can do anything you want...this is my first experience with midwest with many more potential flights to/from MKE in the future, you have the space, and there's a storm coming saturday morning.
Nick: Which flight are you looking at changing it to?
dan: anything friday evening or night would work
Nick: It's an availability issue with the flights, which is why there is the high price. There's nothing we can do as we really don't have anything to work with.
dan: I see 50 seats available on the 9 o'clock flight...
Nick: You do not have the same advance purchase requirement that you got when the ticket was booked inititially.
dan: I'm now painfully aware of the arbitrary rules that are in place. what i'm asking for is a minor exception to be made for a change that won't cost you anything, and will ensure more happy future business from me.
Nick: The only instance in which exceptions are made are in medical emergencies that we can verify.
dan: well, thanks for your time. In the future, I'll be sure to choose another airline.

Not so cool, huh?

In newegg's case, they lost a little bit of money on the transaction, but the strategy has paid off well in the thousands of dollars I've spent there since. Their management gives the customer service reps real authority and a simple guideline to make customers happy (within reason of course).
In Midwest's case, they could have made an extra $150 and ensured my repeat business in the future. No ticket price algorithms. No artificial policy restrictions when talking to a customer.

It's not altruism - it's business. Making customers happy means more money for you.

Labels:

Tuesday, November 6, 2007

Oh, so this is how you use hibernate.

I've been using hibernate for a pretty long time (I was one of the micro donors to help them get hibernate.org), but it's always been a fairly black box to me. It seems every time I use it for a project, I understand something that I was not-so-blissfully ignorant of in the past. Today as I was writing some NHibernate mappings, I ran across this cheatsheet. It's a little out of date (substitute "role" with "name"), but it brings clarity in 30 seconds what the hibernate documentation rarely seems to do for me. It's not that the hibernate docs are bad, it's just that there's so many minute details, and not enough simple samples.

Anyway - kudos to the folks at NDP software.

Labels: ,