Friendster Usability Analysis

Course Home Page : One Subsection
This is a usability analysis of the Friendster Internet service, collaboratively created by the students of MIT course 6.171 in November 2003.

The source of these suggestions are the answers to a mid-term examination question:

"... identify three usability problems with Friendster and write instructions to their programmers on how to fix them."

-- 6.171 Mid-term

Below are some of our favorite suggestions from among the students.

The Suggestions

From Jonathan Grall:
The Difficulty of Finding 'Close Friends'.
This problem is concerning the difficulty of using the Friendster service
to find close friends i.e. people that are no longer than 2 or 3 links away
from you in a chain of friends registered with the Friendster service. It
is very difficult to get an answer to the question: 'Who are all the people
in my personal network that I am connected to through no more than 2 other
people?'

[...]

POTENTIAL NEGATIVE EFFECTS ON USER EXPERIENCE:
* Users may become bored of the Friendster service, because as they use the
  search tools to search for people with common interests etc., they keep
  getting results of people who are many links away from them, whom they
  may never want to take the time to reach out to.

* Users become frustrated by having to visit many profiles to collect
  simple information about their group of immediate friends.

* Users start getting bothered by people far outside their network of
  friends e.g. people from different parts of the world who happen to know
  some distant other friend. In some ways it is neat that people can be
  brought together this way, in other ways it is not beneficial, and users
  may become more weary and provide more sparse and possibly false profile
  information.

POSSIBLE SOLUTIONS:
* Integrate a 'Show me friends no more than x people away from me' field
  into the Gallery search of the user's personal network. This way the user
  can specify x (via a select box for example) and choose whether to find
  only close friends, or distant friends also.

RESULT OF IMPROVEMENT/PROBLEM CORRECTION:
* Users may use the Friendster service more consistently to keep track of
  their close friends.

* Users may provide more accurate profile information without fear of being
  contacted by total strangers.

* Users can easily find information and other friends who are more relevant
  to them personally. Users spend less time filtering out people that are
  too distant from them in the network, and spend more time messaging
  people and building up their profiles.
From Matthew Drake:
Speed - The site is unbelievably slow, and this is a huge usability
problem in my mind. Page load times are between 30 seconds and a minute
depending on the page. I could speed page loads up to five or ten
seconds by turning off images - if the site has a speed problem, they
could solve a lot of it by providing an option somewhere to disable
images, or include fewer images. (For instance, when they show each
person/s list of friends, we don't need a picture beside each one.) This
would, apparently, improve speed a lot, and if most people had settings
like this, I bet server speed would speed up a lot, since right now a
lot of it is going towards hosting images probably. 
From Jason Goggin:

When I search my personal network I can only search by first name. There
are no advanced fields to cut down the search, even if after my initial
search I am returned thousands of results. Also, the results are not
paginated. I had to wait a few minutes while the results of my search
for 'ben' in my personal network were displayed on the single page. In
addition to this, the only information which was displayed about each
person found by the search was their photo (if available), a link to
their home page, something telling me if they were already my friend or
not and their first name. Besides the picture there was no new
information displayed without having to make another click. 

Ideas for improvement: Allow for advanced search. Odds are I don't want
to search my personal network for someone with a specific first name, I
probably want to know if there is someone connected to me who has the
same interests as me. Once this is set up, show the advanced search
information requested along with the picture so I can tell if this
person is interesting before I make another click. Lastly, set up
pagination showing the best matching results first. I don't want to have
to scroll forever to get through all of the results. I just want the
ones that best fit what I asked for.
From Jeff Bartelma:

PROBLEM: Unexplainable inconsistency in the interface, with respect
   to the order in which one chooses an action to perform and an
   entity to perform it on.

   Conventional UI wisdom holds that users should first pick an entity
   to apply an action to, then choose an action to apply to it.  At
   times Friendster follows this guideline when it's particularly
   unintuitive, and ignores the guideline when it would be more
   intuitive to follow it.

   Most actions you can take on a particular user (Suggest a Match,
   Add to Bookmarks, Forward to Friend) are available by visiting that
   user's profile.  This is consistent with the general UI guideline
   given above.  However, some actions one might reasonably expect to
   be present there, aren't.  For example, there is no link to remove
   him from your friends. In order to delete a friend you must go to
   your own home page, select the ACTION Edit Friends, and then select
   the OBJECT of the Delete Friend action.  This only saves clicks if
   you're deleting many friends at once (hopefully, this is not a very
   common operation!).

   Conversely at other times it would be most intuitive not to stick
   so doggedly to this rule.  For example, it's baffling that there is
   absolutely no way to SEND a personal message from the "Message
   Center". (You must visit her profile page and click "Send a
   message".)

   SUGGESTED SOLUTION: Both these cases are simple to fix. Simply have
   a Delete User link appear when you are visiting a friend's profile,
   and link up the message submission machinery to the Message Center.
