NOTE: This blog has been moved to http://www.looksgoodworkswell.com

Saturday, March 31, 2007

Yahoo! Teachers and the Yahoo! Gobbler

In my last post I said that I was putting my head down to work on something at Yahoo! that I believe strongly in. Strongly enough to set aside my evangelism role and focus on a single product within Yahoo!

I am glad to say that I can now freely, publicly talk about what I am now doing at Yahoo!

On Thursday, at the National Science Teachers Association in St. Louis, we announced that a new site, Yahoo! Teachers will go live at the start of the summer.

Before I explain what it is and why I think it's cool, let me go back a little in time and talk about this scrappy team within Yahoo! that wanted to "hack the educational system."

Last summer we held a Yahoo! Teachers of Merit camp on our campus in Sunnyvale. We invited about 60-70 teachers to come spend 7 or 8 days with us. The first couple of days was about how teachers could take advantage of the web and of course we talked about things like delicious and flickr as well as Yahoo! Groups. But beyond that we gave them some new tools to gather, organize and share information with teachers around the world.

One of the key tools was the Gobbler, an idea conceived by Karon Weber (formerly of Pixar) and others. Just two weeks before the camp and one week after I created the carousel the team did not have the gobbler built or even started. I was simply an occasional consultant on the team (in my role as evangelist). Prodded by Samantha Tripodi (lead designer), I took the next 3 days to try to bring the Gobbler to life. Fortunately I was able to do so. And by the time of camp I had a good enough version of the gobbler to unleash on the teachers.



I recall the first time the teachers saw the gobbler in action. I was sitting in front of the room and I heard a room full of teachers gasp (literally). They were surprised you could do something like this. They immediately got it. And saw how it would help them gather knowledge from the web and share with other teachers around the world.

Ok, so what is it?

The gobbler is simply a widget that you can popup on any web page and just grab text, images and links from the page and drag and drop them into your Y!Teachers projects. (You can also bookmark the site as well).

Its a little like Google Notebook, bluemark, clipmarks and other clipping services but it is a little unique. First, you can simply tear things off the page with drag and drop. Second, when you drop things from the page into the gobbler you are dropping them directly into your projects within Yahoo! Teachers. They get immediately saved there. Third, the assets you drop are thus brushed with meta data from the project itself (like grade level, subject, state standards). Fourth, the projects (and the assets) are then shared with any teacher anywhere in the world that is part of Yahoo! Teachers.

The combination of gather (gobbler), organize (projects) and share (teacher network) creates a powerful combination.

As always seeing it is the best way to understand it (sorry the sound is a little quiet... will repost later with better sound).



This week at the NSTA, we showed Yahoo! Teachers and the gobbler to hundreds and hundreds of teachers. The response was overwhelmingly enthusiastic about both Y! Teachers and especially the gobbler.

I am glad that almost 10 months after creating the gobbler I can finally talk about it :-)http://www2.blogger.com/img/gl.link.gif

And in a just a short amount of time teachers will be able to use these tools to make their job a little easier.

If you or someone you know is a teacher, head over to Y! Teachers and sign up for the teacher network... we'll notify you when the full site goes live.

Catch photos on flickr:

http://flickr.com/photos/thescottclan/sets/72157600043667255/

Sunday, February 18, 2007

Ajax 101 Presentation

Just posted my Ajax 101 talk on slideshare.

I have given this talk in a number of venues starting in January 2006 with Adaptive Path in the Designing & Building Ajax Workshops we hosted in LA, Austin and Amsterdam. I also have given this within Yahoo! for internal training as well as for VeriSign, Federal Reserve, Ultimate Software, United Online and others.

To me understanding web development starts with understanding event handling, model & data services and how to manipulate the DOM. This mental framework is used in this talk (it follows the Model-View-Controller pattern from SmallTalk-80 days).

Enjoy!

Saturday, February 17, 2007

New Role: In the Trenches

So as the new year came round I start re-evaluating what it was I wanted to do at Yahoo! I have had an amazing 1.5 years here getting a chance to launch the public design pattern library, doing evangelism for Yahoo!, creating some components and working on some cool projects inside Yahoo!

As I looked at 2007 I could see that a number of opportunities still existed for me to go out and speak. In fact I had about a dozen events already in play through the middle of June.

Sometime last year I began helping (part-time) with technology and design consultation for a new Yahoo! site. I am not at liberty to announce the product at this time but at the first of the year I was offered the chance to become the engineering manager for this team. The product is an awesome idea and it promises to "do good" for our society. So with a passion for the goal, the product, the team and the challenges, it was a no-brainer for me to decide to step out of the evangelism role and take on the challege of putting into practice all the things I have been talking so much about. It's time to get in the trenches!

I am leaving a very talented evangelism team to join another extremely talented team that I feel honored to work with here in Sunnyvale. The current engineering team (in Bangalore) is doing an incredibly awesome job getting the first version of the product ready.

My management graciously offered (even encouraged) me to continue my speaking adventures. But I decided that in order to have sanity in my life and in order to do the best job for the product I would pull back from speaking and put my head down into this project. I subsequently canceled most of the events lined up and at this point I think I only have one event left to speak at this year.

