Archive for September, 2007

Content, Content, Content

September 25th, 2007 5 comments

A few weeks ago I had the *great* pleasure of seeing Edward Tufte present on Data and Information. For many years I’ve had his books on my “to buy” list but when the RUMies organized a group to see him live, I just had to be there. Based on the conversations on the list and what I’ve heard elsewhere, my expectations were high – and they were exceeded; if you ever have a chance to see ET, take it. His delivery style is quite something and I found myself scribbling down a ton of notes.

ET opened with one of the most stunning things I’ve ever seen – the Music Animation Machine (see some examples here and a discussion on Tufte’s site here). Though I’m not musical and I’ve never played an instrument, I immediately knew what these images meant and represented. The movie was the epitome of design; the screen wasn’t cluttered and nothing in the display could be removed. This example led us into one the central themes of his presentation: whatever it takes to explain the content is the proper display. In other words, content is king, content should determine the display (content driven design as it were). Don’t begin with a specific display approach, start with a content problem and do whatever it takes to explain the information.

Though this was the most prominent idea that I took away, there were a number of great concepts throughout the day. This list is hardly exhaustive but should give you a sense of what ET is all about.

  • Details lead to credibility.
  • There is no such thing as information overload, just bad design.
  • Eliminate clutter.
  • Great design disappears, it gives itself up to the content.
  • Super graphics can be extremely useful.
  • Every paragraph, chart, etc. should lend credibility to your argument and give your audience a reason to believe.
  • There is no one “right way” to display data – try a few different approaches.
  • The sports and financial sections of your newspaper are filled with great examples of table design.
  • Tables are nearly always better than graphics.
  • Don’t get it original, get it right.
  • Don’t under estimate your audience – don’t pander or patronize.
  • The principles of analytical design are the same as the principles of analytical thinking.

Though ostensibly about visual design, much of what ET had to say applies directly to presentations (from both sides of the podium), a topic that he touches on near the end of his seminar. If you are a consumer, you should be very wary when the presenter won’t share his data. As soon as you hear words like “proprietary” and “confidential” you can be assured the data is cherry picked, a crime second only to outright lying. Of course when you’re presenting, be sure to shed light on the data – this will do wonders for your credibility. Speaking of presentations, you owe it to yourself to read through ET’s breakdown of the key PowerPoint slides concerning the damage to Columbia. Pretty powerful stuff.

Tufte spent a fair amount of time discussing sparklines, a “small, high resolution graphics embedded in a context of words, numbers, images.” The prototypical example would be a stock performance chart though Beautiful Evidence is full of examples. It’s quite something to see just how much data can be expressed in small areas yet be incredibly easy to grasp. And there are a number of ways you can generate these for your own data!

I could go on and on but I don’t want to bore my lone reader. To say I walked away impressed is an understatement; if you have a chance to see ET, do not hesitate. Just watching him present is worth the price of admission.

Categories: Talks, Usability Tags:

Reflections on RWE

September 20th, 2007 1 comment

I’m a little tardy in getting the Rich Web Experience written up, I hope you’ll forgive me. First off, I just want to thank the attendees – what a great audience! They were very engaged, asked a ton of great questions and really made for a fun few days for the speakers. In an neat bit of coincidence, I met Josh Holmes from Microsoft on the plane out to San Jose – we spent most of the ride talking about Silverlight though his trip to Crested Butte was quite something! Anyway, I hope Molly Holzschlag is feeling better; her presence was missed but at least the opening panel managed to make InfoWorld (you can’t spell filibuster without Scott Davis :) ).

Having no talks Thursday, I settled in with a full helping of Bill Scott and Doug Crockford. Bill introduced Protoscript, a “simplified scripting language for creating Ajax style prototypes for the Web.” I thought it was a pretty interesting tool and something that could really help those of us that build UI mockups (read more here). Doug talked about, you guessed it, JavaScript a topic near and dear to his heart (check out his stuff on YUI Theater to get a taste of what you missed).