More from Jeff Bartelma:
-It's possible to send multiple copies of messages and multiple
 invitation emails by hitting the reload button on
 e.g. www.friendster.com/sendinvite.  It shouldn't be possible to
 reach this POST form via the back button anyway; rather, following
 the post action the user should be forwarded with a 302 to a page
 with no side effects.

-Putting quotation marks around book, album or TV show titles breaks
 their formatting as links in the profile (produces blank entries).

-When changing account settings, if an error occurs when processing the
 form, all your work is lost.
From Edmond Lau:

Under the current gallery search service, there is no mechanism for Jane
Doe to search for other members of Friendster in a specific geographic
location. The current search options only allow searches for individuals
that live within the same state or that live within x number of miles of
the Jane. This means that if Jane currently is an MIT student from San
Francisco and entered in 02139 as her zip code, there is no easy way for
her to use Friendster to reach old acquaintances, friends, or meet new
people from the west coast. Her only options would be to limit her
search options to all people in the US and then browse the thousands of
hits for someone from San Francisco. Along the same lines, there is
currently no way for James Lee in Boston to search for a user outside of
the country, say in Canada or in China.


Clearly, this problem can be fixed since the necessary geographic
information is already submitted by users upon registration and such
filtering by state or by country is supported under the current data
model. To remedy the problem, add two extra drop down menus that further
filter the data based on state and country. Since Friendster already
uses a table to map zip codes to locations, they can reuse this in their
search engine filter.
From Howard Chou:

This concerns Friendster's tools to help people communicate and keep
track of one another; in particular, the private message and bookmark
tools. Firstly, anyone within my personal network can send harassing
messages to me, even those who are two, three, or four hops away whom I
might not know about. I could flag the person for review, which probably
won't do anything, or I can delete the friends who are connecting me to
that person. By removing my own friends, I would alienate myself and
lose one or more hubs in my personal network; consquently, I would lose
contact with hundreds of other users on Friendster. Therefore, I am left
in a dilemma, because Friendster is only fun once you have a big
personal network and I don't want to remove my friends, but I don't like
to be harassed either. Furthermore, for a popular user who gets many
messages and never deletes them, it would be useful to be able to sort
messages by the sender or subject, not just by date received. Secondly,
having bookmarks of users without some way to annotate, organize, and
sort them is not very useful, becuase a couple of days from now, I might
not remember why I bookmarked the particular user in the first place.

What's needed to remove these flaws is very simple. Allow users to block
other users or drop users in their personal network. who are not their
first degree friends. Therefore, I can pick and choose people who can
contact me and once I am harassed, I can make sure the same person does
not harass me again by removing him from my network and blocking
him. Being able to sort personal messages by parameters other than date
would make the tool more useful and should not be difficult to
implement. For users who use email, being able to sort messages by every
email parameter has become the norm, so why bother to provide something
that does less. Similarly, bookmarks can be improved by allowing
annotations to be added at the very least. Being able to categorize and
sort bookmarks would also be useful, becuase like personal messages,
bookmarks is not a new concept. Users may already have assumptions about
what bookmarks should be able do and used for. In this case, every
browser allows users to bookmark pages as well as annotate the bookmarks
and organize them into folders and subfolders. Similar to emails, why
bother providing something that does less.

From Alex Vandiver:
I found it annoying that one had to go to different places to add a
friend that was already in the database versus one that wasn't.
Additionally, the phrase "gallery" did not connote "friends network"
to me.  This is mostly a cosmetic fix; some additional code might be
needed to provide a "Don't see who you're looking for?  Invite them!"
link.

The user sometimes loses sense of their context.  For example, when
"viewing photos" of someone, it is impossible to get back to their
user information page without using the back button.  Keeping some
context from the user information page would be good.

  Their HTML is also very .. special.  To quote the top few lines:

    <html>
    <head>
    <link REL="SHORTCUT ICON"
HREF="http://photos.friendster.com/images/friendster.ico">
    <link href="http://photos.friendster.com/css/friendster.css"