I am considering taking the material from my talks and putting it into a book or ebook. But in the meanwhile I think the best thing is to start writing a series of blog posts that capture the current thinking I have on the topic of design patterns, principles and practices. Also I will be posting my RIA Best Practices talk from the Web Apps Conference in Monterey, CA on slideshare.

The other big news is Yahoo! was fortunate to have recruited Christian Crumlish as the new Yahoo! Design Pattern Curator. Watch the yuiblog and the ypatterns site for cool stuff coming out from Erin Malone & Christian!

Sunday, January 28, 2007

Carousel - 0.4.0

New release of carousel. More documentation, better runtime configuration support, methods that let you show, hide and recalculate size.

Check it out at the carousel site.

Wednesday, January 24, 2007

Slideshare

My friends Rashmi Sihni & Jonathan Boutelle recently released a really cool product, slideshare.

Simple idea. Think youtube for presentations. Upload a PPT or PDF, it converts it to individual slides that can be bookmarked, linked to from a blog, tagged, commented on, etc. Cracks open presentations so they can be searched and really makes it easy to find.

You can see one of my talks here:



Hopefully they will support keynote in the future as well as some ways to handle animations/transitions. But even without this it's a great place to find recent talks.

Saturday, January 06, 2007

Easy 7 Conference - Bangalore

Having a wonderful time in Bangalore. Due to the excellent Yahoo! Bangalore staff, my friend Sameera Gopalakrishna Rao who is here on holiday and the excellent Easy 7 Conference I had the opportunity to speak at yesterday.

Easy7 is a SIGCHI-SI conference held annually in Bangalore, India.

Being somewhat ignorant of the design community in India, I was not sure what the makeup or size of the audience would be. I was pleased to find out we had a sell-out crowd (I think it was around 150 attendees) and they turned away 50+ others due to venue size. And talk about an incredible venue! The Leela Palace Hotel looks literally like a palace with 9 acres of lush gardens. And beautiful weather to match.

What I really enjoyed was the audience participation. After each talk we gave space for Q&A and the questions were passionate and insightful. The in-between hallway conversations were interesting too as India rapidly moves into not just being a place for offshoring but a place for innovation (this has been going on for a while; It is just more real to me now).

Jeremy Ashley, VP of Application User Experience, spoke on Debunking the ‘Ultimate Design Myth’. It was a really great talk that removed the idea that the best design comes from a design diva locked in a room for 24 hours. The truth is good design is hard work that takes moments of inspiration followed by lots of hard work. Surya Vanka, Manager User Experience Excellence at Microsoft showed his iterative product lifecycle chart as a the ooh-aah-wow! model. After research with users there comes that moment of ooh! of understanding the user's plight. Followed by moments of deeper understanding as the product is refined & tested. If done right it ends up as a 'wow!' for the user.

Sarah Bloomer gave two talks. The first was a really great look at the process of designing interfaces. I really enjoyed the talk as I have the tendency to be more ad-hoc and found it to be a good refresher as well as a challenge not to forget some fundamental techniques. Her last talk was on a survey of what tools & methods were commonly used by designers. A few surprises card sorts & patterns ranked lowest. Wireframes of course topped the list. The most valuable tool? Talking to & observing live customers. No surprise, but quite often skipped. Sarah is a gifted communicator. I don't believe she has written any books, but certainly if she chose to it would be a great asset to the design community.

Back to Surya. Surya is an incredible speaker. He gave two short talks. The first talk was on Design Led Product Innovation. Examples he cited in Microsoft Vista were the Ribbon Bar (which does a great job of employing Focus + Context), the magic corner for 2007 provides all file related commands as well as recent files (the difference is in the display treatment of the rounded corner button and the actual menu window that is not bound by traditional menu sizing), and the send a smiley which allows real time digg-like voting for whether you are having a good user experience at the moment or not.

Some of the points he made:
  • Virtuous Feedback Loops. Example: Send a Smiley.
  • Deep Evidence. Using innovative technical solutions to gathering meaningful metrics.
  • Simplicity is Hard But Worth Striving For
  • Instead of FindAndUse it's now UseAndFind. This is the basis for the Office Ribbon Bar. With the incredible growth of features (which contrary to popular belief are needed to satisfy the wide audience) the Ribbon Bar took the approach to let the user USE the product and FIND out along the journey the commands as they need them. The old way focuses on the tools. The other on the flow.
  • Constraints are Opportunities
  • Details Matter
  • Lead with Design/Validate with Data. I like this one in particular. This combines the interaction design approach of Alan Cooper with the detailed testing rigor of Jared Spool.
  • Keep the Engine Under the Hood
  • Don't Sacrifice Clarity for Depth


His second talk was on being a Change Agent (his unofficial title). This was
If you get a chance to hear Surya in the future I would highly recommend making the effort. I really liked the emphasis on understanding the culture and working within it, finding its values and using it to make the right changes.

My talk was on Designing for Ajax. I continue to give this talk in its various forms (I think I have given that talk 30 times since last January.) I am happy to report that it was very well received. I think most people appreciate the plethora of examples that illustrate the design principles. Sort of like a visual encyclopedia of current interaction patterns.

You can find my talks at billwscott.com

You can also see flickr photos of the easy7 conference.

Thursday, December 21, 2006

In the Flow: Scrybe

