Professional Documents
Culture Documents
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.
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.
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
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.
• /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
Exercise 9: Execute
After consultation with your teaching assistant, execute your planned improvements.