What Makes Goodreads a Great Website?

Arjen Vrielink and I write a monthly series titled: Parallax. We both agree on a title for the post and on some other arbitrary restrictions to induce our creative process. This time we decided to write about what makes Goodreads a great website. First we sat together for an hour and used Gobby to collaboratively write a rough draft of the text. Each of us then edited the draft and published the post separately. You can read Arjen’s post with the same title here.

Goodreads.com
Goodreads.com

What is Goodreads?
Goodreads is Facebook and Wikipedia for readers: a social network of people that love to read books, full of features that readers might like. It allows you to keep many “shelves” with books that can be shared with other people on the site.

Great Features
Here are some of the features (in no particular order) that make Goodreads work so well:

  • The site is not only useful when you are a member. Even if you are not logged in it still is a pleasant site to read and browse for book lovers.
  • It allows you to keep track of your own, yout friends and “the crowds” books. If you see an interesting book you can put it on your to-read shelf, if a friend reads an interesting book than he or she can recommend it to you.
  • Statistics can suggest recommendations based on my shelves, reviews and friends.
  • There is a distinction between friends (a symmetric relationship) and followers (an assymetric relationship).
  • There is a book comparison feature: it finds the books you have both read and compares the scores you have given to those books.
  • It is very easy to invite your friends into the site. You can put in their email address, or you can give Goodreads access to your webmail contacts (sometimes this is a questionable thing, but Goodreads isn’t to pushy (it doesn’t send out Tweets without you knowing it for example)).
  • They have a great “universal” search box where you can search books on author, title or isbn from the same field.
  • It makes use of Ajax in the right locations, allowing you to update small things (“liking” a review, noting what page you’ve reached, handing out stars to a book) without having to reload the page.
  • The user profile page is related to the contents of the webservice: for example, it allows you to say who your favourite authors are.
  • The site supports many different ways of viewing and sorting your shelves. You can look at covers or at titles and sort by author, by score, by last update and more.
  • Before building a great iPhone app, Goodreads made sure their website had a great mobile version of their website. When you access the website with a mobile browser it automatically redirects to a mobile version of the website, so even if you are accessing the site with your Windows Mobile device you have a great experience.
  • Not only is it very easy to put data into the Goodreads ecosystem, it is also very easy to get your data out again. You can download a CSV file with all your books (including the data you added like reviews, date read, your rating and the metadata about the book that Goodreads has added like the ISBN or the average rating). The smart import feature looks at an HTML page (e.g. an Amazon wishlist page) and imports all the ISBNs it can find in the source code of the page. Like any good webservice it imports files that are exported from their competition (Shelfari, Librarything and Delicious library).
  • There seems to be an evolving business model. Initially there were only (onubtrusive) adds, but now they are starting to sell e-books, integrating this into the social network.
  • Often when you read a book there are sentences or passages which really impress or inspire. Most of the times you then forgot these. Goodreads allows you to favourite and rank (and thus collect) quotes easily by author or by book. You can add and export quotes as well.
  • Sharing your Goodreads activity to other important webservices is built in. There are integrations with Facebook, Twitter, WordPress Blogs and MySpace. Goodreads also provides embeddable widgets that you can put on another website (e.g. a box with the most recent books you have read). A simple integration allows you to instantly find a book that you are looking at in Goodreads in your favourite online bookstore. And of course there is the ubiquitous RSS.
  • A site like Goodreads get is value from the data that its users put in. Goodreads allows this at many levels. There are trivial ways of adding information (i.e. saying you like a review by clicking a single link, allowing Goodreads to display useful reviews first), but there are also ways of adding information that take slightly more effort. For example, it is fairly easy to get “librarian” status which shows the site trusts their users. As a librarian you can edit existing book entries. A low entrance level is key to crowd sourcing. Another way to involve people is to allow them to add their own trivia that other users can try and answer in trivia games.
  • It allows users to flag objectionable content.
  • Goodreads has its own blog, keeping you up to date about the latest features and their direction.
  • It has an element of competition, you can see how many books are on your shelf and how many books are on other people’s shelf, but there are more metrics: you can see who has written the most popular reviews, your rank among this week’s reviewers, or who has the most followers
  • It has a great and open API. This allows other people to build services on top of Goodreads. The potential for this is huge (the very first Goodreads iPhone app was not made by Goodreads itself, but was made by a Goodreads enthousiast) and I don’t think we have seen what will be possible with this yet. A lot of the data that Goodreads collects is accesible through the API in a structured and aggregated form. It should be very easy for other book related sites to incorporate average ratings from Goodreads on their own pages for example.
  • It is in continual beta and their design process seems to be iterative: it keeps evolving and adding new features at a high frequency like the recently added stats feature.