Someone pointed me to a new product that is in limited beta release. It's called Scrybe. And all I really have right now is the YouTube video demo of the product (on their main page).

But what little I have seen, I really like.

Fluid Context
This is the terminology they use to describe the principle Xerox PARC described as focus + context, or information in context. At Xerox, they produced the hyperbolic tree, the fisheye and the lens approach as ways to dynamically show the current focus within the larger context of data.

In Scrybe, they use this approach in their calendar application.

Scrybe Calendar Fisheye

This is the same approach Laszlo took in their calendar demo application

Laszlo Calendar Fisheye

But there are a lot of nice touches they make to the calendar:
  • Simple add button within the expanded context
  • Busy/Free timeline legend for each expanded context
  • Very simple drag drop for moving events around

Scrybe Calendar Addevent

Scrybe Calendar Dragevent

GlobalTimez
I like the fact that time zone visualization is integrated into the product. Almost all calendar pickers, date pickers, etc. seemed to assume that user never goes anywhere else or doesn't work with folks in other time zones around the world. Though it is simple, it really helps in scheduling meetings around the globe. They integrate it with the date picker, a timezone map and within the timeline in the calendar.

Scrybe Calendar Timezone

Scrybe Calendar Timezone Map

Scrybe Calendar Timezone Strip

Why is this important? Again you have the information within the context you need it. Minimize flow interruptions is a key principle.

The TODO list looks simple, you can drag tasks to calendar days to assign it a date... I like the touch of you drag it to the day, the tooltip tells you what date it registered and when you drop it it flies back to the todo list with the date associate. Nice touch.

Scrybe Todo Drag 2

Thought Pad
This seems like a nice tool for gathering your thoughts as you surf the web. The idea is to make it easy to collect while you are in the flow of surfing. This is the theme of their products... How do people work, what is their flow, how do we keep them in the flow.

Scrybe Thoughtpad

Paper Integration
Yep, you heard it right. They make it easy to print out your calendar, appointments, tasks and take it with you on paper. This is so often overlooked. When I worked at Sabre I recall a conversation with Quantas Airlines. One of their big gripes with our incredibly detailed scheduling application was with what it printed out. It turns out that a lot of the users of the schedule got a printout and it went with them all over the airport. We had never considered how to format (nor had the gantt component vendor) the schedule for convenient paper transport!

Scrybe Paper

So, I haven't used it yet. Might be different mileage once I get into the beta.

But the bottom line principles I see at play are:
  • Keep the user in the flow.
  • Bring tools into the user's context
  • Keep information in context
  • Tie information to interactivity
  • Make all objects on the screen intuitively interactive
  • Be nuanced in your simplicity (some animations, but extremely well done)


You can see more photos on flickr.

Tuesday, December 19, 2006

Me on Google Earth!

Ok, the ultimate vanity search :-)

Back at Foo Camp, O'Reilly contracted to have a plane fly over and take 3" resolution images for inclusion in Google Earth. It happened on Saturday, the first full day of camp.

O'Reilly Foo Campus

Gregor Hohpe from Google & I decided it would be cool to lay out on the lawn and let the plane get a good look at us sprawled out on the campus. I tried to convince him to lay with his legs together and his hands spread out above in the form of a Y (for Yahoo!) but he didn't bite ;-)

Here's a closeup shot of us on the campus. I am the one outlined in red, Greg is in blue.

Bill at Foo Camp 2006

If you care to check out the Foo Camp shot, it's located at:

Latitude: 38°24'40.46"N; Longitude: 122°50'25.59"W

Wednesday, November 22, 2006

Foo Lessons: Kamishibai

Back in the summer I had the opportunity to attend Foo Camp '06 at the O'Reilly offices in Sebastapol, CA. Foo Camp is a loosely organized gathering of folks that O'Reilly invites to flock together for a weekend of discussions, impromptu sessions, etc. Obviously a lot of interesting people (writer/producer of MacGyver series, engineering creator of the Osborne Computer, flickr folks, Jeff Bezos of Amazon fame, and so on...).

One of the interesting talks that I attended was on the Japanese Storycard Theater. Dave Battino billed it as PowerPoint for People.



It's based on traditional Japanese picture-card dramas called kamishibai (paper theater).
Today's kamishibai has evolved from a form of street-storytelling which was popular throughout Japan from the 1920's into the 1950's.

The kamishibai storyteller was also a candy seller. Riding a bicycle equipped with a small stage for showing the story cards, he would enter a village or neighborhood, dismount and loudly strike together two wooden clappers or allow a lucky child to do so. The sound was a signal for children to run from their homes and gather around him for story time. Those who bought candy got to stand nearest to the stage. Then, in a dramatic manner, he would start to tell 2-3 kamishibai episodes. He would not tell the whole story! The stories were told as continuing serials, that is, he would always stop at an exciting moment, leaving the children impatient for his next visit.

From: http://www.kamishibai.com/background.htm

The idea is really simple. A story is a simple stack of large illustrated story cards. The stack is presented so that the front card facing the audience is the current place in the story. On the back of the last card of the deck is the dialog for the illustration on the front card.

Really simple idea. Instead of having to twist your neck to read the text, you simply glance down at the dialog and a miniture version of the illustration. The trick is placing the dialog at the correct location in the deck instead of directly on the back of the card it goes with.