rel="stylesheet" type="text/css">

    <table align=center width="95%" cellpadding=4 cellspacing=0>
    <tr>
    <td bgcolor="#E0E0E0">
    <table width="100%" cellpadding=3 cellspacing=0>

Yes, they're not even to the body of the web page, and they're already
using a table.  If that ain't special, I don't know what is.  The
solution to this problem is to not suck at generating HTML.

From Josh Weaver:
When I first logged into Friendster, I immediately went to the "Invite
friends" link and emailed requests to people I knew were already using
friendster. After the second email saying essentially "use the 'ask to
be my friend' button, Dummy!", I realized that there must be a different
mechanism of adding friends.

I found it, under home --> gallery search --> Add Friend, which really
needs to be moved into a more obvious place! In addition, a search could
be run on email address invites to suggest the "add friend" interface to
new users trying to email people already in friendster.
From Amerson Li:

Server speed is rather slow. This must be because of the great number of
hits on the server. Sometimes, after I've read/replied to a message, it
still appears on "Home" as having been unread. Also, whilst approving a
testimonial, sometimes it doesn't move the testimonial into the
"approved" section until I refresh about 5 mins later. These could be
bugs? A possible fix, other than spending money buying faster machines
is to provide a "low intensity" option for the site during peak hours of
usage. This low intensity option could feature the following:

 - do not display pictures of "old friends", only display pictures of
   friends that were newly added

 - display bulletin board message / personal messages that date back a
   week, do not display all of them unless requested.

 - implement some kind of paging for testimonials on a users-profile
   page, sorted in order of recency.
From Matt Wilkerson:
Combine "Personal Messages" and the "Bulletin Board."

Even after spending a few minutes playing with testimonials, personal
messages, and the bulletin board, I’m confused with some of the
differences.  The most obvious of the three seems to be testimonials
with the purpose of giving "user reviews" in a sense.  Personal
messages and bulletin boards appear to share some properties.  I can
tell that personal messages are sent directly to another user.  After
testing the service a while longer, I realized that bulletin board
messages can only be seen by people in a direct friend network.  The
separation of messages into three areas can be confusing for a user to
manage.  It would be simpler for a user if personal messages and
bulletin board messages were combined into one area called Messages.
When the user enters this area, he or she should have the option of
sending the message to a particular user, a list of particular users, or
their entire friend network.  Messages that a user receives can include
an extra column indicating whether the message was sent just to that
particular user or all users in the sender’s friend network.
From Sebastian Ortiz:
The interface to the bulletin board is unclear when you're just starting
out as a new user. With the lack of messages and the separate add
bulletin page- it's not clear what bulletin board you're posting to in
the first place. The fact that most pages don't have a bulletin board
link, adds to the confusion (there's a messages link, but grouping all
types of messages into one may or may not be a good idea.)
More from Matt Wilkerson:
Improve how suggesting a match works.

