[Building Sakai] Thought Experiments for Sakai: Keep It Simple Like Twitter & Draw Good Boundaries Like Drupal

Nate Angell nate.angell at rsmart.com
Mon Mar 30 21:56:02 PDT 2009


The following is a blog entry posted here:
http://xolotl.org/xolotl/thought-experiments-sakai-keep-it-simple-twitter-draw-good-boundaries-drupal

I admit I've been lurking in a very slackernly manner in all the  
discussions in the Sakai community about content authoring, 3akai, UX,  
K2, Sakai NG and other unpronounceables, so I'm sorry if all this is a  
day late and a dollar short. Feel free to ignore me if you're part of  
Sakai and are way too far gone for any more input. After all, these  
are just thought experiments ;) If you're not part of Sakai, you might  
learn something about Drupal at least, so it may well be worth your  
time.

I draw some lessons here from Twitter and Drupal not to suggest that  
Sakai duplicate them, but rather that we hold those models in mind as  
we move Sakai forward. Even without these experiments, some of these  
ideas may be in our thinking about Sakai, so if they are familiar,  
take it as a vote of confidence. But if not, I'd like us to have at  
least thought through why we would not take them as inspiration or why  
we would choose another path.

In the lessons I draw from Twitter and Drupal below, I may come off as  
a bit of a zealot. Frankly, I have a greater appreciation for Twitter  
and Drupal as tools that I have for Sakai as a tool—my greatest  
appreciation for Sakai has always been for its community. But I would  
like to appreciate Sakai-the-tool as much or more than Twitter and  
Drupal, and I think I could, given the directions I see Sakai heading  
now.

But why Twitter and Drupal? When I'm thinking about all this Sakai  
stuff, my first thought is to reach for existing models. And the  
models I reach for are the handy ones. Why? Because there must be some  
reason I keep certain tools handy. There are lots of good tools, but  
the ones that fit so comfortably in my hand are well-worn for a  
reason. I also know them well—keen edges and ugly nicks—and so can  
draw the best lessons from them.

For those of you who live under rocks, Twitter is a microblogging and  
social networking service that has gotten a bit of press lately. A lot  
of people are using Twitter, and a lot of people don't get it at all.  
If you already use Twitter, great. If you don't get it, that's OK. You  
don't need to "get" Twitter to learn its lesson. There's only one,  
it's pretty big picture, and you won't have to tweet about doing your  
laundry or hear about mine just because you read about it.

Drupal is a mature web content management system/application toolkit,  
currently at version 6.10, with a very vibrant international community  
and strong commercial ecosystem. About 1,400 people attended the most  
recent DrupalCon in Washington DC.

Keep It Simple Like Twitter

Keep it simple. Open it up. Let the complexity come from everywhere.

John Ellis has kidded that Twitter has become so popular mostly  
because it is so easy to make new words that start with "tw":  
twavatar, tweeple, tweetup, twistory, etc, and if you haven't heard  
them all, check out the twictionary: http://twictictionary.com

I think John's almost right. It's about the simplicity and what people  
do with it. I think Twitter's rise has a lot to do with their focus on  
keeping it simple: 140 character posts, direct, addressed, or pure  
statement, public/private, following/followers, search. Twitter keeps  
it simple and—just as importantly—offers a public API that lets the  
world layer an almost unfathomable and—to the Twitter team I'm sure— 
unimagined variety of interfaces, uses and extensions based on  
Twitter's simple service.

In other words, Twitter knew what it was doing, but it didn't expect  
that what it was doing was all that could be done.

Neither can Sakai. Looking ahead: we should focus, keep it simple, do  
it well, and open it up, so that everything we can't yet imagine can  
hang off our work.

Draw Good Boundaries Like Drupal

One of the most crucial decisions for any information machine is to  
decide how specific it wants to be and where it will draw boundaries  
around what it will do.

Every piece of software I've been involved with seems to follow the  
same general development pattern: In the beginning, software is built  
to meet specific needs in a certain context. As more needs are layered  
on over time, the software becomes either more cluttered or more  
generalized—or both—and gets rather messy. No one knows anymore  
exactly what it is for or where its boundaries are, but we end up  
tethered to it in all its messy complexity.

Take MS Word, which is both highly generalized (name something you  
CAN'T do with Word) and overly cluttered (you have to manage the  
TOOLBARS in Word). At this point, Word is really neither a great word  
processor nor is it powerful enough to be our main content management  
interface. And yet we use it for both. We are stuck to this big, messy  
machine and we can't get loose (assuredly, there are also some other,  
non-technical reasons we are stuck to Word).

Sakai also started out meeting specific needs. And over time, Sakai  
too has become rather cluttered. Now it seems we are clearly at a  
turning point where we want to generalize. I think our success will  
depend on where and how we map Sakai's boundaries as we clean things  
up. Drupal provides an instructive model in the cartography of  
information machines.