Friday I had to go to work! I opened up with my Designing for Ajax talk which was a hit. My audience was just fantastic – they asked a ton of questions and I had a real blast with this talk. From the comments I got afterward it sounds like people learned a bunch and had a good time. Later that afternoon I gave Deconstructing Prototype for the first time and it went pretty well I think. Bill’s Antipatterns talk was great; it just amazes me that some of his examples ever made it out to the real world and I applaud him for being able to turn a critical eye towards his employer. That afternoon I taped a short video on UI/JavaScript etc. that will someday find its way to the NFJS site – I’ll be sure to post when it goes up.

Jesse James Garrett‘s keynote was quite something; his slide deck was quite a work of art and had many of the speakers buzzing. He’s clearly a believer in the Lessig/Presentation Zen method; the use of images and words plus the integration of blank screens was worth the price of admission. I also enjoyed the case study from the Netflix folks; they’ve got some great examples of Ajax on their site but what I respect so much is their belief in testing. According to Sean Kane, about 70% of the features his team dreams up never make it out of testing!

During the second expert panel Scott threw out the “what books do you recommend” question and as usual Neal Ford stole two of mine (Dreaming in Code and another that I’m surprisingly blanking on). Needless to say, I’ve got a few things to read in the coming months – here’s a list of what I jotted down to follow up on:

While I really enjoyed the entire weekend, the highlight was Aza Raskin‘s workshop on design. He discussed the “monologue box” (aka JS alerts) along with his solution of transparent messages. His examples of undo on the web were inspirational sparking a lot of discussion. Throughout his talk he showed off Enso and though I love Quicksilver I wouldn’t mind if Humanized ported that bad boy over to the Mac! Aza talked a lot about natural language which lead to the quote of the week:

Trying to remember the command for tar -gvf is like bobbing for apples in a cement mixer.

Aza was good enough to join a handful of speakers at dinner after the show and he even tagged along for a couple of hours of pool. Good thing he and I are pretty close in skill at that particular game…though he did school me in air hockey.

Aza Raskin prepares to defeat me in pool.

Needless to say, it was a great evening and fantastic way to wrap up the conference. Neal and I did our best to recruit Aza for NFJS, he’d certainly be a welcome addition. Anyway, a great show and I’m really looking forward to next year when we’ll have not one but two opportunities to get the web community together!

Categories: Ajax, Software, Talks Tags:

That’s Interesting

September 15th, 2007 No comments

The last couple of days I’ve been involved in what I would essentially term a code review of some things our off shore team recently completed. To say there were some issues would be a bit of an understatement and it has certainly helped cement the need for continuous integration, frequent review, and a strong test suite. While I expected some odd use of inheritance, the empty interfaces caught my eye and I spent longer than I like explaining why YAGNI would be the team’s default position on pretty much anything. But none of that is really worthy of a blog post – that’s just run of the mill coding stuff. No, the real inspiration was this little gem:

public class Constants {
  public interface UIConstants {
    public static final String foo = "foo";
    public static final String bar = "bar";

Now, I know some people think that interfaces are the cat’s meow for storing constants, heck, I even did it once in a past life (I was young, I needed the money) but I’ve vowed never to follow that antipattern again. Don’t just take my word for it – Joshua Bloch calls it out in his must read Effective Java (I for one can’t wait for the updated version). I’ve done my part to eradicate this erroneous use of interfaces but when I saw the code above I was floored.

Frankly, I’m a little surprised it compiles but unfortunately it does. Of course I found myself asking *why* anyone would even think to use this approach. Wait, I can hear it know “we only have one place to go to look for constants and we have namespaces too.” Um, OK, then please explain why there were a couple of other interfaces that were also called Constants and did you catch the whole antipattern comment? Furthermore, explain why you think it makes any sense at all to have an interface as a member of a class. Talk about abusing the constructs of Java.

Needless to say, we extracted those so called interfaces into real honest to goodness classes that couldn’t be instantiated. And for those of you that will complain about how painful it is to write in your code, have you heard about static imports yet? Should you go down this road though *please* don’t go overboard; as the Sun guide says:

If you overuse the static import feature, it can make your program unreadable and unmaintainable, polluting its namespace with all the static members you import. Readers of your code (including you, a few months after you wrote it) will not know which class a static member comes from.

Needless to say, it’s been an interesting few days reviewing this code – I wait with bated breath to see what next week brings.

Categories: Development, Rants, Software Tags: