Stop Leading Your Team to The Destination, Give Them The Map

To start 2009 this will be one of the first of many business oriented posts coming to this blog. It’s great to be a technologist, but it’s important we as technologists can do something with our ideas. So I hope to provide some benefit to those of you willing to listen.

The biggest thing every executive needs to run a successful company is a vision – you can’t do crap without a vision of what it looks like. I’m not talking about a 5-year plan, or a 10-year plan… I’m talking about an idea. What do you want to be? Who are you in the realm of all of your competitors? If you don’t know this, why come in the office in the morning? What pushes you to get up everyday? There has got to be something… and that’s the first step – figure out what it is.

Once you’ve got the idea figured out, don’t tell everyone about it by commanding they follow behind you, because people will get lost and it will slow the entire process down.

Think about it for a second. If a group of people in several cars are all trying to get to the same place, but only the person in the front of the line knows how to get there. With every stop sign and stop light, every turn, and every interruption the people in the line have to check where the leader is… and in turn the leader needs to check that everyone is behind him. So instead of commanding, give everyone the map, explain the vision, and explain how they fit into the vision of what’s going on. Then with the map in hand they can get to the destination in their own right. Give your people the freedom to make small course changes on the way, side streets or pit stops, they’ll meet you at the finish line.

Let’s say part of the corporate vision is to provide a superior user experience in all of your software. If you share the map and embed that ideal in your corporate culture you’ll see how people will take charge. Jill in QA will consider it when testing. Bob in design will research the best user experience paradigm in his interface, just as Sam will do the same when programming the front end.

Have a vision, build a culture around the vision, and then let the smart people work.

Advertisements

Professional Goals for 2009

So I’ve seeing a lot of people writing on their blogs about their general goals for the upcoming year. So I thought for the purpose of reminding myself every time I came here I would write mine up as well.

  1. Continue my work/learning Ruby and Rails
  2. Go back to learning C
  3. Learn Objective-C
  4. Continue my business/executive training
  5. Blog more of course
  6. Continue advancing my knowledge of Agile methodologies
  7. See team camaraderie at my day job increase
  8. Really start following TDD/BDD principles

So with that in mind… HAPPY NEW YEAR!

Optimizing the RedCloth Helper

In my previous post I posted several small Rails tips, one of which was a cleaner RedCloth helper. Unfortunately, this helper requires that the textile is parsed each time the page is loaded, and that can get nasty. So it our item is a text field called details, just add a details_html field to your model… then create a private conversion method that you call using a before_filter.

Something like:

before_filter :convert_details

def convert_details
  return if self.details.nil?
  self.details_html = RedCloth.new(self.details).to_html
end 

Then just display details_html in your view instead. This way the textile only gets converted when you save and make changes to it.

Rails Tip Roundup

I’ve been working on a few new projects lately and wanted to share a few little tips I’ve started doing.

Conditional Buttons for Shared Forms

Something that I like to do is use a shared form for both my edit and new views. Doing this however means I need to be friendly to the user interface and make sure the submit button is properly instructional. So for example if I have a Customer model with an instance variable @customer my button would look like this:

<%= f.submit((@customer.new_record? ? "Create" : "Update") + " Customer") %>

With this I’m checking to see if the @customer instance variable belongs to a new record and if so it’s outputs Create, otherwise it’s an Update button.

Cleaner RedCloth Helper

There is the built-in textile helper that comes with Rails, it’s carage return rendering is a bit lame so most people typically upgrade their RedCloth gem and using something like:

<%= RedCloth.new("My copy that requires formatting").to_html =>

I prefer to instead create an application level helper for redcloth (some people might instead overwrite the textile helper here, but I find that can be confusing to some people looking at your code for the first time). My helper looks like this:

def redcloth(str)
   RedCloth.new(str).to_html
end

So now when I want to redcloth something I just call:

<%= redcloth("My copy that requires formatting") %>

Simple Little Permalink

When I have a simple object that I want to create more user-friendly URLs for, I’ll create a basic permalink. In the instance of the same Customer model from tip 1 above, I like to use the customer name as the permalink. To do this of course the name has to be unique so make sure you are validating it’s uniquiness above all. Then I create a permalink column in the database table and write something like this in my model.