Suggesting a match seems to imply that I am recommending two users in my
friend network to be matched.  How this match is supposed to happen is
confusing though.  Will the users be told anonymously that they have
been selected to match, or will I be listed as the person who suggested
that they be matched?  Under what interest criteria are they being
paired?  The form does not let me specify if the recommendation is for
dating or friends, etc.  When I tried to match two of my direct friends,
an error was posted saying that the two people are not in each other’s
networks because their connection is too distant.  There is no
explanation as to how they are too distant.  I don’t understand how they
could both be any closer if they are each my friend.  One way to improve
the matching service would be to allow users a choice in how their
friends are recommended, be it dating relationship, serious
relationship, friendship, or activity partner.  Another improvement
would be to give more helpful information in the error message.  As a
beginning user, I would like to see an explanation for what criteria is
necessary to match friends.  What makes a friend too distant from
another friend to be matched, and how can they be brought into closer
contact with each other?  Again, if the information required is too
detailed, direct the user to a section of the Help page where
instructions can be found.
From Christine Robson:
When displaying user search results, tell me what search I just
preformed!  This is especially useful for failed searches (did i spell
his name right?).  The simplest fix for this, since this information is
already encoded in the URL, is just to read the variables out of the
request and print them on the page above the search box.  Also in User
Search, you should be able to search by last name within your personal
network as well.  There are 4 Jonathan Abrams on friendster- I want to
find the one who's actually in my network.  And searching for Jonathan
returns too many people!  Since first name and last name are probably
stored in the same table, you can fix this by adding a text-box on the
search page for "last_name_query" and then adding "and users.last_name =
last_name_query" to your SQL query right after "users.first_name =
first_name_query".  The last improvement is the most interesting: when
searching for users with certain interests, it would be nice to be able
to filter.  For example, I might want to search for a soul mate who
likes Ender's game as much as I do, but if he lists "RDMS" as an
intrest, I want nothing to do with him!  This is easy to fix, actually.
If you're using a modern DB search package, for example TSearch, then
boolean logic comes built right in!  (Ender's game & ! RDMS)...  You
just need to explain the boolean logic syntax to your users, typically
by copying the explanation from your search doc.
From Ian Spivey:

Words less than four letters long are not irrelevant.

In the various kinds of interests, it is impossible to search by terms
less than four characters in length.  I can only imagine this is being
done to eliminate searching on short connecting words such as "the",
which are meaningless in this context.  It would be much more effective
to not full-text-index certain words (like 'and', 'the', 'a', for
example) and then allow searching on any term not in that list of
stop-words (as they're called in the full-text-search business).  This
is currently a fairly big issue, as I notice many people love the TV
show '24', but can't find other users that share their interest.

From Jennifer Liu:
I tried signing up with a fake email address that does not belong
to me and may not even exist (snupa+@hotmail.com).  I was not
required to verify my email address, and I appeared to be able to
sign in with that email address and invite other friends to join
my network.  My friendster page indicated that my email address
had not been verified yet, but did not require me to do so.
Later, I tried to register a new account with the same email
address (snupa+@hotmail.com) and was given the error message that
"The email you entered is already registered".

If this were a real scenario, someone could have easily used my
email address, without my permission, to register on the site (as
long as I hadn't registered on the frienster network with that
email address already).  Later, if I decided to join friendster,
my own email address would not have worked, and I would have been
prevented from registering on the site.
From Mike Ogrydziak:
When signing up for a new account, the method of delineating which
fields are required is inconsistent from page to page and also not
clearly explained.  On the first signup page all fields are required,
but this is not specified.  One could, theoretically, fill in a field,
be told another field is required, fill that one in, get another error,
etc.  Along the same lines, on the 'basic profile' page of the signup
process required fields are marked in red.  This is intuitive to someone
who is experienced with web forms, but there is no explanation
indicating that red corresponds to a required field.

A simple statement that all fields are required on the first signup page
along with a statement that red fields are required on the 'basic
profile' page would take care of the problem.
From Eddie Kay:
Another thing is that I can see who my friends are and who theirs are, but I
have no place I can go to see who has me on their friends list, or who views my
profile. Maybe I'd just like to know how often my profile is viewed. I do not
feel that this would dissuade people from viewing others' profiles because
people on Friendster are inherently social. People go there to meet new people
and to find out about them, and are happy when people come to find out about
themselves.
More from Jennifer Liu:
Inconsistent use of color, especially the color red.

Red text is used in the following ways:
    - link to the "Gallery" of people in my network
    - the text, "Next Steps", reminding me to invite more friends
      to join Friendster
    - bulletin board posting subject lines (that I have already read)
    - input error warnings when filling out a form
    - display alerts to "upload a photo"

Usually, red is used as an attention-grabber - telling the user that
there is something urgent that they need to know about.  On
friendster.com, red text is used inconsistently to describe
urgent/warning text as well as ordinary reminders and links.
From Jawad Laraqui:
It's confusing that the user profile and the homepage show the same information, perhaps
your homepage should be your user page with more inline options.
Two thoughtful comments from Luxiou Chen:
PROBLEM: 
comma delimiting and general allowable format unclear when editing favorites in profile.

EXPLANATION: 
in the edit profile page, users are supposed to enter in favorites that
are delimited by commas. however, this is not made obvious to the user
at all. there is small subscript next to the interests field informing
the user of this requirement, but it is easy to miss and seems at first
glance to only apply to the interests field. this problem is evidenced
by the many users who type entire sentences into their favorites
sections, thereby cluttering the fields and providing not as compact a
set of key words to the searching engine.

SEVERITY: 
minor - given a full text searching engine, sentence long descriptions
will still yield results, although the results may not match exactly
what the user was searching for, and vice versa. if you bury your
interest in automobiles in a long sentence, the chances that your
profile will appear in the first few pages for a search for automobiles
will decrease, and so other automobile enthusiasts will have a harder
time finding you.

FIX: 
make the comma-delimited format more apparent to the user, either with
additional text or text of a more obvious color. additionally, you can
design the full-text stopwords to include common vernacular such as
"stuff", "i love to", etc... to make the effects less apparent.

PROBLEM: 
no centralized way to view your contributions to the friendster community.

EXPLANATION: 
after joining and contributing to the community, there is no centralized
page from which to view your contributions. these include bulletin board
broadcasts, testimonials, friends you've invited/added, and personal
messages you've sent. you have to go to the individual sections of the
site to view these contributions.

SEVERITY: 
major - it'd really be nice to see at a glance your entire contribution
or some major subset of someone else's contribution to the friendster
community. especially testimnonials, since then you can easily tell
whether that person is just being nice to everybody or if he actually
values you enough to write a nice testimonial for you :]

FIX:
implement an additional page that displays your bulletin board
broadcasts, testimonials, friends you've invited/added, and personal
messages. make a subset of this information available to other users who
view this page as well.
From Vishwanath Venugopalan:
Nature of personal connections. There is too much emphasis on the fact
that my friends know certain other users, who know other users, and so
on. However, there is no additional qualification attached to these
relationships. I might want to separate out my contacts into personal
and work spheres, or indicate how well I know the person by attaching a
strength value to my connection. Adding metadata to connections between
users may help me, for instance, to sort my personal network by the
tenuousness of connections (i.e. linked through a chain of good friends
vs. acquaintances, etc.) There is sociological research that the more
tenuous a social connection, the more likely it is that something
fortuitous or desirable might arise from it. 

Wrap-Up

Nearly every student complained about the speed of Friendster. As a classical Web/RDBMS application it ought to be possible to make it fast at a reasonable cost. According to http://socialsoftware.weblogsinc.com/entry/3341461825857782/, the programmers of Friendster rely on a cluster of 50 servers each running MySQL plus custom software that distributes updates across these peers, i.e., a given user is talking to Server #37, does an update to that server's local MySQL database, and that update is somehow later propagated out to the other 49 MySQL installations on the other 49 servers.

Here's a wrap-up email message sent by Philip Greenspun, one of the 6.171 staff members:

Friendster runs MySQL.  In an attempt to work around performance
problems, they have built themselves a very complex distributed system
that propagates updates among the servers gradually (i.e., there is
really no guarantee that an update will be seen by another user in a
specified time interval).

Personally I don't think Friendster's IT requirements are
extreme. photo.net has an ancient 4-CPU database server running at 400
MHz with an old version of Oracle and it still manages to handle some
fairly heavy traffic (see http://www.photo.net/about-us for stats; the
site gets 10 million requests per day).  Here are some quick-and-dirty
things that I think could work for Friendster...

1) split off photos onto a separate machine that only serves images;
   nicer to have these in the database for simplicity of maintenance and
   transactional integrity but when you've got millions of photos it
   perhaps is better to compromise

