The Battle Between the Right Way and The Working Way

I’ve this got awesome full stack framework at my disposal, various books, videos, articles and open source examples, yet rolling my own commenting system was a challenge in and of itself (otsn: is this the same as ‘unto itself’). I thought I had things working for me with my nested routes and simplistic system, however I guess it goes to show you that even the simplest systems can be massively complicated and confusing in the right hands.

Posting to Nested Routes and Displaying Errors

I’ve got some nested routes:

1
  map.resources :posts, :collection => {:feed => :get}, :has_many => :comments

Posts have many comments as you’d expect. So this gives me nice URLs like /posts/5/comments/new and named routes like new_post_comment_path. Easy enough. The problem I ran into was following this common rails convention:

  1. Form is displayed when GETting a Controller’s new action
  2. User enters information in form
  3. Validation fails
  4. “new” action is re-rendered from the Controller’s create action

This is simple and not even worth mentioning for most scenarios, however I got myself in a bind when I tried to apply it to my posts/comments scenario.

  1. Post’s “show” action is rendered (PostsController)
  2. Comment’s form is displayed (PostsController)
  3. User enters information into Comment’s form and it’s posted to /posts/:post_id/comments (CommentsController)
  4. Validation fails and “form” has to be re-rendered (CommentsController)
  5. WTF now?

I can’t just re-render the PostsController’s show action (I messed around with rendering the template with render :template but that didn’t really work). I can’t render the PostsController’s show action again and hop down to the Comment’s form (I tried using :anchor and all sorts of shit, no luck). At this point I was really stuck, couldn’t really figure out what to do next, rails confidence shattered, ego bruised, internet more browsed… eventually I gave up for a few days.

The Right Way and the Working Way

There’s something about Rails that makes me want to do things the “right” way. I don’t even know what that means half the time, but something about the community, the examples, the general vibe of everything suggests that there is usually a “right” way. Sometimes I think I get a little too caught up in this. Coming from PHP where there isn’t really a “right” way, I think part of me is searching for some structure and validation where I can have some confirmation that not just BSing my way through a problem is a good solution.

I got to a point with this problem where I basically gave up. I shelved the problem for about three days, just kinda ignored the whole thing. When I finally came back to it, I had this genius idea to not be fancy and just display the Comment’s form on it’s own if validation fails. This works in that it solves my problem, it’s not totally out of this world usability wise and it has allowed me to move on to solving other problems and making new improvements.

When you’re at a crossroads of doing something the “right way” and the “working way” you need to ask yourself if it’s worth forgoing the “right way” in favor of the “working way”, often times you’ll find that the “working way” is “right” enough and you’ll save yourself a lot of time and frustration, saving your energy to tackle more important problems.

otsn: off topic side note, LDO

Cox Bundled Service (Permission Not Included)

I’ve got cable internet and digital cable through Cox Communications, and so far have been quite happy with it. The internet is always up, super fast and the cable server hardly has any problems. Usually Cox is great when it comes to customer service, they’re always friendly on the phone and quick to answer questions. However, when I called earlier tonight to ask about a CableCard™ for my new Tivo™ the guy I spoke with was a departure from what I’m used to.

Preface the Pitch

If you’re going to pitch me something, the least you can do is make the experience up to the point of the pitch desirable. This customer service tech sounded like he really wanted to go home (it was about 15 minutes till closing time). He had a pretty bad attitude about the call and I was ready to get off the phone with him before he even got to the sales script part.

Relevance Sells

I was calling to ask a technical question about something related to cable television. I was pitched bundled phone service. The thing is, my wife and I live in the year 2008 and having a home phone is useless to us, had we needed a phone line I would have already bundled it. The second problem of this sales call was that I was pitched something that had nothing to do with my original call. A better approach for selling me something I don’t already have would have been to relate the sale with my question about the CableCard™. “Have you considered ordering the premium movie channels? With your new HD Tivo™ and this CableCard™ you’ll be able to record some awesome movies on HBO™ and Showtime™!”

I probably don’t want premium movie channels, or I would have ordered those also, but this sales pitch has such a better chance of being perceived positively by the customer.

  1. It’s related to what I’m calling about so I’m not thrown for a loop
  2. I’ve shown that I’m indulging in a Tivo™ over the Cox DVR so I might be likely to splurge a bit more and get some premium HD movie channels
  3. It shows that this employee is paying attention to what I’m saying and is actively trying to improve my experience with the company

Instead I got some stupid pitch for $2.05/month phone service.

Pretend to Care

At the very least this guy could have pretended to care but instead he made it obvious that he didn’t care (I wouldn’t either) but undoubtedly there is probably some quota or performance review where his manager counts all of the tick marks next to “BUY PHONE SERVICE” and tells him he’s a good person or a worthless POS.

It was obvious that this guy didn’t want to read his script or make his feeble attempt at selling this phone service, somebody told him to and it was clear. The problem is, had he not said anything and just ended the call with “Thanks for calling…” I wouldn’t have thought much of it. But, instead, he had to pitch me the irrelevant service with his bad attitude and I’m not going to forget about it, I’ll probably be on the defensive next time I call, hoping I don’t have to explain to someone that I really don’t want or need a phone.

Who Called Who?

As Seth Godin frequently reminds us, permission is key. By calling Cox Communications I gave them permission to talk to me. I think they’re aware of this since they’ve got it setup where they answer your question and then pitch. Unfortunately they soured it by having returning a bad attitude and irrelevant offering. If you’re going to accept calls from people and you plan to solve their problem AND give them a reason to open their wallet, you can’t half-ass one or the other (or in this case both). If you can’t graciously help people in a positive way, don’t bother asking for a hand out. There is a word for this that people use to describe peers, acquaintances and co-workers who act this way, “asshole”. Don’t be an asshole, seriously.