My current stats for 2010
My current stats for 2010
  • It is easy to delete your account, deleting all your data in the process. This makes for complete transparancy about data ownership, an issue that other sites (Facebook!) have been struggling with lately.
  • It has a kind of update stream which let’s you easily keep up to date with your friends, groups and favourite authors status.
  • The service has ambitious and lofty goals: “Goodreads’ mission is to get people excited about reading. Along the way, we plan to improve the process of reading and learning throughout the world.” (see here). I do believe that this clear mission has led to many features that wouldn’t have been there otherwise. For example, there is a book swap economy built into the site allowing people to say that they own the book and are willing to swap it for other books. Another book lovers feature are the lists. Anybody can start a list and people can then vote to get books on the list. Examples of list are The Movie was better than the Book or Science books you loved. Another feature are the book events. You can find author appearance, book club meetings, book swaps and other events based on how many miles away you want these to be from a certain city or in a certain country. Of course you can add events yourself, next to the ones that Goodreads imports from other sites, and you can say which events you will attend, plus invite friends to these events.

How Goodreads could improve
As said, Goodreads is continuously changing, there are still some things that require some change in the right direction:

  • Ocassionally the site feels a bit buggy. I have had a lot of grief updating the shelves of books using the mobile site with it not doing the things I wanted it do.
  • It is not always clear what kind of updates are triggered by an user action. I am not sure what my friends see. Sometimes you find your Facebook Wall flooded with Goodreads updates because your friend found a box of long lost books in the attic which he entered in an update frenzy.
  • Usability: Some features are hard to find. Like the new stats feature discussed above, you can only find it hidden away on the bottom left of a page in some obscure menu. Other features are hard to use, requiring many more clicks than are actually necessary.
  • They could improve on localisation and on the translations of books. In your profile settings you can select your country, but you cannot select in which languages you are able to read books.
  • The graphic design of the site isn’t top notch. When people initially see Shelfari, it might have more appeal just because it looks a tad better.
  • In-app mailing or messaging systems are always beyond me. Goodreads also has an “inbox” where you can send mail to and receive mail from your Goodreads friends. I would much rather use my regular mail and use Goodreads as a broker so email addresses can be private.

Some thoughts on the process of writing this post
Gobby is a multi-platform text editor that allows multiple people to work on the same text file in realtime. It uses colours to denote who has written what.

A Gobby Window
A Gobby Window

This was an experiment to see how it would feel to work like this and whether it would be an efficient and effective way of working together. I thought it was quite successful as we produced a lot of material and helped eachother think: building on the point of the other person. It was helpful to do an initial draft, but it does require some significant editing afterwards. I thought it was interesting to see that you feel no compunction to change the other person’s spelling mistake, but that you feel less free to change the contents of what they are writing.

This time we were sitting opposite each other while writing. In the future it would be interesting (firewalls permitting) to try and do this over a longer distance. Then the unused chat-window might become more useful and important.

You can download the original Gobby file here (it requires Gobby to make sense).

Hopefully this post about Goodreads is an inspiration to anybody who tries to build a social network around a certain theme and remember: if I know you I would love nothing more than to be your Goodreads “friend”.

A Design Concept For a Mobile Moodle Application

Arjen Vrielink and I write a monthly series titled: Parallax. We both agree on a title for the post and on some other arbitrary restrictions to induce our creative process. For this post we agreed to create a design concept for a mobile Moodle application. The concept should include screen mockups. You can read Arjen’s post with the same title here. This month we are delighted to have two guest writers writing about the same topic. Marcel de Leeuwe (read his post here) and Job Bilsen (his post can be found here).