def name=(value)
  write_attribute :name, value
  write_attribute :permalink, value.gsub(/\s/, "-").gsub(/[^\w-]/, '').downcase
end

def to_param
  permalink
end

This uses the value of the name that is entered, clears it of puncuation, replaces spaces with hyphens and drops the casing. The first line makes sure it still remembers it needs to write the value itself to the name column in the model.

Now it’s still important that you confirm that the permalink is unique too, but I’ll let you do that on your own.

So that’s it – I hope you guys find it useful.

Measuring Customer Loyalty with Programs is Bullshit

I’ve noticed that I have a tendency to prefer CVS as my general drug store. Now, while any prescriptions I need filled are done at Publix, I let CVS handle the generalities. But several years ago CVS did something… they created a loyalty program. At first I didn’t mind so much, they handed me card that I was required to fill out and send it in and with that I would receive “special discounts”. I went home unpacked my purchases and there the form sat for about a week until I got tired of seeing it and threw it away. But every time I go to CVS they try to give me another one. Sometimes if I just said “no, thanks” they would covertly add it into my shopping bag to be discovered once I returned home. I’ve gotten to the point now that I say, “no thank you, I have about 6 of your cards at home and I never bring a single one with me.” Sometimes I would watch as the clerk would simply scan their own cards, a ritual I could tell they had done more then once from people not wishing to jump on the card-carrying program. Some stores held a barcode right on their registers that read, “For customers not wishing to join the program, still wishing to receive the special discounts.” The stores were doing what I often refer to as “Hacking the Interface”, they had something that they knew wasn’t working, that people didn’t want, and they found a way to easily get around the policy.

The bookstore that I once frequented (and was a member of their “discount” customer loyalty program) has changed their direction in the way they wish to represent their business and the products they offer. After a few experiences with this bookseller after their makeover I realized that my discount card didn’t mean much to me if I didn’t like going to the store anymore. I paid $10 a year for that card, but the savings seemed of little value to me when I no longer enjoyed the experience of the store. I have since started shopping at another bookstore and have thrown their discount card away.

It’s About Gradual Engagement

Customer loyalty is a funny thing, something we often confuse with customer satisfaction. But customer loyalty will never be found in a card-carrying membership program or a points system. Often these programs guarantee that I (the customer) will have to maintain my information within your system to win awards that I don’t really care about, want, or that have any weight on my desire to do business with you as a company. They just stand in my way, and are annoying.

What customers want is a long-term engaging experience. Customer loyalty is created by several gradual experiences that cause that customer to continue to want a relationship with your company. Recently I purchased some Dvorak labeled covers for both my laptop and my keyboard at the office. Having not been satisfied by a previous cover I once purchased, I went to Google to find another company. The company I came across had one of the covers I was looking for but nothing for the office. I sent them an email saying what I was looking for and received an email back in about 30 minutes telling me that they were currently developing that product and that it would be available at the end of the month. He said, “Sorry we don’t have it for you now. I’ll send you an email when it’s finished up and we’ll give you free shipping on the order.” Sure enough around the end of the month I received an email from him telling me that they were available with a link to the product. Now the email could have been computer generated, but it was personalized and had his name on it, giving me the satisfaction that this individual emailed me back as promised.

So far I’ve had two great experiences with them. 1) They apologized for not having the product I hoped they would, gave me a discount on shipping when it was going to come in; and 2) Followed through on their promise to notify me when the product was available making it convenient for me to place my order. When I receive the covers, and if they are of the quality I expect – I will most definitely use them again, as the entire experience of my interactions with them have been very personable.

So what I’m trying to say is simple, the experiences you provide will build the loyalty that you are looking for. Don’t put programs in the way of buyers, most of them don’t care and find it a pain to deal with (and a poor experience by always being asked if they have their card). In a business world where things change just as fast as the technology we use to measure them it’s time to throw away our 12 year old copies of The Loyalty Effect and start building a more permanent bridge with customers that want to do business with us… not because they have our card in their wallet, but because they prefer the experience that our company provides and would come to us even while being a member of a competitor’s program.

