Ryan’s Rules for Website Navigation

It should be intuitive.’   ‘The user should not have to hunt for information.’ Focus on the user.’

Yes.   So, ‘yes’.    If everyone can agree on these things, why don’t we see it in practice?    As usual, the Devil is in the details.    Making a website (or any other kind of software) usable is harder than it seems.     While you’d think great designer can handle all usability problems, it takes more than just usability ‘chops’ to create a great website.    Even with testing, there are a variety of factors that can influence a website’s design – even when everyone has the user at heart.    So, here are a few tips I have to help a little.    For the sake, of brevity I am going to focus in on navigation.

Fewer Labels is Always Better

It works like this:   if you see a relevant path on a website, you will click on it.    If you do not, you will take your next best guess.    Every label does not have to be as explicit as you think it does.   Remember always the Pareto Principle / The 80-20 rule.    Of all the content that gets submitted to a library website, only 20% is vital to the user.    That 20% needs clear, concise & obvious navigation.

Do not let the other 80% get in the way of the vital 20%.    If someone has to make a guess, a navigation system of 4-5 elements is much, much better than a navigation of 25+ items (number taken from a website I am currently responsible for – ‘do as I say …’ ).   You can cheat a little by having different levels of navigation (eg. About, Contact, Jobs etc. in small at the top or bottom), but most website navigations I see out there go way beyond cheat.

Text, Text, Text

Over and over again, people think that promotion via images is important.    It is, if your user base is 10 years of age or younger.   Images get ignored by the user, and often by search engines as well.   A single word or two, explaining where the link will take you is fine.

In fact, I once took an image link off the front page of a website, gave it a logical name and put it in a less obvious place and the use *increased*.

End the Drop-Down Madness!

WordPress.com, I’m talking to you!     Updating my blog has become hell ever since you changed the navigation to include drop-downs.    I click on the wrong things all the time, then I struggle to get back where I was.    Fortunately, this is only for the back-end interface.    For a front-page interface, drop-downs are even more hellish.

Drop downs came into existence because someone came up with the stupid ‘3 clicks or I’m gone’ axiom.     Everyone came to the conclusion that we needed to design sites to reduce clicks, and drop-downs reduced clicks.    However, the real problem was usability.    Drop-downs reduced clicks, but did not increase usability.    It was a zero-value trade-off.    Don’t use them.

Do Not Believe Everything You Read On the Internet

There’s alot of baloney on the internet, believe it or not.    Some people will tell you that your navigation should use verbs; others nouns.   Some people will decry scrolling; others will insist that the blog is the way to go.   Following anyone’s tips is fine, but they should not be used at the expense of common sense.    For instance, avoiding scrolling for the user may be impossible if you consider that some of your users may still be using 800 by 600 screen resolution or less.

A Link Should Send You to the Place You Expect It

If I click on a link that says ‘find a book’ it should help me find a book.    It should not be a list of tutorials on how to find books.    Call it ‘tutorials’ instead (and then do some serious thinking about whether this is a 20% or an 80% thing).

Don’t Be Cute

If you want to provide a way for people to contact you, call it “Contact” or “Contact Us” not, “Get the Skinny” or something else more barbarous.

The Designer Must Decide

In a profession of information experts, everyone thinks they know how best to design a website.    The problem is that each department sees a different user, and wants to make that user happy.    Reference desk people see the person struggling to access a database.    Cataloguers see the user that can get into the system and download every book they need like it was no tomorrow.   Community workers see people struggling to learn a new language or afraid to walk into the library in the first place.    All are important users.   All have unique needs.

Unfortunately, while we want to make these users happy, trying to make everyone happy at the same time results in a website that puts everything but the kitchen sink on the front page — confusing everyone and pleasing no one.    Alternately, we focus on the users who have a negative experience in brief moment in time – so many factors can play into that complaint (the user’s mood at the time, his or her expectations about library service vs what libraries actually offer etc.).     Of course, we need to take user complaints seriously – but is web design really about solving everyone’s unique problem?   I argue no.    Web design is finding out about how human beings interact with computers / digital media and applying that knowledge to improve access.    A good website cannot solve anyone’s particular information need.    It can, however, make the act of discovery more enjoyable.

All this leads to my conclusion – let the designer decide.    He or she may make a mistake about a particular user’s need (and this will be evident through user testing etc.) but he or she will do a better job of improving access than a committee of people all trying to please their particular vision of the user.

Final Words

If you have been paying attention through the tips, you might have noticed a common thread – the problems website designs encounter are often not design problems at all – they are management, consensus-building and coordination problems.    There is always a delicate balance between alienating your stakeholders and having a process be so participatory that it kills the design.   I would argue that more good designs are killed than bad designs improved.     The killing happens over time as priorities change and band-aids are applied to address minor non-essential issues coming from a variety of different places.

What tips do you have to improve navigation of websites?

Part I: Is There a Such Thing as Real World Haskell?

Part II:   How not to Start Your Haskell Program >

Here’s a bit of sardonic code, that I’d like to propose to any Haskell advocate out there.