2) the split of photos implies a load-balancing router that notices
   requests in the /images/ subdir and sends them to that separate
   machine mentioned in Item 1

3) stick to rat-simple Web/db programming with no attempts at achieving
   innovation in the research field of distributed computing (research
   is great but if you're an investor in a business you don't want a
   research breakthrough to be required before you can get a return on
   your investment).  Flush JSP/Tomcat due to its known sluggishness;
   replace with whatever Henry Houh at Empirix says is the current
   real-world champ (one of the benefits of being an MIT alum is that
   you have a network of colleagues on whom to draw).

4) flush MySQL and replace with Oracle 10g; get a discount by promising
   to automatically add lots of cool friends to Oracle employees
   ("CONNECT BY NOCYCLE" baby!)

5) meter the actual load on the database server.  Most programmers turn
   out to be bad at estimating where the bottleneck in a system is going
   to be and therefore optimize the wrong things.  If it turns out that
   "friend network" queries are dominating, cache the "who's a friend to
   whom" in an in-memory data structure.  Suppose that there are 10
   million users and each has 20 friends.  That's 200 million
   friendships to track.  Suppose further that each friendship requires
   64 bits to record (32-bit integers representing user_id and
   friend_id).  64 bits = 8 bytes.  8 bytes * 200 million = 1.6 GB or
   well within the capabilities of inexpensive servers (and remember
   that Friendster is nowhere near 10 million real users yet).  If we
   need to pull more information out about users, e.g., a bit vector of
   their interests or longitude/latitude, we can do it in the same data
   structure.  This will make most queries into the friendship network
   really cheap.  [Note that this is more or less how Orbitz works; the
   entire airline schedule and fare database is pulled out of the old
   mainframe into a set of PC application servers.]

Photo at upper right from http://www.photo.net/philg/ny/.
philg@mit.edu