Saturday, October 20, 2012

UI research question: Do old users become conveniently blinded by radical new usability improvements ?

A few days ago I posted this question over my Twitter stream, syndicated to my Facebook account. I got a few responses:



Recently, we had made an internal release at my current company of a new version of our flagship product. The version introduced some prominent user interface related improvements, along with other core improvements. The usual way we introduce a new version is by sending an e-mail to all internal users, highlighting important, and enlisting other changes introduced. The e-mail ends with a link to the internal Wiki, that has more detailed information as well as further links to the setup / update builds. Being a small group, we also arrange a subsequent demo / one-to-one meeting with each internal user to explain the new features and take 'instant' feedbacks.

Time and again, I have observed a few things:
  • People almost always do not read the e-mails properly. At-most this is what they do:
    • The e-mail has come from me
    • The subject line says 'updating ... ' or 'new ...'  (don't even care to read the version number, and sometimes even don't care whether 'update' or 'new' is mentioned)
    • Skip the mail straight to the Wiki link
    • And click straight on to the Update  / Setup link
    • Continue using the product as usual, oblivious of the fact that there are tons of improvements we added (and which I meticulously mentioned about in the e-mail!) to make your life easier
    • Shout at me if something goes missing (OK, I made that up ;-))
  • In the subsequent demo / one-to-one meeting
    • 'Oh that's a cool feature..', 'That's very useful..', 'You removed this feature??!!', 'Oh this way is better!', 'You suck, how can you change the way I work?'
    • And, at the back of my mind, I am always thinking : I listed all this in the e-mail I sent you before. Sure, a demo is more engaging, but I thought people always read my e-mails, as obediently as I read theirs!
Now, all this is probably not new to people working in product development for long time, but to me this is quite a learning experience. At the same time, I had this question at the back of my mind, 'Do old users become conveniently blinded by radical new usability improvements?' To that, I got an affirmative answer as a result of response to some of the recent UI related changes we brought into our product. Although the changes were quite prominent (at-least that is what we all in the dev-team thought), these were completely ignored by almost everyone, until we told each of them about the new changes. Another, curious observation was of one the respondents I know closely and is a colleague at my current company. He recently switched to using Windows 8 Pro from Windows XP. Though he liked the new interface, he took pains to make the installation look like his old XP interface, rarely ever uses the 'new apps' and is almost always glued to the desktop. He even didn't think of giving time to adjust to the new interface, just ignored it.. and that too from a person who uses a Windows phone!



All these observations are either solitary or statistically in-significant to make any far-reaching conclusions. But they are definitely pointers to me to curate the way I work in product development. I would definitely love to hear from more experienced people of their thoughts on the same.

Obligatory NoteAlthough the current post directly relates to my day job, this post and its contents is in no way endorsed by my current employer and is solely my personal view point.

Thursday, October 18, 2012

bit of fun with C++ virtual functions

#include ...
class A {
public:
   A() {  f(); }
   virtual void f() { printf("A func!\n"); }
};

class B : public A {
public:
   B() : A() { }
   virtual void f() { printf("B func!\n"); }
};

int main() {
   A a;
   B b;

   return 0;
}

I had written a code similar to the above template. I had naively thought that the above code will print 'B func!' when the instance of B is created. However this is not the case. I guess the issue here is that if you tend to call a member function that is virtual from a base class constructor, the base class implementation will be called as the v-table initialization has not yet been done (this is at-least the case with g++ compiler, not sure how other compilers work). This is further clear when you try and make the function f() in base class A pure virtual, the compiler complains with an error.

Have fun!