data Works = Works | Does_not
computerApp a ::  Maybe a -> Works
computerApp a
     | isJust a = Works
     | otherwise = Does_not

I have been playing around with functional programming in Haskell.    I have to say that it has more than certainly improved my ability to code in other languages, and probably has reduced the number of bugs I have to fix after the fact.    On the other hand, it has driven me absolutely batty.

To be fair, I need to say that I am not a computer engineer.    I have a BA in English.    My Masters are in Public Administration and Information Management.      I engaged in Haskell code simply as a curiosity and a challenge.    I love math, and became curious about Monads and Lambda calculus.    I am probably not smart enough to be a great Haskell programmer.   However, I do understand two things.    1)  Not-smart-enough people can and want to participate in application development   2)  Coders, while making apps that do what they expect them to do, do not always understand (or care) about the sustainability and/or scalability of their code.

Web Development is an important test case.      Just about anyone, with a reasonable amount of time and effort, can learn to develop a website in PHP, probably supported by some content management system as Drupal or ModX.    Somewhere, their development goes overboard, the system does an upgrade to support some security risk or vulnerability, and ‘pop’ –>  all that likely un-documented and messy code goes nowhere and wheels need to be reinvented.

That’s why learning Haskell is probably a good idea.    Without getting into the code itself, it insists that a function always causes the same result to happen with any given input(s).    Once developed, the documentation pretty much always exists in a minimal form (via Type declarations).    So many bad habits would disappear if only people were forced into developing this way.

The problem, unfortunately, is that Haskell coding is confusing.     There is no popular development framework to use it.     Once you try to apply the examples provided in text books to real world development, things go wonky.    I won’t go into the many reasons why, but I do have an observation based on what I’ve seen in responses from various gurus to newbies like me.

It’s this ->   Users think computers do things.    Computer engineers think computers solve problems.     In Haskell terms, any interaction between users and engineers results in a type error.    Somewhere along the line, an IO() monad needs to be created to turn what engineers like about Haskell into something that users will like about it.

I would like to propose a management framework, similar to extreme programming, to manage the development of functional code for regular people.   While Programming it in Haskell is not a bad start, it uses a problem solving model, rather than a ‘how do you make the software do x’ model.    It focuses on mathematical abstractions rather than simple actions.     For instance, I would like to see a book that uses the development of a rogue-like rpg game in Haskell as an example.    Instead of worrying about efficient computation, abstractions about ‘laziness’ and recursive factorial examples, the writer would have to focus on managing complex (a tuple of a lists of tuples) types, worrying about random numbers and IO issues that are inherent to Haskell.   In approaching such a game, should I worry about creating newtypes first, or work from what I want main to do and fill in the gaps?

But while I make this suggestion, I really have no idea of what kind of advice I can offer your typical new-to-haskell coder.     But I have some hypotheses:

  • work from the main :: IO() first and build a framework of functions to develop your outputs.
  • possibly create type variables for each of your functions, making it equal in Type to a typical output you would like to see.    Then work backwards from there to create a lazy output, then involve possible recursion and so on.
  • use generic types (eg. Int, String, Char etc.) with comments first, then develop types to make your code more clear.
  • unit tests should include the System.IO.Unsafe module (cheating should be allowed when you are testing your code – let the learning happen when you are developing real code)

I’ll add what I can as I continue to learn more about coding in Haskell.    The bottom line is that I think more people should be coding in a language like Haskell, but they are unlikely to work with it if they end up spending a bajillion hours just to get it to choose randomly from a list of monsters (for example).   Especially when they can learn how to do the same in three minutes using an imperative language like Python.

For the greater good and more sustainable code overall, what high-level tips or approaches can you offer any newbie coders of Haskell, so they can develop without becoming absolutely bogged down in failure with their Haskell programs?

UPDATE:   After writing this, I found a great powerpoint tutorial by Graham Hutton that uses Hangman as an example of interactive Haskell code development.

How to Talk to an “Aspi” – Asperger’s, Autism, Labels, Stereotypes and Strategies

Update: After writing this, I read this great article by someone name Astrid who has Aspergers and think it’s a great counterpoint to what I said here.   I now can’t imagine this post being ‘out there’ without a link to that post.   I have no real response to Astrid except to acknowledge the tension between the perception of Aspies as ‘elite’ (in a way) and the often unfair expectations that those perceptions have on people with Asperger’s.

>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>

My son is a genius in so many ways you cannot imagine.   He is now six years old.    He has been talking since he was barely 12 months old.    His vocabulary could make Rex Murphy feel like he needs to go back to grade school.

He can tell you the some interesting properties of many chemical elements you’ve never heard of.   He once wrote Martyn Poliakoff of the Periodic Table of Videos to ask him:

  • What do people use Beryllium for (just watch this video)?
  • What is the most dangerous element?  (there are various reasons for danger.   Plutonium is very toxic.   Fluorine and Cesium are the most reactive.)   What is the least dangerous element?  (probably Helium)
  • How do you suppose ununoctium is very small when it has the most protons?   (It’s not small, but only a very small amount has ever been made – and the experiment that claimed to have made ununoctium has its critics for sure).
  • If bananas contain potassium why do they not explode when you put them in water?   (it’s not elemental potassium that bananas contain, but potassium ions, which do not explode in water).