Caveats: There are other models that might be just as instructive.  
Drupal is just the piece of software I know best that, in my opinion,  
matches Sakai's stature and has done a good job defining itself as an  
information machine. There are also many valid criticisms of Drupal.  
For example, I would never argue that Drupal's user interface is  
ideal. The lessons I think Sakai can take from Drupal are at a deeper,  
architectural level.

First, like Twitter, Drupal has done a good job of drawing boundaries  
around what should be core and what should be left outside. Drupal  
core is pretty clean, focused on key, common functions. Meanwhile, in  
Drupal's contribution space and beyond, it is rather messy. That is  
exactly as it should be. Good stuff comes out of that mess and some of  
it makes its way into Drupal core when the time and scope is right.  
Other stuff outside is fully mature and absolutely essential—for some.  
And for that reason, it will never become core, which is exactly as it  
should be. Core should not be defined by maturity, but by generality.  
There are a lot of ways that the Drupal community works to support  
both high innovation in the periphery and healthy boundaries at the  
core. Sakai should think carefully about where we put our borders and  
how we will support work inside and out.

Second, Drupal has done a good job of generalizing, focusing and  
simplifying its core functionality, and making core functions easily  
available to peripheral tools. If you do it right, all you need to  
build into a Drupal module is the specific functionality you  
need...everything else is a call to core. This makes it incredibly  
easy and quick to add functionality to Drupal—which fosters innovation— 
and also ensures that contributed modules participate fully in the  
larger Drupal machine. As we collaborate to define and build Sakai's  
next generation, we should look to mature models like Drupal that have  
a head start on clarifying and exposing core functionality.

Those are the general lessons I draw from Twitter and Drupal, so if  
you've had enough, you can stop reading here. Following are some more  
specific examples I draw from Drupal that relate to some of our recent  
discussions in Sakai.

Content

Drupal starts with the idea that (almost) everything is a piece of  
content, starting from the same place on a conceptual and  
technological level as a "node." In Drupal, you augment the structure  
and/or functionality of these generic nodes by "decorating" them with  
additional structured data fields, workflow, etc. This way, all Drupal  
core has to concern itself with is the common structure (eg, common  
metadata like author, creation timestamp, etc) and common  
functionality (eg, access, CRUD, versioning, validation, input, etc)  
of nodes. More specific structure and/or functionality gets layered  
onto the basic node either through generic admin interfaces (eg, the  
Content Construction Kit, or CCK) or more tailored modules that make  
specially augmented nodes for specific purposes.

Want to create an event record? Create a new "event" content type, add  
a timestamp field that uses a mini-cal data entry widget. Click,  
click, done. Add location? Just decorate your event content type with  
a location field—oh, and then you'll have all the magic of a host of  
map integration modules at your disposal. Click, click, done. Want  
your events to link to location profiles? Create a separate "location"  
content type and add a node relation field to your event content type  
to link each event to a profile of its location. There, you just built  
a dynamic event web application in 15 minutes without calling your  
code monkey.

Another key Drupal module—Views—provides a generic query and output  
service for content. Need a table listing of all content meeting  
certain parameters, paginated in groups of 25 with sortable columns?  
Click, click, done. Want to offer that same content as a feed? Click,  
click, done. Want some completely different bucket of content,  
organized and presented in some other way? Again, click, click, done— 
and almost always with no coding required.

By generalizing core content in this way, Drupal handles it all  
consistently, but at the same time makes it easy to customize content  
for even the most complex needs—often with no coding required. Is it  
so easy faculty could do it? Maybe not without training, but you may  
not want end-users defining new content types willy nilly anyway. What  
the Drupal model offers is a way to lower the bar for meeting  
specialized content needs to a level that they can be met in minutes  
by someone with only a bit of training: a faculty power user,  
instructional designers, help desk staff, student assistants—crikey,  
even I can do it. Also, did I mention that Drupal content type  
definitions are exportable? Yes, you can define, export and share  
specialized content types.

Drupal understands that content creation and display is a core  
function, but it doesn't expect to know what YOUR content needs to be.  
Sakai would benefit with generalizing its content handling to Drupal's  
degree. As educators, we may feel that we are well-placed to define  
what a syllabus, a quiz, a discussion, a lecture podcast, or a  
portfolio should be. But as technologists, we will serve all the  
unforeseen ideas for what educational content might be far better by  
designing a solid, general framework on which our current—and future— 
ideas can be made manifest.

Taxonomy

 From the start, Drupal anticipated that taxonomy—which is just a  
fancy word for categorization or tagging—was an essential core  
function. Drupal enables you to define any number of category  
vocabularies, each having special characteristics (eg, freetagging,  
hierarchy, etc), each holding any number of terms, and each related to  
whatever specific content types you desire. Thus any content in Drupal  
can be categorized in multiple ways, with highly structured categories  
or freetag folksonomies—or both—for different purposes. Good stuff is  
baked into core, like returning content matching various categories by  
simply including boolean queries in the URL.

