One annoying thing about having a million things to do is that no matter which of those million things I’m doing, there’s 999,999 other things that I’m feeling guilty about for not doing. But all of them are important at one level or another. Today I didn’t do some Views debugging that I really meant to do. Instead, after my housemate took his first look at Drupal, all those thoughts and ideas I have about Drupal’s administrative interface came to the surface.
In this article, I want to talk about the whole process of the work I’ve done, what led up to it, the road ahead, why it’s important, and where I hope it will go.
Different Approaches to Drupal Administrative Tasks
There appear to be at least three different camps about administration UI in Drupal. In one camp, there are people who want the barest UI possible that allows them to select the options they want. No bells, no whistles, organization doesn’t really matter. They’re interested in the features of the site, and administration is an afterthought. Drupal’s design makes it incredibly easy to do administration activities as an afterthought. The hook_settings() makes it ‘easy’ to have a settings page which goes in the right place. Uh, kind of. admin/settings/* turns out to be…well, awful. Especially since not everything is there. But the settings page, being automatic, isn’t suitable for all tasks. So worse than that, a number of tasks get split between admin/settings/* and admin/*.
Take, for example, admin/menu and admin/settings/menu — from a purely technical perspective there is a reason that admin/settings/menu exists…but holy cow is it hard to find if you’re not entirely sure how Drupal’s administration is laid out.
Another camp — and by this camp I mean primarily CivicSpace — is trying to create administration UI to appeal to new users. This is excellent. They have surveys that they’ve used to figure out what new users want. This is…well, to my mind. not so excellent.
“But wait,” some say, “how can the surveys be wrong?”
Well, I only have my perspective to give here, but my perspective is that the new users don’t actually know exactly what they want. Oh, they know in broad terms what it is they want to do, but I don’t feel that the questions posed in the surveys are necessarily the right ones.
This is not to say that the results of those surveys aren’t important. Certainly the tasks outlined by those surveys must be given great weight. But many of those tasks are used only early on in system building, or in the “getting to know you” phase. They fall off later. You don’t want those tasks to be in the way as much as you want them to be easy and intuitive.
A third camp points to Mambo/Joomla! and WordPress and shouts “See! See! Look what they gots!” And, well, that’s very nice, but Drupal isn’t Mambo, Joomla!, WordPress, Plone, Xoops, PHPNuke, or any of the other CMSes. They all have their own ups, downs, ins, outs and what not. The administration of a Drupal system must be very Drupal-centeric. It’s nice to go out and look at those UIs (I’ve done so a little bit; I still need to look at WordPress’, though I spent a good hour or two clicking through Joomla!’s very javascripty flash-bang-gee-whiz admin UI) and there are some lessons to be learned from them. Perhaps there are pieces we can emulate. Perhaps there are not.
My Camp: Make It Work, Dammit
Alright, so there it is in four words. I want an administrative UI that works. That’s a lot harder than it sounds. Four words doesn’t tell me anything about what needs to go where, how tasks should be organized, and what this UI will even accomplish.
But here is what it does tell me.
- The UI should not have too many clicks. Organization requires some level of drill-down, but how many levels becomes too many? Personally, I think three is borderline, but occasionally necessary. So I’m going to try and put the rule at “two levels when possible, three when necessary”.
- The UI should not be cluttered. This one, right there, is one place Drupal consistently and overwhelmingly falls down on. Everywhere you look, Drupal is filled with clutter. Forms are displayed item after item after item with no organization at all. The node entry form is a nightmare to work with, and it nearly always has too much information or information that is difficult to use. Part of this is due to its flexibility, and part of this is due to the fact that Drupal’s system basically encourages this.
- The UI should be well organized, grouping important tasks together. This means that we need to analyze all of the administrative tasks, come up with an organizational system, and apply it.
- The UI should, above all, not be the thing that people talk about. Once it’s there, the administrative UI should be functional. It should allow people to do what is necessary without impeding them. It should not have flash-bang-gee-whiz just for the sake of flash-bang-gee-whiz. Pretty pictures are nice, but the theming of the UI should always be for the mildest design. It should included the elements that are necessary, group them in ways that make sense, and let the user get on with the job the user is most likely interested in doing.
How I Got to This Point
Some months ago, I did some work on the administration module along with David Reed. That module starts off with a similar premise to the new work (that I’m getting to, I promise) does: Use a central administration UI which is essentially a link farm, and let Drupal’s administrative pages do their jobs. It did so by actively rewriting the system’s menus, which I found to be a very invasive process, prone to errors, and creating a very difficult install/uninstall process that leaves the very users this system was designed to help scratching their heads. CivicSpace has the advantage of distributing this with their build; but that isn’t all that good for regular Drupal.
While working on this module, we had a nice, skinnable design and went with some collapsing boxes and some other niceties. The code we wrote wasn’t really the best, easiest, most flexible code in the world, and every time I went back I always felt somewhat lost trying to figure out exactly where and how things were happening. This came, in part, because David and I really had a couple of different approaches, and I think we were trying to go middle-of-the-road and appease each other. In any case, I think we came up with something that is marginally functional, but in the end it does not do what I really wanted something like that to do.
And here is why: Drupal’s actual administrative pages suck ass. It’s not just the organization that’s wrong, as I had actually thought going into this. Unfortunately, no, it’s worse than that. While there are some pages that are (by dint of their brevity) relatively good, there are other pages that are nearly unworkable. block administration, menu administration, module administration, access control administration are all headache-inducing pages.
Worse, since 4.7, Drupal has these collapsing blocks. I’ve never really been fond of the collapsiblocks, and I think it’s because as an organizational tool, they actually make things worse for me. They are functionally equivalent to tabs, but they require a lot of scrolling, a bunch of extra clicking…and in general aren’t terribly friendly. I eventually went ahead and used them in the Views UI, but I’m really not happy with the solution. It’s better than the one that just has it all out there for you, but it’s not ideal.
For the moment, let’s just say I’m enamored of tabs. Perhaps I won’t be in the near future, but I like them for their ease of clicking, and for anyone who’s used Windows for any length of time, extremely familiar. Heck, Drupal uses its faux tabs all the time (though I like them less).
Where I am now
Today I spent a good 4–5 hours working something out. It’s rough, there’s a lot of work to do. Right now the main administration skin is hard-coded, though I actually want to have an API that constructs this via hooks and system settings for maximum configurability. More on that later. What I want to get to right now are two things I’ve done.
First, I’ve bastardized system settings; I replaced all of the collapsible fieldsets with tabs. I immediately found this settings page to be far, far easier to work with. Sure, the tabs I’m using are fixed size, so there’s an extra scrollbar in the div, but there are two important things I’ve noticed.
1) When I switch tabs, I don’t lose context of what the other tabs are. When you open a fieldset, anything that was below it slides off the bottom of your window. I don’t know about you, but if it’s not in front of my face, I’m liable to forget it.
2) It’s only one click to change tabs, not two. Reducing the number of necessary clicks is a good thing. Doing so in a way that doesn’t add clutter is ++good.
The second thing I did was to bastardize the modules page. This is one of the pages I mentioned above that is atrocious to work with. Modules are grouped poorly. The module settings pages are completely unrelated to the actual modules page. It’s difficult to pick out what’s actually activated.
Honestly, I didn’t even do that good of a job with it. I think a second rewrite of it could lead to another leap in usability, but the one I came up with at least groups modules with their package (i.e, all ecommerce modules are actually together), gives you a tab with just your enabled modules, links to the help and settings to the module, and lets modules also provide administrative links.
Where is This Going?
So I called this module a proof-of-concept module. And it is. I don’t intend for this to be a module, I actually want to use this as sort of a launching pad toward core. However, there are several problems with writing administrative code for core.
- Getting agreement and buyin on anything is difficult, because there’s a lot of disagreement.
- Writing core patches to have them turned down due to disagreement is a real motivation killer
- Getting core patches accepted is as much work as actually writing the code.
- I’m using some javascript that I think the PTB will frown on.
It’s possible that this could lead to another discussion about contributing to contrib and contributing to core, but I’m not interested in that discussion right now. Besides, part of my motivation is that I’m pretty lazy about some things, and politicking is one of them.
Ok, so this is something that, theoretically is a Drupal core effort. But as a module, it can be tried out safely, be usable in the existing 4.7 systems out there, and it can be refined. People can point, poke, prod, we can take what we like, and what goes into core will, hopefully, be better because of this kind of prototyping work. As a plus, it can actually work. For me, for you, for whomever wants it.
Let's talk API
Yes, let’s! Right now, I’m floating ideas around in my head, but for administrative tasks, I’m thinking of a series of hooks that modules can respond to.
- hook_admin_block — If a module wants to provide an entire block to the administrative interface, it responds with an array of appropriate information. Right now it’s name, title, content, and position (left or right). This’ll likely grow and change.
- hook_admin_item — If a module wants to provide an administrative item, it can return an array of them here. Each entry needs to be, at the very least, a link to the item, and a block name, so it knows where to put the link. And we probably also need to provide some kind of weighting system so that important items can float to the top.
- hook_admin_module_link — I’m not calling it this in the code right now, but I wasn’t sitting down trying to write the API definition at the time, but trying to get something started. I like this name more — and the hooks can be consistent this way. This hook lets modules add links on their modules page. To go along with the settings and help links, modules can also have their administrative links live there.
And while we’re at it, here are the categories I’m going with:
- Content Management
- User Management
- Logs/Statistics
- General Site Configuration
- Site Building
Also, the front page needs easier access to the settings (which are, basically, what theme the administrative site uses and how the blocks are organized).
Conclusion
Yes, I’m finally about done blow-harding on this topic. You can go look at the alternadmin module if you’re interested. You can post your comments here. We can talk about why my changed designs work or don’t work; how they can be further refined; how the existing pages can be further refined; how to categorize (I think I’ve got a pretty good handle on that, but I’m sure everyone will have a slightly (or extremely) different opinion).
But I am very interested in input. I’m also interested in help. I’ll happily give commit access to anyone who seriously wants to help add pages to this thing. Show me how you’d rewrite the menu system. Or the block system. We don’t have to stop with just rewriting administrative pages either. For the blocks system, I actually have alternative database ideas. Hopefully I’ll get a chance to work on them.
Ok, let the rips begin.

"but my perspective is that
"but my perspective is that the new users don’t actually know exactly what they want."
"block administration, menu administration, module administration, access control administration are all headache-inducing pages."
"Worse, since 4.7, Drupal has these collapsing blocks. I’ve never really been fond of the collapsiblocks, and I think it’s because as an organizational tool, they actually make things worse for me. They are functionally equivalent to tabs, but they require a lot of scrolling, a bunch of extra clicking…and in general aren’t terribly friendly. I eventually went ahead and used them in the Views UI, but I’m really not happy with the solution. It’s better than the one that just has it all out there for you, but it’s not ideal.
For the moment, let’s just say I’m enamored of tabs. Perhaps I won’t be in the near future, but I like them for their ease of clicking, and for anyone who’s used Windows for any length of time, extremely familiar. Heck, Drupal uses its faux tabs all the time (though I like them less)."
AMEN!
"First, I’ve bastardized system settings; I replaced all of the collapsible fieldsets with tabs."
F#CK YEAH!!!!!!!!!!!!!!!
I hate those fieldsets, only recently did I realize how much I hated them when I started putting node_form options into tabbed pages. I mean they have the right idea (reduce the amount of information), but they fail for exactly the reason you mentioned: hit one fieldset, you loose ALL context.
Now, in so far with your grouping of tasks, I'd think you should consider splitting content mangement into "navigation/organization", and "content and workflow defaults"... or something like that. I don't know... this all requires a lot of though, and its too late for me to really give. But, seriously man, f#ck yeah!
check mooflex admin
looks like pointing the right direction - less is more! i wish i could code to help
while you look the other cms admin, check out the mooflex admin design -that is mini moo.js growing to a mini cms - mooflex maybe not a good example for Drupl's long list of admin/settings nevertheless its something between joomla and cspace's administration, just tiny
http://demo.mooflex.net/mooflex/
:demo
:demo
Joomla!’s very javascripty
Joomla!’s very javascripty flash-bang-gee-whiz admin UI
Hey now! Don't knock it just because it's pretty. ;)
It's also well organized and functional to the point where I can hand over a website to an inexperineced end user after only a brief "how to" tutorial, and they can maintain content updates without calling me every other day.
The uber frightening admin system I saw today for the first time had me quaking in terror over the thought of designing a site for someone and handing it off... granted, I realize that's what the whole point of your article. I look forward to seeing how it evolves.
Don't knock it because...
The thing is, it's so pretty it's one of the things people talk about with Joomla!. I'd much rather have an admin UI that people just don't have much to say about. It does what it's supposed to do and it doesn't get in the way, and people will then talk more about the features the system provides, rather than the administrative tool.
IMO, the best administrative UI is basically invisible. You don't think about it, except in the context of getting things done; and it lets you do that efficiently so you don't curse the tool, but you simply work and move on.
Great work! You're on Digg
Digg this story
Tabs
Tabs are nice in a traditional UI, but merging them into Drupal is tricky. The tabs we have now are separate pages, and splitting up a single form using them would require separate form submissions per page. We already have this for the user profile editing, and IMO it is way too confusing and leads to data loss.
If we were to switch to javascripty tabs, the condition would have to be that the normal tabs would be removed or at least changed into a different sort of UI element (a toolbar?). Mixing page-tabs and js-tabs is a recipe for disaster.
As far as the fieldsets go, I do agree that they were applied a little overzealously in the admin. But, they are a good stepping stone for further changes and certainly an improvement of what was before.
Tab Mixing
I'll have to ponder the mixing of JS tabs and Drupal tabs. Drupal's tabs are interesting and useful. I'm not sure how disorienting they'll be mixed with the stuff I've done. I guess I will simply have to plug along with what I've got and see if other people using the system have similar issues.
js libs
This sounds very promising - Thanks for all this work, I'm looking forward to actually giving it a try.
Simple remark after quickly browsing through the cvs files : aren't there some things in jstools.module (collapsiblock, tabs...) that could be used here instead of having yet another module-specific js bits ?
JS dependency
Right now, I'm using module specific JS in order to reduce dependency. In fact, the tabs are lifted straight from jstools.
Ideally, all the module specific JS will go away and be replaced by either jstools or jquery or whatever Drupal eventually moves to.
Administration page
First, I’ve bastardized system settings.
Yes! Good thing to do!
I replaced all of the collapsible fieldsets with tabs. I immediately found this settings page to be far, far easier to work with.
This one is tricky. In Drupal, tabs are usually 'actions' (eg. add foo, list, edit -- all verbs). Mixing actions with navigation might be confusing. Maybe we need to re-think the 'actions as tabs'-mantra.
Reducing the number of necessary clicks is a good thing. Doing so in a way that doesn’t add clutter is ++good.
If reducing the number of clicks is the goal, making the menu a DHTML menu might give the biggest gain. (The problem would be dynamic menu items ($may_cache == FALSE); we'd need to get rid of those first.
The second thing I did was to bastardize the modules page.
Yes! Good thing to do!
It’s possible that this could lead to another discussion about contributing to contrib and contributing to core, but I’m not interested in that discussion right now. Besides, part of my motivation is that I’m pretty lazy about some things, and politicking is one of them.
I'd love to see many of these improvements get into core. However, it will require some cooperation from your side (just like it will require cooperation from the core committer's side).
The best way forward is to split this into several smaller patches, and get them included one-by-one. The 'bastardize the modules page' could and should be a standalone patch, the 'bastardize the settings page' should also be a standalone patch, etc. It takes a bit more time and energy, but ultimately, thousands of people will get to benefit from your work, and we'll love you for it. ;)
Last week, Kieran, Niel and myself were mailing about the administration menu. Based on CSL's user experience research, and some discussion, we defined the following categories (not set in stone):
* Manage content
* Manage users
* Manage look and feel
* Manage structure (menus, categories, url aliases, IA stuff)
* Manage site functionality (installation, upgrades, settings)
Tabs, JS, core patches, more
After Steven's comment I am a little more hesitant about the tabs. I think, with this project, I want to jump forward with them, though, and follow the path. It may not lead anywhere useful, but there is value in prototyping, and I like what I've achieved with them thus far. I hope people actually install alternadmin and take a look at the new modules page, as I'd like feedback on how people feel about it.
I have code that makes the menus on this site DHTML. It needs to be refined, but actually it works fairly well. I haven't run into issues with the $may_cache thing, which largely affects tabs but I haven't pushed it very hard. It's something I'm thinking of merging into alternadmin, though it requires theming, really, so it'd probably be a case of "oh and include this php file in your template.php" to set that stuff up.
Distributing things done via themes in modules is kind of tricky.
I understand this and agree with it. I know this module, as its own entity, won't get into core, and what does get into core will be substantially different from what's here. My goal is to put something together, run some experiments, pick and choose, and refine from there. If, for example, we were to decide we want tabs in core, I'd be all for it. I am quite sure we are not ready to just make that decision, which is a reason to keep this out here, play with it a little, and see how it shakes out.
For the tabs, all I did here was to grab the tab javascript from jstools and plug it in; I could've just relied on jstools but I want this to be easy to install. I may not even put in anything that relies on Views, though the content management UI could probably benefit massively from being Views powered.
This is definitely close to what I've got. Manage Content and Manage users are on the left side (together because they feel semantically similar). On the right I've got Site Config which is big enough to be its own block. Beneath it I put 'Site Building', which you've got broken into Look & Feel / Structure.
I have no feeling either way about breaking that up -- in fact I think I originally had 'Look & Feel' as its own thing, but all Drupal has for that is 'theming' and right now themes aren't particularly administered. Maybe that, right there, is a project all its own. I don't even know where I'd start.
Administration feedback
Hi, I am thrilled to see you continue the effort you started on the administration module.
I think it certainly makes sense develop an interface for power users. I don't think clicks is a good measurement for usability but rather measure time to complete a task, error rates, and task completion if you are looking for Usability measurements.
Administration clutter is a problem and it's one we tried to address with liberal use of white space in the CivicSpace menu for the administration module. However, at the same time you want an interface to be learnable and discoverable and that's done well through the use of explanatory text. Allowing the text to disappear once something has clicked to reduce clutter is a good interaction design technique that we should explore.
Task groups are very important. Discovering what users expect to be grouped together is traditionally done through the technique of card sorting. I would recommend an initial open card sort and hope that 5-7 categories emerge by sorting a list of common drupal administration tasks into categories. http://iawiki.net/CardSorting In the Drupal administration survey we discovered that learning about new features was a major activity of Drupal administrators. You may choose not to include this as one of your task groups. We also discovered that mail integration and subscriptions were an important task. I think you can get to a good set of task grouping by doing 5 usability experiments to see if Drupal administrators can work with it.
I agree that over using AJAX or Visual design elements can be a distraction.
You may want to join our efforts to get a menu categorized before you do a full page interface design. The categories are similar to yours and we can share the same data. Great job on tackling this important effort.
Cheers,
Kieran
Categorization
Indeed, I don't pretend to have all the answers to categorization. What I picked for this one is yet another refinement, and I agree that they can easily be changed.
There are two places this is definitely true:
The question this leaves me is...is the responsibility of addressing that part of the administrative UI, or is it its own creature? I can't help but feel that this includes a lot of things that are not strictly speaking, administrative tasks. It includes tutorials, it includes guidance, it includes finding snippets. There's so much that can be categorized here that it deserves a prominent place, but I don't feel it should dominate the administrative UI.
We do need to teach new Drupal admins how the system is organized and where things are.
I definitely want to treat this effort as something that will combine with other people's efforts; I also want this effort to be high profile, because visibility in the Drupal community has a way of getting things done.
collapsible fieldsets
yes, i do hope we fix that admin/modules page
as for collapsible fieldsets, i disagree that they are so bad. there isn't really much other option given the number of (legimate) knobs to tweak. i have always wanted to write a patch for collapsible fieldsets so that their collapsed state also shows some HTML (in addition to the title). So in the case of 'Publishing Options' on the node form, the collapsed state would very briefly list the enabled options. This would be a huge boost in scannability and save loads of clicks to just figure out what current settings are.
yes, i recognize that this technically removes the 'collapsible' nature and makes the collapse action just a toggle of DIV contents. Thats OK. We can still call the states collapsed and expanded IMO.
Perhaps I overstate my point
Perhaps I overstate my point on the collapsible fieldset. I was never convinced of them; and they are drastically overused in Drupal 4.7. They are not always the answer for things they are being used to answer for. This doesn't mean they aren't handy. They're just not All That (nor a bag of chips).
Surveys
As requested, I posted some comments on user surveys. The article can be found at my site, CMS Report. My comments are a little dry, but sometimes it's good to put in a little academia into something common sense already tells us is true. I made mention of your remarks about surveys because they were so close to those I've made elsewhere. A survey shows 3 out 5 agree with us. :-)
Cheers,
Bryan
Post new comment