There’s more.   He’s gotten as far as level 8 in Globetrotter XL (a game where you are asked to pinpoint the geographic location of world cities).    He can probably describe most of the world flags and definitely all of the U.S. state flags.    He can name all the state capitals and nicknames.   (Also, he is Canadian, so he has no real education on this topic.)    When he was 3, I could rely on him to give me accurate instructions on how to drive to someone’s house after only a single visit.

When he got to school, however, we learned that he was having difficulty socially.    We are also realizing that there are some issues with some areas of his academic life too.   That’s when we discovered that he’s an ‘aspi’ – a child with Aspergers.    Whether that’s a diagnosis, a personality type or just a way for so-called ‘normal’ people to marginalize him, I’m not quite sure.   I do know that paying attention to the nuances of his learning style has been really helpful to let him deal with everyday life things.

So he must be socially awkward right?    Must be like Rainman, right?    Spock?    Temperance Brennan from Bones?    Keeps to himself, right?   He must shy away from social situations and show little emotion to others, right?    Total lack of empathy in favor of logic and detail.   It’s all obvious!

Well, no.   My child is  extremely engaging, interesting and (in a way) interested in people.    The differences are more subtle and hard to pin-point.   You’d know there’s a problem somewhere with the way he interacts with others, but you would find it hard to pinpoint what.    But, if you meet a kid that:

  • Is very welcoming and friendly.   Almost assuming right off that you are a friend.
  • Is very polite on the phone.
  • Assumes that you are interested in what he is talking about.
  • Assumes you want to participate in the things he wants to do, and maybe gets angry if you don’t.
  • Interrupts your conversations with others.
  • Gets upset over basic requests or instructions.
  • Asks surprising questions and offers amazing insight on a wide range of topics.
  • Will do a speech as if he were defending a thesis, but then fail at answering basic open-ended questions about the same topic.
  • Is surprisingly slow at getting ready for going outside etc.
  • Will repeat certain behaviors and actions over and over again.

That might be my kid.

If you happen upon a kid you might think is an aspi, here are some things you could consider:

No Surprises

Little surprises will make Mr. 6 anxious.    Simple requests like ‘go brush your teeth’ can turn into total battles if they appear (to him) to come from left field.    A better approach is to give him a list of the things that need to happen, preferably with time-limits to go with them.

Be Patient

Mr. 6 will ramble.    It’ll take him a few shots of ‘umm…  uh…  I have a question for you…’ etc. before he comes out with what he needs to say.

Turn Open-ended Questions into Multiple Choice

No matter how many times I ask Mr. 6 ‘what does he want for dinner’ he will always reply ‘i don’t know, what is there?’    And he’s a picky eater – he only has a few things that he enjoys eating!    On the other hand, if I hand Mr. 6 a menu, he will be able to give me ideas even if nothing on the menu is appealing to him.    So if you want to ask Mr. 6 why he is angry, you should say ‘I think you might be angry because:

a) you are disappointed about not getting candy

b) you are a mean grouch

c) someone called you a mean name

d) someone ate your lunch’

Even if all of these ideas are absolutely wrong, Mr. 6 will be able to take one of options and give you some insight into how he is feeling.

Act Like a Librarian

There may be no actual evidence to support this assertion, but sometimes it’s like Mr. 6 has a Library of Congress in his head with no retrieval system to find the right information at the right time.    If you are able to help him out with a little subject classification, he may be able to find the right book in his head and recite its contents in detail with amazing analytical capability.

Get Ready to Have your Mind Explode

When I explained my little ‘act like a librarian’ technique to a doctor, Mr. 6 corrected me and said ‘it’s like I have to build a tall building and I don’t know what materials to start with.’    That doctor is probably still cleaning up the grey matter from her office after that insight.

Model Behaviors

Mr. 6 will always be better at imitating the positive behaviors he sees in other than understanding how he is annoying you.    If he can come up with a rule about what to do at the right time, he will do it.    He understands that people get annoyed at him, but he doesn’t always understand why.   Show him an example of how he could behave when certain things happen and he’ll be happy to oblige.

Is Something Else Bothering Him?

Mr. 6 hates loud sounds.    It might not be you, but where you are standing that is bothering him.    If an environment is complicated or noisy, it might be causing problems for Mr. 6.

It’s About Learning Difficulty, Not Emotional Problems or Intelligence

If you are the sort of person who just likes to label and ignore people with learning trouble, just listen to Temple Grandin for a few minutes.    People on the Autism spectrum have the potential not only to be productive members of society, but to transform society for the better.   Like the way a wide range of overachievers just so happen to be dyslexic, there’s a comparable list for people with Aspergers (grain of salt needed for both lists, however).

So there’s my contribution on the challenges that go along with the gift of having an ‘Aspi’ in your life.     Mr. 6 makes me smarter.    He also breaks a wide range of assumptions I have about people learn, teach, ought to behave, and so on.