Following the model I've been stressing of core simplicity enabling  
unanticipated innovation, Drupal modules make use of the basic, core  
taxonomy service to do all sorts of unexpected things, like category- 
based access control, or category-based organic group creation and  
management. With taxonomy as powerful as Drupal's baked into core,  
Sakai too could enable all sorts of things that we may not have yet  
imagined.
Theming

Drupal's core presentation layer is the icing on the cake, which is  
exactly what presentation should be: icing. There's nothing worse than  
finding presentation baked into deeper levels of software, where it's  
static and hard to change. Drupal handles presentation as the final  
layer, enabling design to be very flexible and easy to modify. Want  
every user to be able to choose between three entirely different  
designs? Just load three themes and let the users choose for  
themselves. Need to offer a mobile version of your site? A dedicated  
mobile URL and/or some user agent sniffing can automatically deliver a  
theme optimized for mobile devices—oh, and there's a module that does  
all that for you (something you'll find again and again in Drupal).  
Need that new content type you just made to look different than every  
other piece of content on your site? Drop a custom theme template  
named for that content type in your theme's directory and your generic  
theme gets overridden automatically with your custom design—just for  
that special case.

The power of this theming model came when Drupal core stopped worrying  
about what the perfect presentation should look like and instead  
offered a way to deliver ANY presentation predictably with easy-to- 
build templates. In Sakai, the same power and flexibility would take  
us past the question of what Sakai SHOULD look like to the simple  
answer: Sakai looks like whatever you want it to look like.

Layout

Our next-generation Sakai authoring experiments are delivering some  
juicy tools to place different pieces of content and widgets in  
different parts of a page. Drupal offers two models that may help us  
refine the good work we're already doing.

Drupal core has long had the concepts of regions and blocks. Regions  
are areas of a page defined by a theme. A theme can have any number of  
regions laid out in any way. Blocks are bite-sized content or  
functionality: anything from a static welcome message, to a listing of  
recently updated content, to a user log in form. Blocks can be created  
individually by users or made available programmatically by Drupal  
core or contributed modules. Drupal core offers tools to map blocks to  
different page regions, and customize the visibility of blocks based  
on almost anything: user role, content type, authentication status,  
URL patterns, etc.

Drupal's region and block system is very flexible, but it is better  
suited for site administrators to define global page layouts than it  
is for individual users to author custom pages with varied content as  
we have been imagining in Sakai.

Panels is a module outside Drupal core that comes closer to what we've  
been imagining in Sakai: the ability for an individual user to place  
content and/or widgets exactly where they want on an individual page.  
Unfortunately, the authoring experience in panels is not anywhere near  
the kind of intuitive WYSIWYG experience we have been working toward  
in Sakai. However, Drupal panels offers all the ingredients we might  
want in a page authoring experience...we just need to cook and serve  
them differently.

I take several lessons for page authoring in Sakai from what works  
well in Drupal's layout tools of regions, blocks and panels. When  
laying out a page in Sakai, we should be able to choose from:

     * A library of predefined layouts, offering good, commonly-used  
page structures. Some of these layouts could be merely structural— 
empty containers waiting for me to fill them—defining something like  
Drupal's page regions (eg, a typical three-column layout with header  
and footer). Others could combine some empty regions for me to fill,  
along with other regions already filled with existing widgets (eg, a  
big, empty body region with a sidebar that has calendar, discussion  
and tagcloud widgets already in place). We should be able to export  
and import these predefined layouts. I should be able to tag layouts  
and see/browse tags from other users—but one should be able to tag  
everything in Sakai, so we don't ever need to state this requirement  
again, right?
     * The opportunity to author a new, custom layout, where I can  
design whatever structure I want. I should be able to tag, export and  
share my custom layout.
     * A library of widgets—not unlike Drupal blocks—that deliver  
either content or functionality. I should be able to search and browse  
global widgets supplied by the system, my own widgets, and ideally,  
widgets authored by other users I've subscribed to. I should be able  
to tag widgets and see/browse tags from other users.
     * The opportunity to author a new widget on the spot, thereby  
adding it to both the page I'm authoring right now and my widget  
library for use elsewhere. Making a new widget might be like making a  
view in Drupal: the ability to make some selection of content and  
display it in some form (eg, table, list, feed, etc). Making a new  
widget might be like something else too. Like Drupal, Sakai should  
offer new tools the opportunity to supply new widgets—and/or the  
opportunity for users to author new kinds of widgets.
     * The opportunity to author a piece of content on the spot,  
