You are on page 1of 6

Discussion

A discussion forum is one of the most basic tools for computer-supported cooperation among human
beings. User A can post a question. User B can post an answer. User C can view both question and
answer and learn from the exchange. In a threaded forum, User D has the choice of posting a response
to User A's question or to User B's response. In a Q&A format forum, Users D, E, and F can post
responses to User A's question, and the responses will simply be presented in the order that they were
submitted. With minor tweaks to the presentation layer, a discussion forum system can function as a
personal commentable weblog.
In this chapter you'll prototype a discussion forum, conduct a usability test, and then refine your system
based on what you learned from observing the users.

Discussion Forum as Community?


A well-designed discussion forum can by itself fulfill all of the requirements for a sustainable online
learning community. Recall that these elements are the following:
1. magnet content authored by experts
2. means of collaboration
3. powerful facilities for browsing and searching both magnet content and contributed content
4. means of delegation of moderation
5. means of identifying members who are imposing an undue burden on the community and ways
of changing their behavior and/or excluding them from the community without them realizing it
6. means of software extension by community members themselves
An early example of the forum-as-community is USENET, which was started in 1979 and is also
known to old people as "NetNews" and to young people as "Google Groups". Each newsgroup is a
more or less self-contained community of people interested in a particular topic, collaborating through
a threaded discussion forum. A good example is rec.aviation.soaring, where people talk about
flying around in airplanes without engines.
In a USENET group the magnet content can be any longish posting from a recognized expert. Keep in
mind that the number of people using a group such as rec.aviation.soaring is fairly small—most
people get nervous in little planes and even more nervous in a little plane with no engine. An analysis
of October 2004's activity by Marc Smith's Netscan service (netscan.research.microsoft.com) shows
that the group had only 174 "Returnees". Thus it will be fairly straightforward for these core users to
recognize each other by name or email address. A typical magnet content posting in a newsgroup is the
FAQ or frequently asked questions summary in which each question has an agreed-upon-by-the-group-
experts answer.
The means of collaboration in the USENET group is the ability for any member to start a new thread or
reply to a message within an existing thread. In the early days of USENET, the means of browsing and
searching were reasonably good for recent messages, but terrible or non-existent for learning from
older exchanges. Starting in the mid-1990s, Web-based search engines such as DejaNews provided fast
and easy access to old messages.
USENET has traditionally been weak on the fourth required element ("means of delegation of
moderation"). Not enough people have volunteered to moderate, software to divide the effort of
moderating a single forum among multiple moderators was non-existent, and the news protocols had
security holes that let commercial spam messages through even on moderated groups. For an overview
of the circa 2001 state of the art, read http://www.landfield.com/usenet/moderators/handbook/. For a
discussion of spam in history, see "Origin of the term 'spam' to mean net abuse" by Brad Templeton at
http://www.templetons.com/brad/spamterm.html, a site that contains a lot of other interesting articles
on the history of Internet.
Where USENET has fallen tragically short is element 5: "Means of excluding burdensome people."
Most USENET clients include "bozo filters" that enable an individual user to filter out messages from a
persistently troublesome poster. But there is no collective way for a group to exclude a person who
consistently starts irrelevant threads, spams the group, abuses others, or otherwise becomes
unwelcome.
With regard to element 6, software extension by community members themselves, USENET has done
remarkably well. USENET servers and clients tend to be monolithic C programs where small
modifications can have catastrophic consequences. On the other hand, the average user of the early
Internet was a skilled software developer. So if not every USENET user was a programmer of
USENET tools, it was at least safe to say that every programmer of USENET tools was a user of
USENET.

Beyond USENET
If the online learning community that you build is only as good as USENET, congratulate yourself. The
Google USENET archive contains 700 million messages from twenty years. Hundreds of thousands of
people have gotten the answers to their questions, as shown in Figure 8.1.

Figure 8.1: A December 25, 2001 USENET exchange in the group rec.aviation.soaring regarding
mounting a camera on the wing of a glider. Notice that the first answer comes less than two hours after
the question was posted.
When building our own database-backed discussion forum system, there are some simple
improvements that we can add over the traditional USENET system:
• an optional "mail me when a response is posted" field
• e-mail summaries or instant alerts
• up-to-the-second full text indexing (assuming your RDBMS supports it)
• secure transmission of data to and from the bboard via SSL
• collaborative moderation via admin pages to delete stale/ugly/whatever messages
• older postings browsable by category
More dramatic improvements can be obtained with attention to element 5: "Means of excluding
burdensome people." Your software can do the SQL query "show me users who've submitted questions
that were deleted by a moderator as redundant" and then automatically welcome those users back to the
forum with an interstitial page explaining how to search and browse archived threads. If the online
community is short on moderator time, it will make a lot of sense to query for those users whose
postings have resulted in moderator intervention. If it turns out that 0.1 percent of the users consume 50
percent of the moderators' time, perhaps it is better to ban those handful of users and thereby double the
community's available moderation resources.
As the semester proceeds, you'll discover another advantage of building your own discussion forum,
which is that it becomes an integrated part of your service. All of a user's contributions in different
areas, including the discussion forum, are queryable from a single database and viewable on a single
page.

Exercise 1
Visit five sites on the public Internet with discussion forums, one of which can be the Medium Format
Digest forum at photo.net (http://www.photo.net/bboard/q-and-a?topic_id=35). For each site gather the
following statistics:
• given an already-registered user, the number of clicks required to post a message
• the number of clicks required to go from the top-level forum page to a single thread
• if there are 20 postings within a thread, the number of clicks required to view all the text within
all of the postings
• the number of clicks required to view the subject lines of all archived postings in a particular
category
List the user interface and customer service features that you think are the best from these five sites and
give a brief explanation of why each feature is good.

Discussion for Education


Recall from the introduction that our goal in working through this text is to build an online learning
community. An active discussion forum might be evidence of a tremendous amount of member-to-
member education or it could merely be a place where loudmouths enjoy seeing their name in print.
Moderation is the first line of defense against postings that aren't responsive to the original question or
helpful to the would-be learners.
Building more structure into a discussion forum is an option worth considering, especially if your
discussion forum is supporting an organized class. The Berkman Center at Harvard Law School (HLS)
was a pioneer in this area. The teachers at HLS weren't happy with the bias in favor of early responders
inherent in a standard discussion forum system. The first response to a question gets the most readers
because it is near the top of the page, so it might be more ego-gratifying to be first than to spend more
time crafting a thoughtful response. This shortcoming was addressed by writing what they call a semi-
synchronous discussion forum. Responses are collected for a period of time, but not made public until
the deadline for responses is reached. The system is called the Rotisserie.
An additional capability of the Rotisserie is the ability to randomly assign participants to respond to
postings. For example, every student in a class will be required to post an essay in response to a
question. After a deadline lapses, those essays are made public. The Rotisserie then assigns to each
participant the task of responding to a particular essay. Every student must write an essay. Every essay
gets a response. A particularly good or controversial essay might get additional responses. A
particularly loudmouthed participant might elect to respond to many essays.
See http://h2o.law.harvard.edu for more information about the Rotisserie, to try it out, or to download
the software.
Suppose that your online learning community is more open and fluid. You can't insist that particular
people respond at all or that people respond on any kind of schedule. Is there anything that can be done
with software to help ensure that all questions get answered appropriately? Yes! Build server-mediated
mentoring.
Server-mediated mentoring requires, at a minimum, two things: (1) a mechanism for novice members
(mentees) to be connected with more experienced members (mentors), and (2) asking people who post
questions whether or not their question has been adequately answered. To make the service as effective
as possible, you'll probably want to add at least the following: (3) automated reminders from the server
to mentors who have left mentees hanging, and (4) rewards, rankings, and distinguishing typography to
recognize community members who are answering a lot of questions and mentoring a lot of novices.
Imagine the following interaction:
• Joe Novice, never having kept an aquarium before, visits a local pet store and finds himself
attracted to the intelligent colorful fish in the African Cichlid tank.
• Joe Novice, after a Google search, visits world-o-cichlids.org, reads the articles on fish that live
in Lake Malawi, and finds that it raises additional questions, which he posts in the discussion
forum.
• Lured by email notifications of replies to his questions, Joe returns to world-o-cichlids.org to
sift through them. As soon as Joe logs in, his "workspace" page shows all of the questions that
he has asked, all of which are initially marked "open". Having some difficulty sorting out
conflicting responses, Joe clicks on the "get a mentor page," explaining that he is a complete
beginner with the goal of keeping African Cichlids.
• Jane Experienced visits the "be a mentor page" and browsing through the requests sees that
most people asking for help want to keep South American cichlids, with which she has no
experience. However, Jane has had an African tank for five years and feels confident that she
can help Joe. She agrees to mentor Joe.
• Jane's "workspace" page now contains a subsection relating to her mentoring of Joe and lists his
currently open questions. Jane clicks on a question title and, seeing that none of the current
responses are truly adequate, posts her own authoritative answer.
• A week later Joe returns to world-o-cichlids.org and finds that his list of "open" questions has
gotten quite long and that in fact many of these questions are no longer relevant for him. He
clicks on the "close" button next to a question, and the server asks him "Which of the responses
actually answered the question for you." Joe clicks on a response from Ned Malawinut, and the
database records (1) that the question has been adequately answered and should no longer
appear in a mentor's workspace, and (2) that Ned Malawinut has contributed an answer that was
seen as useful by another member.
• Joe has a question that he thinks might be ridiculous and is afraid to try it out on the community
at large. When posting he checks the "initially show only to my mentor" option, and the
question gets sent via email to Jane and appears in her workspace.
• Jane returns to the server and decides that Joe's question is not so easy to answer. She marks it
for release to the general membership.
• Two weeks later Jane gets an email from the world-o-cichlids.org server. A summary of some
discussion threads that she has been following constitutes the bulk of her email, but right at the
top is a note "You haven't logged in for more than a week and Joe, whom you're supposed to be
mentoring, has accumulated three questions that haven't been adequately answered after five
days." (This prodding mechanism addresses the issue revealed when a large management
consulting firm surveyed its employees asking "Whom are you mentoring?" and "Who is
mentoring you?" When matching the responses, there was surprisingly little overlap!)
How can you estimate the effort required in building the full user experience example? Start by looking
at the number of new tables and columns that you'd be adding to the system and the number of new
URLs to which the server would be responding. Then try to find a subsystem that you've already built
for this project with a similar number of tables and page scripts. The implementation effort should be
comparable.
Let's start with the data model first. To support requests for and assignment of mentors, you'll need at
least one table, mentor_mentee_map with the following columns: mentee, mentor (NULL, if not
assigned), date_of_request, date_of_assignment, mentee_goal. To support the query "who is the
currently connected member mentoring" and build the workspace subsection page for Jane, you'll want
to add an index on the mentor column. To support the query "are there any mentors who should be
notified about a message posted by a member", you would add an index on the mentee column. If you
were to make this a concatenated index on mentee, mentor, it would help the database identify
outstanding requests for mentors (mentor is NULL) efficiently for the "be a mentor page".

Attempting to support the open/closed question status display and the query "Which members have
answered a lot of questions well?" might make you regret some of the data model decisions that you
made in the preceding exercises and/or in the "Content Management" chapter exercises. In the "Content
Management" chapter we have a headline asking "What is Different about Discussion?" above the
suggestion that the content_raw table can be used to support forum questions and answers. If you
went down that route and were implementing the mentoring user experience, this is where discussion
would diverge a bit from the rest of the content on the site. You need a way to represent in the database
management system whether a discussion forum question is open or closed. If you add a
discussion_forum_question_status column to the content_raw table you'll have a NULL column
value whenever the content item is not a discussion forum question. That's not very clean. You may
also be adding a closed_question_p boolean column to indicate that a forum posting had been
identified by the original questioner as having answered the question. This will be NULL for more than
99 percent of content items. That's not a storage efficiency problem, but it is sort of ugly.
An alternative to adding columns is to build some sort of bag-on-the-side table recording which
questions are open and closed and which answers closed them. To decide whether or not this is a
reasonable approach, it is worth starting by asking "In what percentage of queries will the helper table
need to be JOINed in?" When presenting articles and comments, you wouldn't need the table. When
presenting the discussion forum to a public user, i.e., someone who wasn't logged in, the discussion
forum page scripts wouldn't need the table data. You might need these data only when serving
workspace pages to members and when serving an individual discussion forum thread to a logged-in
member. It might be worth considering a table of the following form:
-- content_id is the primary key here; it is possible to have at most
-- one row in this table for a row in the content_raw table

create table discussion_question_status (


content_id not null primary key references content_raw,
status varchar(10) check (status in ('open', 'closed')),
-- if the question is closed the next column will contain
-- the content_id of the posting that closed it
closed_by references content_raw
);

-- make it fast to figure out whether a posting closed a question


create index discussion_question_status_by_closed_by on
discussion_question_status(closed_by);
As the community gains experience with this system, it will probably eventually want to give greater
prominence to responses from members with a history of writing good answers. In a fully normalized
data model, for each answer displayed, the server would have to count up the number of old answers
from the author and query the discussion_question_status table to figure out what percentage of
those were marked as closing the question. In practice, you'd probably want to maintain a denormalized
metric as an extra column or columns in the users table, perhaps columns for n_answers_posted and
n_answers_closing, counts maintained by nightly batch updates or database triggers.

Supporting the "initially show only to my mentor" option for new content would require the addition of
a show_only_to_mentor column to the content_raw table, where it could be used for discussion
forum postings, comments on articles, and any other content item. Rather than changing all of the
pages that use the content tables it would be easier to update the SQL views that those tables use, e.g.,
articles_approved, so as to exclude content that should be shown only to a mentor.

Some new page scripts would be required, at least the following:


• /workspace — a page or sidebar providing a logged-in member with links to previously asked
questions and possibly other information as well, e.g., new content since last visit, recent
content by members previously marked as interesting, etc. A mentor viewing this page would
also be offered links to content marked "show only to my mentor" by the author.
• /mentoring/request-form — a page whereby a member can sign up to request a mentor
• /mentoring/request-confirm — a script that processes the preceding form and adds a row to the
mentor_mentee_map table

• /mentoring/sign-up — a page that shows members who are requesting mentors, with at least the
first 200 characters of their request underneath
• /mentoring/request-detail — a click-down page showing more details of a member's request for
a mentor
• /mentoring/sign-up-confirm — a script that accepts a member's agreement to serve as a mentor,
updating a row in the mentor_mentee_map table

• /mentoring/admin/ — a page showing summary statistics for the service


Modifications would likely be required to the following pages:
• buttons would be added to the page that shows a discussion forum question-and-answer
exchange to "mark this answer as closing the thread", to be displayed only to the user who
asked the question and only when the question has not previously been marked as closed
• the page that displays a community member's profile would be augmented with information as
to the number of members mentored and the number of question-closing responses submitted
For the purposes of this course, you need not implement all of these grand ideas, and indeed some of
them don't make sense when a community is just getting started because the number of members is so
small. If, however, some of these ideas strike you as interesting consider adding them to your project
implementation plan.
Exercise 7: Refinement Plan
Prepare a plan for how you're going to improve your discussion forum system, including any changes
to data model, page flow, navigation links, page layout, annotation (help text), etc. Place this plan on
your team server at /doc/planning/YYYYMMDD-discussion. (If you name files with year-month-day
in the beginning, they will sort in order of creation.)

Exercise 8: Client Signoff


Ask your client to visit the discussion forum user and admin pages. Ask your client to review your
usability test results and refinement plan. This is a good chance to impress your client with the
soundness of your methodology. If your client responds via email, make that your answer to this
exercise. If your client responds orally, make notes from that conversation your answer.

Exercise 9: Execute
After consultation with your teaching assistant, execute your planned improvements.

Time and Motion


One programmer who has mastered the basics of Web/db scripting can usually whip out a basic
question-and-answer forum in 8 hours. The team together will need to spend about one hour preparing
a good in-class presentation. The team together will generally require 3 hours to conduct and write up
the user test. Talking to the client and refining the forum will generally take at least as long as the
initial development effort.

You might also like