Why is this important?

The Power of Engagement
It allows you the storyteller to stay engaged with the user. Making eyes with the audience is a powerful principle. Think of how many times you have seen a presentation (I have done it many times myself) where the presenter is constantly twisting their neck or turning their back to the audience to see the presentation. It's easy to lose interest while their back is turned. Watching kids respond to a kamishibai presentation versus a typical library book reading lets you see the benefit of this approach. Kamishibai keeps the kids attention, may book readings lose the attention as the reader cranes their neck to read the story. With kamishibai, the storyteller can concentrate on the drama-- the story instead of the technology.

In the world of conference speaking some of the problem is in the very way that conference presentation technology is arranged. Singers have long employed speaker technology arranged in front of them (monitors) that allow the singer to hear themselves and therefore perform more confidently. This would be a nice addition for presentations. Projecting the same material along the back of the auditorium would allow presenters to always face their audience and receive the assurance that the right material is being displayed, timing their talk with the material (this is done in some venues, but rare at conferences.)

The Beauty of Simplicity
Now I use a lot of technology in my presentations. I employ embedded movies and animation. I like this. And based on feedback, others have enjoyed this approach. But there is an argument to be made for simple presentations. Dick Hardt of Sxip Identity has a wonderfully simple presentation called Who's the Dick on My Site. It just employs single words or phrases that are perfectly timed with his talk. During the talk, Dick does not look at his presentation. He simply talks and the presentation reinforces his story.

I work with Karon Weber a designer at Yahoo! (formerly of Pixar). One of the techniques that Karon has employed in presenting her designs at Yahoo! is to use large (and I mean large, at least 4'x6') poster boards each telling part of the story. Instead of wireframes locked inside a computer, they are set free in this large format. In our current war room for a product we are working on it is fully decorated with these large poster boards. It of course does not dispense with the electronic (they are the source for the poster boards), but it makes the presentation of these ideas completely accessible to anyone who walks into the room (or hallway).

The beauty of this approach is that it is highly practical and completely simple. It is focused on telling a story. It is in the spirit of Kamishibai.

The Power of Good Transitions
When Dave Battino told us a story in the Foo class, I really enjoyed how he transitioned between cards in the story. If there was a quick sequence of action, he would rapidly switch the card. If the hero was in trouble and he wanted to build suspense he would slowly...drag...change...cards... Sometimes the slide was left to right, sometimes it was over the top. But it was effective. How many presenters have gotten enamoured with transitions between their slides and pulled out all of the stops. "Hey, it's in Powerpoint, why should I use the fizzling, spiraling, flipping effect??" Yet, with just a quick flip or a slow drag, the story was enhanced in the kamishibai method--not the emphasis. In my talks on cinematic effects I have talked a lot about the temptation to over emphasize these effects. Making transitions too slow, too long, too vivid, etc. I have often advocated the "cut in half" rule I learned from a member of the Motion Graphics community...

Take the effect, transition, luminence change you have enstated and cut the effect in half.

Transitions are for enhanced communication and engagement... Not for the sake of the effect alone.

Happy Story Telling!

Tuesday, November 21, 2006

Pattern Library: Interactive Games

Eelke Folmer, a professor in the Computer Science & Engineering Department at the University of Nevada, dropped me a note about his work on a pattern library for game usability & game accessibility.

You can find the two libraries at:

http://usability.eelke.com
http://accessibility.eelke.com

Some of the interesting patterns include: Freelook (giving the user freedom to look around independent of where they are currently heading), Instant Replay (allowing users to lengthen their enjoyment of a particularly exciting accomplishment, and Playground (which allows users to experiment without the fear of death.)

Freelook is just a good pattern for any web application. Let the user have freedom to explore the interface without having to directly leave the mode they are in. This could be accomplished on a web site by things as simple as lightweight tour modes (employing lightbox effects).

Instant Replay may not be as applicable to a web application but it follows the principle of letting users get the fullest enjoyment from an interface.

I think Playground definitely has its place in applications. The user needs to feel that they can experiment with their interface without the "fear of death." Which means the user should be able to experiment with the interface without getting into a mode they cannot return from (captured!) or committing a command they cannot reverse (death!) Obviously this is challenging as it requires some level of undo or intelligently placed confirmations (in contrast to idiot boxes that tell the user the obvious) preventing the user from falling off of a cliff.

Friday, October 13, 2006

Question: How has your background influenced you as a web designer?

As you probably know (if you read much of my blog) I tend to focus narrowly on the world of user experience and user interface engineering. My passion is building great user experiences with a special emphasis on the web.

I was having a hallway conversation at UI11 with Joshua Porter. Lots of fascinating discussion (during which my voice finally played itself down to a rasp). But one of the things that I took away was a renewed interest in reading outside my field for inspiration for my field. You know learning from other crafts to inspire my craft. (In a separate article I will publish my reading list.)

I had started thinking along this line earlier in the year. In fact, Brian Kromrey (Yahoo!) and I were tentatively planning to convene a panel of Yahoo! interaction designers carefully chosen to represent very different design backgrounds. Backgrounds in design from gaming, industrial, motion graphics, theatre, software, comics, and so on. We had tentatively called it, "A Different Box of Tools." Since most of us did not start out as interaction designers/information architects/web designers our craft is certainly enriched by this varied tapestry.

How has your former design training influenced:
  • The way you solve problems?
  • The way you document solutions?
  • The way you communicate design?
I'll go first.

Solving Design Problems
My strong background in software architecture led to a passion for clear vocabulary and a deep appreciation in the powerful nature of patterns. The famous Design Patterns book for software was formative in the way I thought about solving problems. No surprise that patterns make up a lot of the way I approach design today.

My exposure to the agile community (eXtreme Programming in particular) reinforced the principles of simplicity, iterative problem solving, and pairwise-thinking. Not surprising that I value doing the simple thing first, communicating via the design in the simplest manner to start with and adding the effects as needed to tune the interface. Iterative problem solving is key to good interaction design. Having the user and other stakeholders early in the loop and rapidly iterating to a solution is critical. Pairwise programming (although I confess the religious adherants of this practice almost made me loathe this approach) can be seen as a reason that I latched onto Alan Coopers "designing in pairs" approach so easily.

Documenting Solutions & Communicating Design
Agile software approaches taught me the lesson to only document what others will read :-) Another way of stating this is who are the users of your documentation? That will determine what and how you document. This has influenced me in trying to keep documentation simple or create tools that make it feel more lightweight. My engineering background also taught me what developers need in documentation, so my background has helped me create solutions that can bridge the gap between design and development.