Mobile applications have taken off. This is largely due to the trailblazing work that Apple has done with the iPhone and the App Store. If you have been watching my Delicious feed, you will have noticed that I too have succumbed and will be part of the iPhone-toting crowd (I will write more about me losing my principles later).
Nearly every web service that I use has a mobile application. Examples are Last.fm, Flickr, WordPress, Dropbox, NY times, Paypal and more, the list is endless. Moodle, the web application that I use most often, does not have a mobile app yet. There have been a couple attempts at creating themes that display well on a mobile (such as here). These mobile themes usually try to deliver all of Moodle’s functionality, which often limits their phone specific interaction and their user friendliness. Other applications use JAVA applications that gives people access to specific Moodle functionality (examples here and here).

It would be great to have a true mobile Moodle application. Here are some initial thoughts for a design.

Audience
The audience for this Moodle application would mainly be students/participants. I want the functionality to focus on things that are easily delivered on a mobile platform. I don’t think grading and reporting interfaces lend themselves well to a smaller screen. The things that people like to do with a mobile device are usually: seeing what has happened/is happening, plan and communicate. This Moodle application will enable the users of a Moodle installation to do exactly those things.

Getting rid of the course paradigm
Moodle is extremely course centric. I have always thought that this has some great advantages, mainly that all the learning is very contextual. Students, however, often have to “multi-course” (doing multiple courses at the same time). A mobile application should make the most urgent or current events, actions and resources bubble to the top. This requires the application to get rid of the course paradigm and show a personal page per user.
People that have used Moodle for a while might know of the “My Moodle” page. This page also tried to pull up the most relevant information for a particular user, but would still display this information on a course by course basis.

This application will consist of four main screens. Each screen has its own icon at the bottom of the screen that stays available at all times. Each screen could of course lead to other screens that take you deeper into the Moodle installation.

1. Recent activity stream
Facebook and Twitter have really taught us the use of activity streams. These pages display short status messages about what is happening in reverse chronological order. Moodle has had an activity stream since its inception: the recent activity block. This block shows what has been happening in a particular course. Examples are forum posts, work being handed in or materials being added by the teacher.
This screen will work in a similar way, but will include all the courses a user is participating in. I would imagine that each update on the screen would include a date and a time, would link to an extended version of the update and would include a user image if the update concerns another user, or an activity icon if it concerns a particular activity. The newest updates would be at the top of the screen and the user would be able to scroll down to see older entries (very similar to Twitter). See below for an example:

Recent Activity
Recent Activity

You would have to think about each Moodle module and decide what a status update would look like for that particular module. Some examples of events that could trigger a status update:

  • A forum post is added to a course of which the user is a member.
  • An activity becomes available (either because it was added or because it had certain time that it would become available, like the choice or assignment activity) or a deadline has passed.
  • An entry is added to a database activity or a glossary that the user has access to.
  • A topic or week has been made current by the teacher/facilitator.
  • A message has been sent to the user.
  • The user hands in work for an assignment, fills in a choice, starts a lesson, gets the results for a quiz or starts a SCORM object.
  • A change is made to a wiki page that the user has access to.

These status updates could announce themselves on the home screen in a similar way to how the mobile platform shows that you have new email messages: by showing how many new updates are available.

2. Upcoming events
This screen is also an extension of existing Moodle functionality made course independent. Conceptually it is what you would see if you would scroll up on the recent activity screen. Upcoming events that can be displayed are:

  • Anything that is in the user’s calendar.
  • Activities that will become available or that have a deadline.
  • Courses that will start and that the user is enrolled in.

This screen would look very similar to the “Recent Activity” screen as shown above.

3. Social: contacts, interests and messaging
A mobile device is used for communications and a mobile Moodle application should facilitate that. This screen is an alphabetical list of all the users that a student/participant shares a course with, combined with an alphabetical list of all the interests that a user has put in their profile and all the courses the user is enrolled in. See example:

Social
Social

Selecting a user will take you their profile page. This page will focus on the ways that the user can be contacted. You can message the user from here, call (or Skype) them, send them an email and click on the links to their external websites (a blog, Twitter, Facebook, etc.). See this example:

Profile page
Profile page

Selecting an interest or a course will apply a filter to the alphabetical list. It will now only show users that share this interest or this course. It might allow the user to contact all these users in one go (if this role has been given the permission for this capability).

