The Empathetic Mindset

For any engineer reading this, I’m pretty sure at some point in you career, someone has told you that engineers alone are not able to make great products. And I can see they are probably right.

Stereotypical engineers are known to create stuff not suitable for human consumption. Typically, those products either pack a stellar amount of features that are hidden behind convoluted interfaces, or boast some features that only interest like-minded people of the engineers themselves.

But why is that?

Because by nature, humans tend to think for themselves. One’s judgements are always based on his own past experience. When you think about how a certain product feature should work, you’ll naturally search your brain looking for pleasant situations you’ve once had using similar products. For an engineer, he’ll recollect memories with his own favorite products. And what’s the most important and beloved to an engineer? Tools. Tools are what defines an engineer. Therefore, products designed and created by engineers tend to be just like tools – form follows function.

But the problem is, this also means humans are limited by their own experiences. One cannot see beyond himself. One’s own memory is the whole collection from which he searches for ideas. In the case there’s no perfect match, he picks the closest thing possible. For an engineer, who almost always deals with tools, tends to draw references from his favorite tools no matter how the product relates to tools. That’s his best judgement nevertheless.

This gives rise to the common conception that engineers are often not the best product designers. However, based on the facts above, this statement is no more accurate than saying that a inexperienced non-engineer often doesn’t come up with the best product ideas. Typical engineers suck at product design because products are not always meant to be used by engineers themselves. And engineers have limited experience using products not interested to themselves. The same applies to non-engineers when the product is conceived to be used by other kinds of people than themselves. For example, when a non-gamer product designer works on a product targeting to gamers.

So the real question here is not that whether it’s an engineer or not, but that whether one can think on behalf of other people, the target users of the product. That is, to think empathetically.

Thinking empathetically is a conscious process. It’s like self-discipline. It’s what one voluntarily applies to oneself, resisting natural tendency. It not only requires one to actively seek outside of his own experience, but also demands one to greatly expand his experience by trying out many new things, new roles, and new ways of thinking. If you are a driver, try  the passenger’s seat. Only then will you understand what a passenger wants. Just like self-discipline, thinking empathetically is hard. That’s why great products are not common. And innovative products are even more rare.

The empathetic mindset applies not only to engineers but to non-engineers as well. I reckon that it’s the single most important factor that could lead to a great product. And in fact, I believe if engineers can learn to think empathically, they are more likely to become a great product designer than others. Why? Because being able to understand the various details and limitations how a product is built and works can help one form better judgement about how to best put it to work, especially when tradeoffs are necessary. If a certain feature for an iPhone app is so CPU-intensive that it impacts battery life, it’s the engineer who knows it the best. And it’s the engineer that can think of a reasonable alternative as a better design. On the other hand, a non-engineer product designer often needs to understand the engineering details of a product in order to do the same, while it’s probably harder.

It’s not that engineers can’t make great products. It’s people without empathetic thinking who can’t. This has nothing to do with being an engineer or not. Once you learn to apply this mindset to yourself vigorously, everything else will follow.



为无为 事无事 味无味 大小多少 报怨以德 圆难于其易 为大于其细 天下难事 必作于 天下大事 必作于

  1. 难/易,是对”Getting Real“哲学的概括
  2. 大/细,是对Mac(包括iPhone)哲学”polish the hell out of it“的概括

我想,要做伟大的软件产品,参照这两条足矣。要是几千年前有电脑,老子就一定是古代的Steve Jobs了。遂发至Twitter与友共勉。

Interface First:为什么我们学到的一切都是错的


我在读Getting Real的时候,发觉其中一些观点和我在刚开始计算机学业时候的那些“错误”观点出奇的一致。Interface First就是一个典型。




明白了这点以后,我努力克服喜欢从界面开始构思一个软件的习惯,一切从逻辑开始!需要实现的use case是哪些,如何实现它们,怎么做到效率最优,等等。我们为我们程序员写出的丑陋界面感到骄傲,我们提供的是强大的功能!界面?对不起,我们忙着研究算法,没时间考虑这种肤浅的事情!





Getting Real的这一篇短短的文章解释的很清楚。只有看到自己的软件长得什么样,才能不断的完善它,不光从界面上,功能上同样如此。




