Small Victories in Customer Service

Posted by Doug Sat, 01 Dec 2007 17:20:00 GMT

I bought my wife a GPS from Amazon as an early Christmas present before Thanksgiving. I guess I was a little too eager because I ended up paying too much for it. Just a couple weeks later, Amazon advertised to me in one of their “may we suggest” ads the very same GPS for a lot less money. In the end, they refunded me the difference in price; but I can’t help but feel a little miffed by the whole experience.

Let me start by saying trying to sell me the exact same device I’ve already bought from them at a lower price in a targeted ad is pretty stupid. They know everything I’ve bought. In fact, the ad said something like “we know you’ve looked at these GPS’, may we suggest this other one?” Why would they advertise to me something I’ve already bought. And why advertise it to me if you know I paid more for the same device? We in the web development world who control how these ads get generated need to do better than that.

I couldn’t let them rub this price drop in my face, so I called up customer service. The CSR was unsympathetic to my plight. Nothing I said phased her. I was nice and undemanding. I pointed out that I was within my return window and I could just return the device for a refund and then go buy it somewhere else. It all was a no go. There was no getting a refund from her.

So I pulled the standard “let me talk to your manager” trick. She made me wait on hold for what seemed like five to 10 minutes. When the supervisor came on the phone she quickly summarized what she thought my concern was and then just as quickly told me she’d refund me the difference between what I paid and the new price.

One the surface, I’m pleased. I paid way too much for the GPS and I’m glad I didn’t loose out. Money’s tight this time of year and every little bit helps. Also, it didn’t cost me too much effort to get the refund. All told probably 30 minutes. The refund as an hourly wage is pretty good.

On the other hand, I’m frustrated by the way they handled me. First, as I said above, why even advertise the price drop to me? It’s true I was already aware other places (like Wal-Mart) had it cheaper. But the ad was definitely insult to injury. Second, and this is the real kicker, why didn’t the original CSR handle my concern? Why did she resist so hard to giving me a refund when her supervisor just came on the phone and gave it to me without me having to even ask?

I’m trying to think what lesson I can learn about this in dealing with people. I wonder if the original CSR knew her manager was going to give me what I wanted? It seems like there’s times when people have wanted things from me that I knew I’d eventually give them. For some reason though I can recall making them “work for it”. Maybe such a delayed “giving in” has some value, but on the receiving end I’m not so sure. I think this no-then-yes tactic really just comes across as being difficult to work with.

I think the lesson to walk away from here is that when someone asks for something really think about it before you say “no”. Are you saying “no” just because you hope they’ll go away but you know the right thing to do is say “yes”? There are definitely times to say “no” just as there are definitely times to say “yes”. I guess what I’m trying to come up with is don’t play games with your yeses and noes. Shoot straight. Let your “yes” be yes and your “no” be no.

Oh, and the other lesson to walk away from here is don’t give in so easily when talking to customer service.

Tags , , , , ,  | 5 comments

Jumping to Specific Windows in Emacs

Posted by Doug Thu, 08 Nov 2007 02:58:00 GMT

OK, last emacs tip for a while. It’s ironic, but the last two years I’ve written some cool elisp while at RubyConf. I typically run emacs full screen and split buffers both vertically and horizontally to arrange bits of code. It’s not uncommon for me to end up with three, four, five or even six visible windows in emacs. The problem though is navigating between them.

The out-of-the-box solution is to use other-window (bound to C-x o) and just cycle through them. If you’re fancy you can give a prefix argument to other-window and go backwards. This window cycling is tedious to me though and I’d like something faster. Particularly when I’m mostly bouncing back and forth between two windows.

To solve this problem I wrote jump-to-buffer. Of course, right now I’m really enamored with the fuzzy matching in ido-completing-read. That’s what allows you to type non-sequential characters to match the buffer name. It’s very similar to TextMate’s pattern matching. So, jump-to-buffer uses ido-completing-read. The buffers it gives you as options for completion are only the buffers in visible windows. It also sorts those buffers in the order of the buffer-list; which is in the order of most recently accessed.

To make this work, I’ve written two helper functions: rotate-list, and sort-by-other-list. Without further ado:

(defun dka-sort-by-other-list (to-sort-list other-list)
  (let* ((index 0)
         (other-alist (mapcar (lambda (buffer) 
                                (setq index (+ index 1))
                                (cons buffer index))
                              other-list))
         (swartz (mapcar (lambda (item) 
                           (cons (cdr (assoc item other-alist)) item))
                         to-sort-list))
         (sorted-list (sort swartz (lambda (a b) (< (car a) (car b))))))
    (mapcar 'cdr sorted-list)))

(defun rotate-list (list count)
  "Rotate the LIST by COUNT elements"
  (cond
   ((= count 0) list)
   ((not list) list)
   (t
    (rotate-list (nconc  (cdr list) (list (car list)) '()) (1- count)))))

(defun dka-jump-to-window ()
  "Interactively jump to another visible window based on it's `buffer-name' using `ido-completing-read'"
  (interactive)
  (let* ((visible-buffers (mapcar '(lambda (window) (window-buffer window)) (window-list)))
         (sorted-visible-buffers (dka-sort-by-other-list visible-buffers (buffer-list)))
         (rotated-buffer-list (rotate-list sorted-visible-buffers 1))
         (visible-buffer-names (mapcar (lambda (buffer) (buffer-name buffer)) rotated-buffer-list))
         (buffer-name (ido-completing-read "Enter buffer to jump to: " 
                                           visible-buffer-names
                                           nil t))
         (window-of-buffer
          (delq nil 
                (mapcar '(lambda (window) 
                           (if (equal buffer-name (buffer-name (window-buffer window)))
        window nil)) (window-list)))))
    (select-window (car window-of-buffer)))
)

I’m definitely interested in feedback on this code. The dka-sort-list-by-other-list method was particularly tricky for me to write. I think it’s both right and fast. I haven’t dove into elunit yet to know for sure if it’s right.

Posted in ,  | Tags , , , , ,  | no comments

Sharing the Mac Clipboard with Emacs

Posted by Doug Thu, 08 Nov 2007 02:09:00 GMT

While I’m sharing emacs hacks, I finally got around to researching this and/or figuring it out. I almost always run emacs inside the terminal in a “no window” mode. It’s pretty natural for me to use M-w to copy something from emacs and then try to Cmd-V it in another Terminal window or likewise Cmd-C something in Terminal and then try paste it into emacs with C-y. Until now, I haven’t known how to share the clipboard with emacs.

(defun copy-from-osx ()
  (shell-command-to-string "pbpaste"))

(defun paste-to-osx (text &optional push)
  (let ((process-connection-type nil)) 
      (let ((proc (start-process "pbcopy" "*Messages*" "pbcopy")))
        (process-send-string proc text)
        (process-send-eof proc))))

(setq interprogram-cut-function 'paste-to-osx)
(setq interprogram-paste-function 'copy-from-osx)

This takes advantage of the pbcopy and pbpaste command line programs to access the clipboard and offers them up as elisp method for emacs’ interprogram-*-functions. Easy, peasy, pumkin weasy.

I need to give some props to Mark Aufflick for his post on Automatic Copy from X11 App to Mac OS Clipboard. My paste-to-osx is pretty much a straight rip from him.

Posted in ,  | Tags , , , ,  | no comments

Older posts: 1 2 3 4 ... 241

Copyright 2001 - 2005 by Lathi.net and Doug Alcorn

Creative Commons, Some Rights Reserved Ruby on Rails Developer Powered by Debian GNU/Linux Powered by Typo