That's enough for me. Now it's your turn!

Share Your Lessons
So why not share? How about stepping up and telling me how your passion for art or your training as a clown or your training as an architect has crafted your craft. We could all learn an amazing amount from each other.

The Best Way to Communicate Patterns

Pleased ignore if you already syndicate the yuiblog.com.

But for those who don't, check out the five-part series by Jenifer Tidwell, Luke Wroblewski, Martijn van Welie, James Reffell and myself as we answer the question, "What is the best way to communicate design patterns?"

Tuesday, October 10, 2006

Wanted: Pattern Curator for Yahoo! Library

As many of you know one of my jobs at Yahoo! has been as Yahoo! Design Pattern Curator. My main contribution in this role has been (along with the incredible help of Erin Malone, Annette Leong, Leslie Wang, David Gan, Greg Rosenberg, Jay Bergesen, Ben Clemens, Kiersten Lammerding and Lance Nishihira -- to name a few) to launch the public Yahoo! Design Pattern Library. (Of course I must also mention the incredible work of Matt Leacock, Erin Malone and Chanel Wheeler in launching the internal pattern library before I joined Yahoo!)

The library has meant a lot to various folks in the community. I have heard over and over at various talks I have given the gratitude to Yahoo! for opening up the pattern library to the public. As an example, recently in Portugal I had several design/engineering teams personally thank me for this library.

The library has also attracted some great talent to Yahoo! We have heard consistently from recruits coming into Yahoo! that the library was a big attraction to their checking Yahoo! out.

The job involves working with properties/sites across Yahoo! evangelizing the internal and external adoption of patterns. If this excites you, then we have the perfect job for you! Or perhaps you can recommend that perfect person...

Here is the email from Erin Malone (who could ask for a better person to work with?) posting this position.

I have a really important and interesting position on my team here at Yahoo! This position is a result of an internal transfer to another role which opens up great opportunities for you!

Rather than post the full long bulletted list of the job description I have presented here a brief overview of the role in the hopes that the excitement that I feel about the role comes through. Please feel free to ping me for the full description or if you have questions or if you want to send me resume.

ABOUT THE TEAM - PLATFORM DESIGN
Platform Design at Yahoo! supports the Platform Products Group and is responsible for the development of NETWORK standards, the PATTERN Libraries, solutions and components for the UI WIDGET Library, for the PERSONALIZATION platform, for intertwining COMMUNITY across the network and for MEMBERSHIP touchpoints across the network. Our team consists of Interaction Designers, Visual Designers, User Researchers and Developers. Team members work closely with other cross functional people from Product Management, Marketing, Engineering, QA, and others across the company.

THE JOB:
CURATE THE YAHOO! PATTERN LIBRARY
Yahoo!'s Platform User Experience Design team is looking for a new curator for the Pattern Library. The curator works with designers from across Yahoo! to develop new patterns and to eventually migrate a pattern to the public library. You will be responsible for spotting trends in the designs of our properties, for designing and crafting new additions to the library and for evangelizing the authorship of new patterns among your Interaction Designer colleagues.

You will partner with our Platform Presentation Engineering team to create interactions and best practices that accompany the UI Widget Library. Additionally, you will own the external Public Pattern Library and develop the pattern lifecycle from internal to external libraries. And last but not least, you will be the spearhead and driver for a new addition to our Library suite - a new Terms Library and will work closely with our internal editorial team.

Please respond to me directly with resume and links to work.
Reference Job # RX1000017268

thanks

Erin Malone


If you are interested, feel free to ping me via email. You can reach me at b dot scott at yahoo dot com and I will get you in contact with Erin & the right parties.

BTW, I will still be 'yapping' about patterns. I will still be evangelizing the patterns. It's part of my blood. Whoever takes this role should know that I look forward to supporting them and helping them in this role as much as possible.

Friday, October 06, 2006

Lisbon, Paris, AjaxWorld, Code Camp, UI11, WebGuild & Ajax Experience

The last few months have been pretty crazy. In one 8 day stretch I put in 17,000 miles in the air!

I had a wonderful time in Paris presenting a couple of sessions on design & developing for Ajax to the People in Action folks. It is interesting to see the excitement about "what is possible" being a world-wide phenomonon.

The same week Luke Wroblewski, Kevin Cheng, Peter Merholz and myself (we have dubbed ourselves the "Bay4") had a great time in Portugal in the wonderful city of Lisboa (Lisbon as we say) giving 4 back to back talks to the first annual SHIFT conference. Our wonderful hosts Bruno Figueiredo and Pedro Custódio gave us tours of the city. Most interesting (besides being in Portugal) was having discussions with people from all over Europe about what all these changes in the web world means to them.

In Portugal there are wonderfully bright folks who are starting to really get the whole concept of innovation. For so long (at least this is what I heard from multiple Portugese sources) there is a strong cultural influence that shuns failure. Of course the freedom to fail is a key ingredient to innovation and something that we generally cherish in the U.S. (probably to a fault).

I had a wonderful chat with an engineering manager, Bruno Pedro at Sapo (sapo.pt, largest site in Portugal) who echoed these sentiments. He shared his enthusiasm about the Yahoo! Design Pattern Library as well as the Yahoo! UI library. Very encouraging to hear of the nice impact these tools are having around the world. He promises to share some of the exciting developments they will be making on this site.

You can check out photos from the various folks that attended as well as blog posts at Luke's blog, Luke's photos, Kevin's photos, Peter's photos and mine.

Closer to home I will be at the Silicon Valley Code Camp tomorrow (10/7/2006). There are 700 attendees and a bunch of us speaking. Its going to be at Foot Hills College this weekend in Los Altos, CA. Doug Crockford, Kent Brewster and myself will be giving talks from Yahoo!

This past week I spoke at the Ajax World Conference here in Santa Clara. Enjoyed giving my talk and had some great conversations afterward. But the highlight was getting to hear my fellow cube-mate, Doug Crockford, give his abbreviated Advanced JavaScript talk. Its definitely great material.

Next week I will be presenting an all day workshop with David (Heller) Malouf on Designing Rich Internet Applications at the UI11 Conference. Looking forward to the session (well over 100 signed up!) as well as the rest of Jared's exciting conference.

Then the next week I will be on a panel at the First Annual Web Guild Conference on "The New Web". I am an advisor for the Web Guild which usually meets over at the Googleplex. This looks to be a really great conference. Its very affordable and has an incredible lineup of great speakers like: Jared Spool (ui engineering), Ram Shiram (Founding Member Google), Marissa Mayer (Google VP), Kelly Goto (gotomedia) just to name a few. Still time to sign up!!

The next week Nate Koechley, Doug Crockford and I will be at the Ajax Experience. This was the best Ajax event I have attended (last event was in May) and I really look forward to hearing what the top quality speakers there have to say as well as connect with others in the field. That will be in Boston, hope you can join us there.

Thursday, October 05, 2006

Designing a Component



I’ve designed a number of software widgets, components and gadgets throughout my career. In the early days of Mac programming I created small desktop accessories and my own set of components to enhance my application development (e.g., geographical map component, 3D graphics library).

Later in the days of Motif I wrote numerous components (spreadsheets, charts, directed graphs, server-side grids). I also made a trek through the TCL community creating components for the incr Widgets set.

I spent several years working in the world of Java Swing building components (in fact I built at least three completely different component sets for three different companies—thank God that we now see more things getting open sourced!)

I finally ended up in the land of web development taking trysts through HTC components, JSP/Struts components (tag libraries) and finally pure JavaScript components. There are a lot of lessons I have learned over the years in how to create useful components. There are three that stand out in my thinking:

  • Make the component specific in purpose, yet flexible in use.

  • Avoid the do-everything component. Instead make it do the main thing well. But make it pragmatic by keeping it flexible.

  • Separate the concerns of interface, interaction, and content.

  • Avoid hard-coding visual style, give flexibility in the interaction model and provide flexible ways to manage data content. Keep these three areas independent to allow them to be customized separately.

  • Document the interface and use the component before releasing it.

  • You know the experience. You think you have a great idea. Then when you go to explain it to another person you immediately see the holes in your logic. Documentation provides a way to explain your interface; writing demos allow you to exercise the component to test its ease of use and flexibility.

Make it Specific yet Flexible
Make the component specific in purpose, yet flexible in use.


The agile community expresses the idea of simplicity over over-generalizing. One of the traps that people fall into is trying to build a component that does everything. Not unlike feature creep in application development, a component can collapse under the weight of too many features. One of the sure signs of this is when certain parts of the API start competing with other parts of the API.

As an example, let's look at the carousel. It is just a simple list view manager. You can actually make the carousel look like a tabset or a slideshow. However, I chose not to provide additional tabset or slideshow functionality. Why? I knew from experience that the interface would become unwieldy. Lots of new configuration parameters and methods would get added that only made sense if you were using the carousel strictly in slideshow mode. You can imagine that with enough features, some of the API would only apply to these tangential behaviors. The result would be a carousel component that ends up with portions of API that don’t even apply when the carousel is behaving “just” as a carousel.

A nice way to keep a component flexible is by providing a simple configuration mechanism. The Yahoo! UI library provides a Configuration object for just this purpose. (The first time I saw this mechanism in popular use was with the Prototype library.) Instead of having to pass lots of parameters to the carousel’s constructor (new Carousel()), you pass in a configuration object. The configuration object is really just an object that contains parameters and values encoded in JavaScript object notation. Here is an example from the wrap example:

var carousel = new YAHOO.extension.Carousel("dhtml-carousel",
{
numVisible: 4,
animationSpeed: .8,
animationMethod: YAHOO.util.Easing.easeBoth,
scrollInc: 3,
navMargin: 40,
size: 17,
loadInitHandler: loadInitialItems,
prevElementID: "prev-arrow",
nextElementID: "next-arrow",
loadNextHandler: loadNextItems,
loadPrevHandler: loadPrevItems,
prevButtonStateHandler: handlePrevButtonState,
nextButtonStateHandler: handleNextButtonState,
wrap: true
}
);

Each configuration parameter has a default value. If the user provides a configuration parameter it is treated as an override and is applied to the internal set of configuration values. The carousel then uses these values in its operation.

Keep Concerns Separate
Separate the concerns of interface, interaction, and content.



If you have read other articles on my blog or heard me speak you will notice that I often fall back on this idea of separation of concerns along the lines of interface, interaction and content (or data). Sometimes I express it as feedback, interaction and information. And often I just state in the way I first learned it from the boys at Xerox as simply Model-View-Controller.

When I wrote the carousel I started with the basic understanding that I was creating a list view manager. The underlying HTML structure I chose to control was an “unordered list” (UL & LI HTML tags). Keeping my thinking general in this matter allowed me to separate several areas of concern. Here is how this concept of separation played out in the carousel.

1. Flexibility of Visual Style
First I wanted to provide flexibility in the component’s presentation. One of the ways I did this was by putting all style choices into a stylesheet (CSS). It’s really easy to hard-code style choices into the component logic. By placing style considerations externally you can help fulfill the first point above – keep it flexible. The other way the presentation was made flexible was by providing configuration parameters that select the way items are displayed. Control over the number of visible items, the animation speed and method, the size of a page of information, and the orientation are all ways that the carousel is flexible enough to adapt to most environments.

2. Flexibility of Interaction
Second, I decided that the interaction should be completely flexible. I did not want to constrain it to my choice of navigation controls or method of user interaction. In most of the current examples, previous and next arrow buttons control the carousel. While this is the normal case, it is easy enough to allow mouse over events drive the interface. The carousel exposes the same interfaces it uses internally. You can simply wire your events to the same internal mechanisms used by the carousel internally.

Microsoft Altas (now called Microsoft Ajax Framework) does a nice job of separating behavior from its components. For example, they isolated the behavior of auto complete from the components. This means that if you add this behavior to say a text field you would have an auto complete text field. It also means that you can write your own components and by obeying an interface contract, have your component support this behavior. In essense the interaction is packaged as a separate entity and just attached to the component needing the behavior.

3. Flexibility in Content
And third, I felt that there had to be flexibility in the way content gets displayed in the carousel. The simplest mechanism for this was to allow developers a way to shove their own HTML into any item in the list. The innerHTML technique is very useful in this regard. It is very friendly to PHP, JSP, ASP and other page generation techniques. It’s also the native way to express an interface on the web. What this means is that each “item” in the list could be a complete page of content, a single photo from a photo stream, a set of form elements—in short anything you want a “list item” to be it can be.

Another dimension of content is in how the data actually gets loaded. By externalizing the loading mechanism through a set of function callbacks (functions that you write that let you decide how to load the initial set of data and fetch the next and previous set of data) the component is able to support static data, client side generated data or server-side fetched data (e.g. via Ajax). Recently someone wanted to wire the carousel up to RSS feeds. Even though I had not considered RSS feeds, since the data loading was externalized, it turned out to be a fairly trivial exercise.

Test by Documentation and Usage
Document the interface and use the component before releasing it.



Alan Cooper advocates that designers design in pairs. One takes the role of Interaction Designer (ID), the other the role of Document Communicator (DC). In design sessions the ID takes the lead role in pitching ideas. The DC tries to capture the ideas and wherever there is difficulty in capturing or explaining the idea it is forced to go through some iterations to make it easier to communicate. The idea is that by having to explain your ideas. This doesn’t just work in designing user interfaces, but it also works in designing programmer interfaces.

As I am writing this blog post I am sitting next to Luke Wroblewski on a flight back from Lisbon. He saw this point in my article and reminded me of a post he wrote a while back on Nine Lessons from Nine Years of Interface Design. One of the lessons he notes is that “writing it down forces you to think it through.” On this point he summarize three good reasons for writing it down:

  • Solidifies the approach. Guards against localized decisions.

  • Articulates the rationale. Puts the solution in context of its use.

  • Ensures clarity. If you can’t explain it, then nobody else will be able to either.


I find the exercise of both documenting and writing demos for components to be refreshing. It gives you a chance to come above the code cloud and both talk to the user and be the user of the component you are writing.

I finished the first version of the carousel in just 2 days. I spent the better part of the next 2 days writing documentation and creating demos for it. All during that phase I was constantly going back and rewriting parts of the code. Documentation can seen as a kind of test-first strategy for writing APIs. Writing demos is a good way to create tutorials as well as experience what it is like to really use your component.

Of course the biggest caution I would have about trusting too much in the demo applications you write is to realize that they are only demo applications. It really takes being exercised in several real world examples to fine tune an interface.

This lesson follows something that we try to employ at Yahoo! We call it “eat your own dog food.”

The phenomona of Yahoo! Hack Day has had a profound impact on the web services and APIs throughout Yahoo! (I would go so far as arguing that this has been the biggest impact of Hack Day—causing our services and APIs to become more robust.) When the Hack Team attempted to put together a combination of our APIs (events, maps, search, etc.) they discovered just how many things were missing. The creation of just that one demo pushed the discussion of what needed to be added or corrected—-and the result is a much richer API available to everyone (public included.)

Wednesday, August 09, 2006

Latest Talks, Upcoming Events

Had a wonderful opportunity speaking at BayCHI last night. Excellent turnout. The presentation material can be found here.

The highlight for me was hearing Matt Mullenweg, creator of WordPress talk about lessons he has learned in building a startup. Matt is only 22, but has the wisdom of a sage, is bright and incredible funny. Could have listened to him for hours. Also love to hear his "mom" stories :-)

I have a pretty full schedule over the next three months. Here is where I will be speaking:
  • 08.15 - MetaDesign. San Francisco (private)
  • 08.24 - O'Reilly Web 2.0 Summit. Sebastapol, CA (private)
  • 08.25-08.27 - O'Reilly Foo Camp. Sebastapol, CA (private)
  • 09.18 - Travelocity. Southlake, TX (private)
  • 09.19 - Federal Reserve Software Convention. Dallas, TX (private)
  • 09.25 - Rich Internet Conference. Paris, France
  • 09.28-29 - SHIFT Conference. Lisbon, Portugal
  • 10.02-10.04 - Ajax World Conference. Santa Clara, CA
  • 10.09-10.12 - UI11 Conference (Jared Spool). Cambridge, MA
  • 10.19 - Web Guild Conference. Mountain View, CA @ Google
  • 10.23-10.25 - The Ajax Experience. Boston, MA
Luke Wrobleski, Jenifer Tidwell and others are planning a panel at SXSW 2007 in Austin. Our panel is on Design Patterns: Defining & Sharing Web Interface Design Languages.

Please vote for our panel!! You can select up to 10 panels from the Panel Picker at the SXSW site.

Wednesday, July 19, 2006

Carousel Updates - Wrapping, Auto Animation, etc.

New update to the carousel component.

Now supports wrapping at content end as well as an autoplay feature. Read the docs to find out all the gory details. 4 or 5 new examples of what you can do with the carousel.

I have had several people request styling navigation differently or providing different types of navigation. Its important to realize that these concepts are externalized from the carousel to provide the most flexibility. The carousel is really just a content scrolling mechanism. As such one can simulate stock tickers, news carousels, scrolling lists, news tickers (as in gmail), slide shows, advertising carousels or even a module tab set.

Check out all the examples and docs at:

http://billwscott.com/carousel/index.html

Thursday, July 06, 2006

Carousel Component - Y! UI Library Example

Ok, so I have been extremely, extremely remiss in writing up what has been rattling around in my brain lately. So I have some pretty good excuses (lots of talks, lots of work, writing for the yui blog, writing various articles, lots of family visiting and so on.) But I have always felt that it was better to share something on this blog when I felt like I had something worthwhile to say (or share.)

So just a week back I took on a weekend 'geek' project. For a project at work we needed a carousel style component. Here is an example:

carousel example

I started on a Friday morning and was essentially finished on Sunday night. Although I will confess that I have tinkered with it on and off over the last week or so.

I think this component is fairly flexible and does a good job of illustrating how to write a component for the Yahoo! User Interface library.

I was going to wait and write up an article explaining how the component is built. But until I can get that post together, I will point you to the component and the documentation I have already put together for it.

It's not finished. Probably has some code that could be refactored and certainly could use improvements. Based on my testing it works on most recent browsers. Let me know if it is useful or if you think an extended article given as a tutorial for the Y!UI library using the carousel component would be helpful.

Check the out the carousel component here.

Monday, May 15, 2006

Ajax Experience Slides & Ajax Links

At the Adaptive Path Designing & Building with Ajax workshop (Austin, TX) I mentioned that I would post a set of good Ajax technical links. You can find these links (in their unadorned state) on my portfolio site.

I also spoke on Friday afternoon at the Ajax Experience in San Francisco. You can find the same basic talk I gave there in a previous blog article.

Michael Mahemoff has also posted his notes on Ajaxian of my talk.

The Ajax Experience was an excellent conference. The depth of materials, the quality of speakers, the excellent venue, and the awesome nofluffjuststuff and Ajaxian guys really made this the best conference I have been to this year.

Technorati Tags: , , , , , , , , ,

Wednesday, May 10, 2006

Yahoo! UI: More Patterns & Code

Check out the latest additions to the Yahoo! User Interface library and the Yahoo! Design Pattern library.

Windowing, menus, auto complete and more...

You can read the full story at the Yahoo! UI Blog.

Technorati Tags: , , , , , , , , ,