Ad-haters’ lucky bug

Yesterday my team encountered a quite unexpected bug with the web application we are developing. 

To put it simple, certain pages just mysteriously blanks out when viewed from my Firefox 2.0 and IE7 browsers, which is not repeatable on other developers’ workstations. It was a late bug in our current test cycle and got us nervous.

At first we hardly got any clue. Then I suddenly realized that since I’m a Firefox add-on junkie, the culprit could really be one of my beloved add-ons! Hunting down this clue, we finally got it – It’s the Adblock Plus plugin!

So the story is actually very simple. Those pages which disappears have URLs containing sensitive strings that ABP automatically blocks! Something like “*advert*”. So when I saw them blanking out, they were actually blocked by ABP. And that’s the same story with my IE7, since I have IE7 Pro installed with ad filtering…That’s simply what ad-haters do.

Yeah, I know you would say I should run a clean environment for testing. Our testers do. That’s why they didn’t find this issue earlier and I ran into it. Cheers!

What does a native tab control on Windows look like, anyway?

I came across an article on EclipseZone today that got me to really wonder what a native tab on Windows should look like.

The article takes the tab control of Eclipse for an example.

Eclipse’s editor and view tabs have a gradient-based rendering with the colors drawn from the system primary and secondary colors.

, whereas Eclipse’s tabs will always stand out a bit from the surrounding native widgets.

This actually is a good point. I myself find the curved un-anti-aliased zig-zag looking tabs very funny to look at. But is it actually anything related to non-native-ness?

Think about all the tabbed applications you have used on Windows. Firefox, Internet Explorer, MS Word, Live Messenger, Google Talk, UltraEdit, Notepad++, … God! I can’t even find two of them which have the same looking tab controls! Isn’t that so obvious that it’s funny?

So the only thing wrong with Eclipse tabs may be the geekish looks. People don’t complain about those glossy IE7 tabs anyway…

Eclipse RCP and desktop Java – are we there yet?

I’m currently working on an Eclipse RCP project, which is supposed to be mostly used by non-technical people. Actually in my company today, Eclipse RCP is the de facto technology for building all desktop applications – from developer workbench to everyday necessities. There are RCPs built for programmers, testers, and everyone else. It looks like Eclipse RCP is hitting its prime time. But, is it?

Eclipse RCP, since it was first introduced with Eclipse 3.0 back in 2004, has come a long way through 3 whole years of evolution. With RCP, the Eclipse technology is becoming ubiquitous, rather than merely a development environment. From a developer’s perspective, it’s really a great technology. It virtually saved Java in the desktop battle. It’s well architected, standardized, robust, incredibly powerful to be extended, and like all Java applications, it runs on most platforms.

But with the wider acceptance of RCP and developers going great lengths to exploit its extendability, its shortcomings are being more and more exposed. To name a few, performance and user experience.

To take an example, the next major release of Lotus Notes, release 8, is completely built with Eclipse RCP. Despite its fantastic features, beta testers are unanimously complaining about its sluggish performance and lack of stability. Notes 8 is just going GA today. It’ll be interesting to see how the first batch of end users say about the next generation monster RCP that’s supposed to be lived with on a daily basis.

Another example is Lotus Sametime 7.5. I’ve been using it for quite a while now. Though I love to write interesting plugins for it, I can’t deny that the 3 minute plus load time (on my previous old Thinkpad T41 laptop) I sit through every time I launch Sametime is nothing but like killing myself slowly. It’s a nightmare. Anyway, it’s a chat program, isn’t it?

Another big issue is the very existence of RCP applications on client desktops. First, to run an RCP, you need a JRE, of course. That’s 70 megs for Sun JRE 5.0. Then, various JRE quirks drive developers nuts and some larger RCPs come shipped with bundled JREs in the packages. That’s an extra tens of megs added to the package. Then that’s the RCP platform itself which is over 10 megs. So even without any useful code, the prerequisites account for more than 100 megs!

Today, Rational ships most of the super mega RCP products on earth. A complete Rational Software Architect bundle comes with more than a handful of DVDs. That’s even more than many of the super cool PC games today!

Imagine that you need to run a bunch of RCP desktops at the same time. Each one consumes several hundred megs of your precious memory. More than a few of them refuse to use your system JRE and stick with their own shipped instance. So you even have more than a few JREs running simultaneously. That’s not a happy future definitely.

So what’s wrong with today’s Eclipse RCP? What’s the cure? I’m thinking about a few.

First, great platforms can’t cook the dinner for you! It’s still the developers’ responsibility to control the RCP’s performance and usability! Take great efforts to cut down unnecessary weights. Pay extreme attention to avoid memory leaks. There’s no magic in it!

Second, the consumer JRE is really a late comer. But better late than never. Today the desktop RIA war has already begun. Consumer desktops are being invaded with a bunch of runtimes. JRE, one of the oldest runtimes, really needs to get itself lean to have a chance. Sorry, but 70 megs of installation is simply insane.

Third, great tools can be bad if you put it to the wrong use. Eclipse RCP can build anything. That’s right. But does it have to?

I’m kind of concerned with what the 2007 Eclipse Roadmap has put it for RCP. IMHO, it’s definitely not more functionality, or frameworks that RCP lacks today. There’s still lots of work to do to make RCP and Java desktop truly usable for everyone.

Project Zero: First Impressions

Last weekend, Project Zero officially unveiled its community site. Project Zero is a fresh new project from IBM which aims at the agile web development framework domain which is getting momentum very fast lately with the popular RoR and the promising newcomer Grails.

Project Zero’s tagline is, “Zero complexity. Zero overhead. Zero obstacles.” “The Project Zero environment includes a scripting runtime for Groovy and PHP with application programming interfaces optimized for producing REST-style services, integration mash-ups and rich Web interfaces.”

Zero complexity or not, there are a few interesting aspects about Zero worthing noting.

1. Zero leverages Groovy.
That’s right! Probably the first time I’ve seen Groovy adopted into a project by a major company. Great news for Groovy lovers!

2. Zero supports PHP.
That’s sounds a bit weird. The fact is, Zero has implemented the support for PHP in Java. However, only a small subset of the standard PHP libraries are supported by now. Read the FAQ for more details.

3. Zero is self-contained
What that means is that each Zero application runs only by the Zero runtime. It doesn’t need to be deployed to any web server. The Zero runtime contains a minimalist server based on WAS CE. This is similar to Grails. (But Grails applications can also be deployed to any JEE server.)

4. Zero is NOT open source. But it invites the community to drive it.
Community-Driven Commercial Development is Zero’s official name for its development approach. This is already causing a lot of debates in the community. Let’s wait and see how this will work. Check out the official FAQ for more details.

Overall, Project Zero looks like an interesting endeavor from a major player in the industry to commercially challenge the world of agile web development. But judging from what it looks at this stage, I’m not 100% convinced if Zero has got everything right.

Next time, I’ll write up my first experiences playing with Zero, and putting it up against Grails.

10 ways to kill your star programmer

1. Make them project managers.
2. Make them managers.
3. Enroll them in all kinds of full-length time-consuming leadership classes.
4. Ask them to attend numerous stupid meetings and conference calls on behalf of the team.
5. Ask them to spend a lot of time sorting out various best practices and coding guidelines that will never be read or used by anyone else.
6. Bug them with licensing concerns with every code library they want to use.
7. Ask them to submit purchase request for software they want to use once a year. If they miss the time, they have to wait another year.
8. Lock them in the project important for your promotion and reject their requests to leave the project because they think it’s boring.
9. Reject their requests to travel to tech conferences they are dying to attend so that you can balance your quarterly cost.
10. Tell them you love them so that you can keep their pay low without feeling guilty.

Second Life – hype or crap?

Second life is a crap. Because

1. Second life is using a crappy 3D engine.
Even the Quake3 engine from 8 years ago is far superior than this crap.
Some people get excited that they can “fly” in SL. Are they kidding? If flying is a feature, then I’ll call the ability to bury my body into the earth while walking another fantastic feature.
Some people claim that SL has magical scriptability. Wait. Is 3D engines supporting scripting and custom modeling a new at all?

2. Second life is a crappy software which crashes every time I try to exit the program.
Yes, that’s true. And don’t argue with me about that.