4. Browsing courses, activities and resources
I really like a side scrolling drill down navigation (examples are the way that email works on the iPhone or the “Slider view” on Grazr). A mobile Moodle application should allow the user to navigate to activities and resources in their course by constantly drilling down. This can be done it two ways: course centric or activity-type centric. The application should probably support both.
The first screen shows a list of all the courses the user is participating in and below that a list of all the activity types that exist in Moodle.
Clicking on a course will make the previous screen slide to the left and display a new screen. The first option on this screen will be called “Course overview”. If you click on this you will see all the section/topic summaries, all the activities and resources and all the labels in their correct order (blocks are completely ignored in this mobile application). Below the course overview are links to the overview pages of each activity type. Clicking these will display all the instances of a particular activity or resource.

If you click on an individual activity or resource you will be shown that activity (again by making the screen slide to the left). What is shown here and what interactions are possible is dependent on the activity module. The minimum it would show is the title and the description. This would probably be the case for SCORM modules for example or for “upload a file” assignments. You would not implement a mobile SCORM player, nor will people likely have files for upload on their phone. The one activity that would benefit from being a bit richer would be the forum activity. It should be possible to follow and contribute to a forum discussion from the mobile Moodle application.

Technical considerations
The (start of a) functional design that I describe above will certainly have technical consequences (not to write obstacles). Below some of my first thoughts:

  • What platform? The nice thing about web applications is that you only have to develop them for one single platform: the platform that the server is using. Of course it would be possible to create a mobile version of a Moodle site, but this would negate some of the great things that a native application can do. We are now in the unfortunate situation that we have multiple mobile development platforms. The two obvious choices for mobile development would be an iPhone app and an app for Android. But what about people who use a Blackberry, or a Symbian or Maemo phone? I have no knowledge of how easy it is to port an Android app to the iPhone, but I do know that multiple platforms will be a reality in the next couple of years. You better write portable code!
  • Where does the code live? It is easy for Facebook to create an iPhone application. They run a single installation and can have server-side code and client-side code to make it all work. Moodle’s install base is completely decentralised. That means that Moodle installations will have to get some code that will allow a client to talk to it. In the client you will then need to be able to say what Moodle installation you want to connect to. This poses a couple of questions. Will a mobile Moodle app require a special server module? Will Moodle 2.0 expose enough of itself to an external API to make a client like I describe above possible? Should one client be able to plug into multiple Moodle installations at the same time? I am not a software architect, so I would not have any answers to these questions, but they will need to be resolved.
  • Performance? Moodle’s data structure is course-centric and not user-centric. Moodle currently does not have internal functions that deliver the data in a format that the Moodle client can use. I think that the query to deliver a recent activity feed that is cross-course and has the perspective of a single user is very complex and will create a huge performance hit on the server. Again, I am not an architect, but I would imagine that this requires a special solution. Maybe more push and less pull? More database tables? Server-side pre-caching? Who knows? I certainly don’t!
  • Roles/permissions/capabilities? Any new Moodle client that uses existing Moodle data (as opposed to new modules) needs to be very aware of any existing capabilities. All of these need to be checked before information can be shown to the user. I am sure this has further performance implications.
  • Online/offline? A lot of mobile applications cache their information so that a user can continue to use the application even if an Internet connection is not available (e.g. the New York Times app). Even though it might be useful for a Moodle application too, I wouldn’t put any initial effort into solving that problem. Smartphones that have decent application support function well in a context where there is persistent mobile broadband. It is therefore okay for the first version of mobile Moodle application to assume that it is online.

A note on prototyping/mockups
I used the excellent Balsamiq to create the mockups that go with this post. This easy tool delivers quick static results, although it lacks a bit of precision that I would like to have added. Moodle has Balsamiq integrated into the Moodle Tracker, making it trivial for anybody to add a user interface mockup to any issue. There are other tools that could be used to do iPhone prototyping. This blog post gives a good overview.

Continuing the dialogue
I would really like an application like this (or something similar) to come into existence. I look forward to working with other people with a similar interest (bored developers? Google Summer of Code students?). Let’s make this happen! Any and all comments are welcome…