thereby adding it to both the page I'm authoring right now and  
whatever other collections that specific kind of content happens to  
live within (eg, pages, syllabi, tests, forum topics, etc). Like  
modules in Drupal, new tools in Sakai that define content should end  
up offering the chance to author in Sakai's standard authoring  
environment.
     * The opportunity to define under what circumstances a given  
layout/widget/content piece is visible. As in Drupal, I should be able  
to define who can see something and when they can see it. Default  
visibility should be baked into predefined layouts, widgets and  
content. And if I have the right access, I should be able to override  
default visibility.

Pluggable Authoring Tools & Filters

Drupal offers flexible frameworks for modules to supply different ways  
to get content in and spit it back out. While Sakai has been wedded to  
the oft-maligned FCKeditor for some time (yes, all the WYSIWYG tools  
have their drawbacks), Drupal offers the ability to plug in almost any  
authoring tool: plain old text, different WYSIWYG/WYSIWYM editors,  
various markup formats, etc. At the same time, Drupal offers the  
ability to define output filters that can clean up and/or enhance  
stored content when it is rendered. Drupal's filter on output strategy  
allows the same content (stored raw in the database) to be transformed  
differently depending on what filters are in use (which can even  
depend on user role or preference). Want anonymous users to see all  
your content translated into Pirate talk? Done. Again, Drupal core is  
not determining how stuff gets in and out, it instead provides a  
pluggable framework so we can decide for ourselves what we need. So  
many of Sakai's usability issues revolve around the rigidity of input  
and output, we would do well to adopt a pluggable model which opens  
possibilities beyond what we can anticipate.

URLs

Unfriendly to humans and search engine robots alike, Sakai has some of  
the ugliest URLs ever. It makes sense for a web application to have  
canonical URLs and it's hard to make them friendly, but there's no  
reason to show them to the world. Drupal solves the ugly URL problem  
by offering a core service for URL aliasing, so users themselves can  
define better URLs for their content. A valuable contributed module— 
pathauto—allows site administrators to define automatic URL aliasing  
rules for different canonical URLs, thus saving authors the aliasing  
task and enabling more structured aliasing patterns. Again, the lesson  
for Sakai is to fix our problems by offering flexible options rather  
than trying to bake in the final solution.

Workflow

Drupal core has basic workflow baked in based on triggers and actions,  
where triggers are set to fire on certain events, in turn generating  
specific actions. For example, a workflow can be established to email  
a site owner (an action) every time new content is posted (a trigger).  
Once again, instead of providing all the ideal workflows we might  
imagine, Drupal provides a generic tool to build workflows, which we  
can use to build those we already know we need, as well as those we  
don't yet know we need. If only Sakai's sometimes idiosyncratic  
workflows were merely defaults, which I could change or replace as  
easily as I can in Drupal.

Installation Profiles

Many parts of Drupal can be exported/imported (eg, content types,  
views) or are modular (eg, modules, themes, filters) to allow for easy  
sharing and migration. One of the Drupal's most powerful tools is the  
installation profile: an automatic recipe to build a new Drupal site.  
Installation profiles set modules, themes and other configuration  
options when Drupal is first installed so you can distribute a pre- 
packaged Drupal recipe, optimized for specific purposes. If Sakai had  
installation profiles like Drupal, I could imagine distributions for  
different organizational types (K-12, community college, liberal arts  
college, research university, etc), different usage focuses  
(collaboration, portfolios, teaching and learning), or different  
languages, giving new adopters better starting places than a generic  
Sakai installation. As Sakai generalizes itself, we should also have a  
way to demonstrate and distribute best practices for specific uses.

Other Stuff

There are many other (smaller) lessons Sakai might take from Drupal.  
Some that come to mind include:

     * The core form API that lets modules safely offer forms with  
minimal work and modify others (including core forms) dynamically as  
needed.
     * The core multisite functionality that allows Drupal to run  
multiple sites from the same codebase, yet override and/or augment any  
part of any site as needed.
     * The core comment functionality that lets any piece of content  
include threaded comments.
     * The core support for automatic feeds.
     * The core menu functionality that allows navigation to be  
managed as its own kind of content.
     * Core support for OpenID authentication.
     * Sophisticated core caching mechanisms.

Finally, a Shout Out to Portfolios

Oddly enough, the part of Sakai that most reminds me of Drupal's  
generality is our portfolio toolset. It's not surprising that  
portfolios—maybe the least well-defined practices in teaching and  
learning—have led to the most generalized tools in Sakai. And yet, the  
most obvious complaint about Sakai portfolio tools is that they don't  
do anything at all. The fact is: Sakai portfolios can do almost  
anything. What's missing in portfolios is the easy tools to build them  
and the portable models to demonstrate their power. Sakai would do  
well to look inside to its portfolio tools—for inspiration to  
generalize, but also for caveats about what must be in place to make  
generalized tools usable and practical.



More information about the sakai-dev mailing list