3. Second life is pointless.
So the SL huggers say SL is NOT a game. Alright. So what? People shouldn’t judge SL with criteria for games?
I don’t care if it’s a game or not, as long as it has a point. People just get curious about this brand new 3D metaverse which others keep talking about. They want to see for themselves what it’s like. So they create an account and choose an ugly avatar. They start from the training island. They learn how to walk and how to fly. They complete the tutorial and, now what? Exactly. No point from then on. I don’t have a reason to convince myself to explore the wacky islands there and waste my 1st life.

Second life is a hype. Because

1. Grandpa/Outsider/Pretender corporations hug SL to show off their geeky side.
SL huggers claim that SL is so wonderful that the corporate world loves it.
Yes, corporates are loving SL. See who’s on the top 8 SL corporate site list Reuters, Cisco, Sun, …Wait, where’s Google, or Yahoo!, or Microsoft? Now that SL is so wonderful, why don’t I see any serious software and internet company dwelling there?

2. The huge media hype is due to the domino effect
The mass media is amateurish and has always been a pretender about technologies. Some day one press begins with SL. Its competitors have absolutely no idea about the “metaverse”. Yet they mindlessly join the hype just because they are so worried about being left behind about the new hot “techie” stuff. That starts the domino effect and after a while people forget how this began in the first place.

3. More people are not visiting Second Life after the first few times
Latest report shows that SL is losing regular visitors at a considerable rate. Sorry I can’t find the link to that article now. I’ll add it once I recover it.
SL is getting more and more one time new visitors, and fewer and fewer regular visitors. This is typical of a hype phenomenon. When the hype is fading, the long tail shows up.

To sum up, Second Life is both a hype and a crap. But don’t get me wrong. I believe the metaverse is the future for the internet. But metaverse!=SL. The mode of metaverse that I believe will dominate the future will be the one which replicates the real world instead of a pointless chaotic one. In a replica metaverse, one can take virtual tours to every other corner of the world. They do things they actually can do in the real world. At that time, surfing the internet will simply be an extended experience of real life. And there’s no reason why it shouldn’t be like that.

Tech-savvy? Biz-Savvy?

An IBM development VP recently answered an interview. One of the interview questions was that what suggestions he’d have for the mass of developers for them to become successful in their careers. The VP mentioned that one important factor was to become biz-savvy.

Well, I believe this holds true for the typical developers who enjoy caffeine and coding through the nights. They do need to look beyond their Dilbert stereotype and become a little bit more biz-savvy if they don’t like pointy haired bosses to rule them.

But that also depends on who you are now and who you want to be.

I have personally seen more than a few great developers who shows excellent technical potential, and yet decided to do more business. They just became mundane business people.

This is especially a problem with the highly thriving and restless atmosphere in China. I grew up as a typical technical guy. So I can understand this increasingly heavy pressure from unnamable sources to developers. There are people who are making a lot and lot of money out there, by simply doing “business” stuff. Yet, developers are required to sit in small cubicles staring at computer screens all day while their bosses often don’t show enough respect to them.

This is a different story in China than in the US or other western countries. In China, young people have to fight for existence first. Young graduates coming fresh out of school are pressed to find better paid jobs. Their families have spent years of family income for their education. The government doesn’t pay for their unemployment. Their parents have retired, with little pension. Housing price has been skyrocketing. They will have to work for almost an entire life to afford a simple apartment. Everything is about money.

Yes, and it seems that the highest paid positions are in doing business. Everyone is talking about successful entrepreneurs. Everyone wants to do management.

I have interviewed dozens of students. And I can feel that for many of them, the sheer passion in technology is the least likely reason that they choose to become a developer. The valid reason is simply that being a developer has a steady pay at the moment. And many fresh employees eagerly seek to become “biz-savvy” even before they become “tech-savvy” enough. Because they believe they see more money in that.

What’s the problem? Why are less-than-2-year-experience developers crazy about executive biographies and fancy marketing stories more than ingenious technical stuff? Why do CS majored students long for consulting jobs where software productivity is sarcastically measured by lines of code?

Someone has to fix this problem in China. And I believe it’s the employers themselves’ responsibility to do so. Treat your developers fair first, before you even dream about your master business plan. Without the tech-savvy folks, nothing will be realized.

Browse Happy logo

My tweets

« 八    



Fancy Stats