Thoughts on Simplicity

Of the people who know me well, I think most of them would say that if I were fanatical over anything it would be the basic act of simplicity.  It sounds a bit funny, who would want to make something more difficult, right?  But simplicity is far more difficult then just making something basic (or for that matter mediocre), it’s about a number of things.

Simplicity is about having a strong understanding of the people you are trying to assist in your desire to simplify.  Too often businesses seem to “simplify” processes for their own purpose, while making it much more difficult for their customers.  They don’t think about the benefits of simplification for those people using their products and services.  When was the last time you called the power, cable, or phone company only to be lead through a series of “press 1 now” circles thinking, “wow, this is really helpful to me”?  I can only imagine that you’ve never felt helped, but rather pushed away when reaching such a phone system.

As a programmer, I see simplicity in the foundations of our technologies.  Never have I heard from another developer, “I love this [programming] language, because it takes me so long to figure out how to solve a problem.”  Most of the developers I know select their preferred programming language because it follows a syntax their brain comprehends well and solves a problem effectively.  To them, it’s simple.

As a designer, I am reminded that simplicity is contextual.  Simplicity requires that you not forget your expert customers, allowing complexity when it might be needed.  It’s important that we consider balance in product design and in doing so we reduce the information we share with consumers to the most essential; by either its removal or by simply hiding it until it becomes essential.  Simplicity is partially the elimination of excess, as well as our effective use of emptiness and space to bring focus to the things that are important.  When was the last time you went to a website and didn’t know where to go to find what you were looking for, or spent 15 minutes trying to understand an online registration form?  It is about reducing the confusion and easing the minds of the people interacting with you.

Simplicity is about having a great understanding of the subject matter you are communicating, allowing you to speak of it concisely.  As a presenter and a writer, I find the more I speak or write about something, the less I need to say about it to share my point of vie.  Not that I know less, but simply I have a deeper understanding of the meaning behind the points I’m discussing.  Take the time to dig deeper into your area of expertise, know it from multiple angles.  It might just provide you with insight on how others view what you are communicating.

The next chance you get, think strongly about simplicity.  Whether it’s a new company policy, a new product, or maybe a new form you would like your clients to fill out.  Not just for your benefit, but for your clients, your employees, coworkers, vendors, and your family.  It just might change the way you see the world.

Genuinely Impressed By Rosenfeld Media

Let me start off my saying that no one is paying me or asking me to write any of this (or blackmailing me for that matter).  A few weeks ago I participated in Rosenfeld Media‘s UX Zeitgeist and purchased their first published book Mental Models, by Indi Young around that time as well.  Rosenfeld Media is the new kid on the block for publishing houses, but I’m a fan of books written by co-founders of Adaptive Path (Observing the User Experience, Subject to Change, The Elements of User Experience, you get the idea).

I really enjoyed everything about my interaction with this company.  During my participation in the UX Zeitgeist I had a few questions for them and received really quick responses from Lou Rosenfeld, the company’s owner.  When I ordered the book, you also receive a copy of in PDF format (at no extra charge) so you can instantly start reading while you wait for the paper version to come by mail, that’s smart.  As they were working up their plan for publishing obviously someone realized that people would actually be reading the PDF documents on the screen because you can tell they were definitely optimized for screen display.  Seriously everyone; the book is amazing.  When the mailed book came (a few business days later) I was amazed at the thickness of the cover and the quality of the print.  Amongst all this praise for Rosenfeld I have to extend my hand to Indi as well for such a quality book.  Her concepts on really getting into the heads of users are amazing, and as I continue my way through the book you can expect a full review when I am finished.  For those of you interested in the book now, Rosenfeld Media is offering a special 10% discount to you, my readers, because I told them I’d be writing about my positive experiences and enjoyment of their first book.  Just order the book from their site, and use the discount code FOKNIGHT during your order to get the discount.

Rosenfeld Media’s next book is Web Form Design by Luke W., a person familiar to most of you I’m sure.

This is definitely the publishing company to keep your eyes on if you are a designer of user experiences.