Jeff Croft

I’m a product designer in Seattle, WA. I lead Design at a stealthy startup. I recently worked at Simply Measured, and previously co-founded Lendle.

Some of my past clients include Facebook, Microsoft, Yahoo!, and the University of Washington.

I’ve authored two books on web and interactive design and spoken at dozens of conferences around the world.

But seriously, who gives a shit?

Blog entry // 09.20.2006 // 12:23 AM // 57 Comments

On personal content management

Working in the online news media industry, I got into a lot of conversations about content management. Turns out it’s a tricky problem to solve. There are a lot of factors involved, and they start as simple as trying to define what exactly content management is.

Seems to me when most people think of a content management system for the web, they think of data entry. Web forms that let one enter data, which will eventually be displayed on a web page — right? Right. But really, content management should be about more than that. The process of managing your content ought to include structuring, organizing, searching on, filtering, and easily modifying your content. It ought to include being able to quickly define new types of content. It ought to facilitate establishing meaningful relationships between disparate pieces of content. It ought to make your content more useful simply by virtue of the content being in the system.

But more often than not, it doesn’t. Most of time, you actually make your data (read: content) as dumb as possible by way of entering it into a CMS. Seriously. Let me give you an example.

Suppose you have a recipe. You want to display it on your blog. So you open WordPress or similar, you create a new blog post, and you the recipe in the “body” field. Congratulations, your recipe is now on your blog. Perhaps you do this once a week for a year. Now you’ve got a nice series of blog posts and you’re gaining a bit of a regular audience thanks to your good eats. Your readership starts to ask for some additional features. “Hey you — can I get a list of all your recipes that use peanut butter? I’m not interested in making deserts — can I filter those out? Is this recipe vegan-friendly?” And so on. You’re stuck. There’s no easy way for you to answer these questions.

How’d you end up in this situation? Content management (or lack thereof). You took one type of data (a recipe) and wedged it into the content entry form for another type of data (a blog post). Oh, it’s not your fault — you didn’t have a choice. WordPress (or similar) doesn’t provide a recipe management application. Because it doesn’t, you were unable to add the structure necessary to do interesting things with your recipes. If you had a dedicated content management tool for recipes, you would have filled out form fields with labels like “ingredients,” “cuisine type,” and “course.” Instead, your recipe is one big blob of text in the “body” field of your blog entry object. You’ve denied it any possible meaning it might have had.

This example may be a bit extreme. You may never post recipes on your site. But I’ll bet every single one of you has square-pegged a round hole somewhere along the line. Countless times, probably, you’ve been unable to add structure to data because of the limitations of your CMS. And you know what’s worse? You’ve probably actually taken away structure that was already there.

Have you ever put a photo from Flickr in one of your blog posts? If so, did you do so in a way that maintained the metadata and structure Flickr has so dutifully put into your photos (EXIF data, comments, tags, geocoding, title, descriptions, photographer, etc.)? If not, then you’ve probably taken away my ability to do interesting things with your data. For example, maybe I want to see all blog posts you’ve written that include photos with the tag “shark.” Or maybe I want to see posts that contain pictures taken in London. You get the idea.

By forcing you into putting all your content into one form (the blog entry form), your blog’s CMS has left you no choice but to link up your photo with a simple img element, thus eliminating any possible meaningful relationship your blog entry and Flickr photo might have been able to enjoy. Instead of being joined at the hip, they barely even know one another.

Anyone who’s ever hacked Moveable Type into working as a photo gallery or portfolio is guilty of this. Don’t be ashamed — I did it, too.

One size does not fit all

The crux of the issue here is that most CMSes — especially simple ones designed to power things like blogs — offer entry forms for only one or two types of content. But your site has tons of different types of content. It’s not just a blog — and even a blog post contains other types of content.

In order for content management to be done well, you really need separate objects (or models, or tables — use your term of choice) in your database. You can’t expect a single object with three fields (like “title,” “body,” and “date”) to handle everything you want to do.

In the news world, many CMSes offer just a few content types (“story” being the obvious big one). People shoehorn things like birth announcements, obituaries, blog entries and more into any place they can fit them, because they aren’t give a choice. But these are actually separate content types that really deserve their own objects and attributes.

So, in my opinion, the single biggest problem with content management is that personal CMS tools don’t facilitate structured data as well as they should. Instead, they give you a few fields and let you figure out how to best fit your content into them.

There’s a good reason they don’t handled structured data so well: it’s hard. The CMS creator can’t always anticipate what kind of content you’re going to have. Allowing you, the user, complete control over the object models is a nightmare, as well. So they err on the side of simplicity, and give you an abstract data entry form with no real meaning.

What’s the solution?

The first, and most obvious solution, is to roll your own CMS. It’s unlikely any off-the-shelf CMS is going to do exactly what you want it to, so why not write your own? With web frameworks like Rails and Django making it easier than ever to create a CMS and constantly iterate changes on it, it’s a very viable option. Still, rolling your own does take time and a certain degree of programming resources everyone may not have.

So, short of that, what to do? If you’re going to look for pre-built CMS, try to find one with a focus similar to yours. If you’re a photo gallery site, find a photo gallery CMS. Don’t hack TextPattern into being a photo gallery. If you’re a forums site, find some good forum software. Don’t tweak WordPress into being something it’s not.

But most of all: when looking for a CMS, look for one that provides you a platform to do whatever you want. Don’t look for one that anticipates what you want and then makes you do it. Your CMS should be a platform upon which you can easily build and manage structured data of any type. You should never have to wedge a photo gallery into a blog entry form — you should be able to simply create a photo gallery object and associate with a particular blog entry. If your CMS can’t do this — or doesn’t at least provide enough of an extensible platform that you could add this kind of functionality with relative ease — then your CMS isn’t really managing your content at all. Instead, it’s getting in the way of you managing it.

Conclusion

Many people are starting to get the idea that structured data, context, and semantics are the key elements of the most interesting, interactive, and fun sites on the web today. However, many of the tools we have for managing content don’t facilitate this sort of site at all. Content management, especially on the personal/blogging level, needs to grow up.

And we purveyors of the personal website need to stop fitting our square pegs into round holes. Content deserves structure. Please don’t do your data wrong by reducing it to nothing more than a blob of text in a blog entry form.

Comments

  1. 001 // Joe // 09.20.2006 // 1:58 AM

    You may want to check out ezPublish (http://ez.no) - it’s a php CMS that does exactly what you’ve described in your post.

  2. 002 // Jeff Croft // 09.20.2006 // 2:38 AM

    Thanks for the tip, Joe. I hope someone who runs PHP on their server will give ezPublish a look and let us know how it is. To be clear, though: I’m not looking for a CMS. I’ve written my own that I’m quite happy with.

    From looking at the ezPublish website, it certainly doesn’t look like you can add arbitrary object types easily. They list the objects they support and don’t make much mention of adding more. When I logged into the demo of ezPublish for a “news site,” I was presented with “Media Files,” “Galleries,” “Polls,” Forums,” and “News.” That’s a good start, but it’s far from everything a new site needs, and I didn’t see any way to add additional content types.

    Am I missing something?

  3. 003 // M. Kris Khaira // 09.20.2006 // 3:43 AM

    You can use Drupal with the CCK module which lets you create your own data types.

  4. 004 // Joe // 09.20.2006 // 6:18 AM

    I can’t help but think you just repurposed Adrian’s latest post

  5. 005 // James // 09.20.2006 // 7:17 AM

    You’ve described the classic CMS problem really well, but I think it’s going to be a few more years before the average designers/blogger can get on board with your suggestions.

    As someone who spent time hacking Textpattern into a photo gallery, I’d just emphasize some other technical issues and how much help it is to work from a core set of features: Sure, Pixelpost is designed for photos, and other CMSs would allow better control and management of custom datatypes. But do they produce clean URLs? Do they support Textile? Do they support paging, create thumbnails automatically, provide a built-in search function, safeguard against comment spam, and encourage the development of other features through plug-ins?

    In an ideal world, every possible feature of a CMS would be modular, and you’d be able to assemble them yourself into the perfect custom CMS. But I don’t think we’re there yet, although to be fair, it sure sounds like Django is on the right track in addressing the challenge.

  6. 006 // Jeff Croft // 09.20.2006 // 7:45 AM

    Joe, there’s no doubt that Adrian’s latest post is related and based on similar themes. And, I’ve said many times before that Adrian’s ideas about structured data and journalism are an influence to me. But repurposed his post? Please. By the way, your link looks like a splog to me, so you’re lucky I decided not to delete your post as spam.

    You’ve described the classic CMS problem really well, but I think it’s going to be a few more years before the average designers/blogger can get on board with your suggestions.

    Probably so.

    Sure, Pixelpost is designed for photos, and other CMSs would allow better control and management of custom datatypes. But do they produce clean URLs? Do they support Textile? Do they support paging, create thumbnails automatically, provide a built-in search function, safeguard against comment spam, and encourage the development of other features through plug-ins?

    I don’t know the answers, because I don’t know what Pixelpost is, but I’ll assume they’re all “no.”

    If my assumption is correct, then you’re basically proving my point — content management apps need to grow up.

    But I don’t think we’re there yet, although to be fair, it sure sounds like Django is on the right track in addressing the challenge.

    Just to avoid confusion: Django isn’t a CMS, it’s a web application framework. But, it does let you build a custom CMS pretty darn easily. :)

  7. 007 // Adam Spooner // 09.20.2006 // 8:04 AM

    Thanks for a great post relevant to what I’m currently working on. Most churches today have horrible websites; websites being an all-encompassing term referring to the structure of their backend, the design, and the depth of interaction with users. This is what I’m talking about. Anyways, I’m currently working on developing a CMS (in Django, of course) that churches will be able to use to better structure the content on their sites. Your thoughts have given me some great ideas on how to better develop the CMS with respect to generic data entry and categorization. The only area of struggle for me in this is that Django does not handle model Inheritance as one would hope…but that’s a conversation for another time and place.

    Cheers!

    PS - That’s my church’s current website, and I get the dry heaves just by looking at it…it’s horrible…and they won’t do a thing about it.

  8. 008 // Nate K // 09.20.2006 // 8:24 AM

    Jeff, I couldn’t have said this better myself. Being a programmer I see it often, and I don’t even work in new publishing. My main job is working for a book publisher, but the symptoms were still there. I came in here while they were using Plone. It’s a nice tool, but it didn’t give them the flexibility they wanted. Everything was disconnected from everything else because they tried to shoehorn a book review into a news item, or an event into news item. They had all these reviews in the system, but not way to connect them to pertinent authors or books. Then, on top of that, they had a structure where there was only a 1 to 1 relationship between book and author. So, what about the books with 4 or more authors? Not only that - but the author field was free type, so an author of ‘Jeff Croft’ was different than an author of ‘Jeff A. Croft’ - when they could be the same person (sorry, I don’t know your middle name. he). The content management was a NIGHTMARE - literally. How was I going to create a great website when the real problem lay in the data model?

    I have worked with other developers who simply want to jump in and grab a CMS and go - It simply doesn’t work. IF I didn’t build custom to clients needs, I would use a framework (being a PHP guy it would be between symfony, cake, zend, code igniter, etc). Many times, though I love the frameworks - the job doesn’t need many of the bells and whistles, so I make a smaller framework to get the job done - with just the pieces it needs.

    Data structure plagues so many sites. Many who I talk to have never heard of database normalization or even understand what it means. I recently helped a local developer build an online catalog for his client. They have the freedom to setup categories and subcategories for the catalog - and then attach products and images to these catalogs. The person I was working with was excited that they would be able to cross-reference different products, and re-use images in different places. I took it a step further and showed him the possibilities by cross referencing other products from the parent categories, cross referencing other products by their specific product type, cross referencing by price, color, size, etc. You see, he spent some time looking for a CMS and couldn’t find anything - and what he did find would have been a MAJOR shoehorn. Now, he has a system that is connected. The interface is simple. The data on the back end is always sanitized and checked before entry, and duplicate entries of things simply won’t exist. His own thinking of a database was putting EVERYTHING in one table. Again, I think this plagues many who simply don’t think about how to manage THEIR content - not force their content into a blog.

    I could write more, but I think you have sufficiently covered the topic. Very well said!

  9. 009 // Jeff Croft // 09.20.2006 // 8:38 AM

    Great examples, Nate. Thanks for sharing. :)

  10. 010 // Matt Brown // 09.20.2006 // 9:56 AM

    Jeff,

    I think that your post does a good job of highlighting a major problem with today’s websites—the ‘flatness’ of most people’s CMS driven content. However, I don’t think that it’s necessarily just a software problem. To me, it’s a failure in many cases of the content creator.

    The most obvious issue is time—many people, if they can even find the time to blog, don’t have the time to build a custom CMS system AND to add tons of meta-data to each post. Of course, you acknowledge this in your post. However, even more importantly, many people just aren’t very good at coming up with (or adhering to) repeatable meta-data or organizational structures (myself definitely included). It’s difficult to foresee just how you’re going to want to ‘re-mix’ your data in the future, and therefore, it’s hard to know how to appropriately label and tag your information in the present. And again, it’s time consuming.

    In your post I think you go too far in labeling WordPress a ‘dumb’ CMS system. On every blog post, built into the interface (granted it’s hidden at the bottom), is a tool for creating key-value pairs. Very simple, but very powerful. You could create a key for ‘ingredients’ and then add all the major ingredients, maybe a key for ‘time to cook’ and then fill in that variable. Using a well-documented (and well extended, through plugins) feature, you can then sort and filter the display of this data (and it’s parent post) very easily. You can read about it at: http://codex.wordpress.org/Using…

    So, arguably the most popular blogging/CMS tool currently available has a powerful meta-data extension system built in to the standard interface. Is it then, a failure of software that people don’t load each item of content with loads of meta-data? I’d say it’s more a matter of time and determination, not bad software.

  11. 011 // Nathan Borror // 09.20.2006 // 10:29 AM

    The key/valued pair hack in WordPress probably works great for its intended audience. It is a hack though and doesn’t scale to more complex CMS audience needs.

    WordPress is a blogging CMS nothing more nothing less. Trying to shoe horn WordPress into anything else is like me squeezing myself into ballet shoes before going to work at a construction site.

    For obsessive contextual bloggers like myself WP doesn’t cut it. And I’m not about to hack it when I have a tool like Django.

  12. 012 // Keith // 09.20.2006 // 10:37 AM

    Good stuff Jeff. As you know I’ve been thinking about content management a whole lot as well. I’ve actually got a post in the works that echoes much of what you say here and some ideas as well.

    I think there needs to be a shift in the way people view content management before we can really begin to solve this problem.

    I agree 100% with you about needing a custom solution for every content management problem and I also feel where you going with the idea of a platform. I mean, I’ve never, ever, ever used a system as is. I have to hack every single time, regardless of how flexible, etc.

    In essence we’re already building custom solutions, but with inflexible tools.

    Anyway, I think we need to take a step even further back. Content Management shouldn’t be about the system or enabling technology. At least not up front. It’s a process. Where it usually fails is with the people who manage that process and yeah, it’s often because of the tools they are given.

    Keep an eye out for more on this from me. I’d love to get your thoughts on my thoughts.

  13. 013 // Baxter // 09.20.2006 // 11:12 AM

    Jeff, as you know, I was backed in a corner and HAD to find a CMS that was going to work for my very specialized needs.

    After wasting a couple of years attempting to hack this CMS and that one, I learned the hard way that there’s just no substitute for building your own.

    Of course, now I’m thinking about all the things I could have done better.

  14. 014 // Chris Griffin // 09.20.2006 // 11:42 AM

    What you said here could be taken to an even higher level. The hundreds of web apps that come out daily all seem to be disconnected from each other which I believe is to be one of the biggest problems with Web 2.0 (ugh I said it).

    For example, Let’s say I use Basecamp and Blinksale. Why should I have to have to enter contact info for my clients in both web apps? Why can’t the timesheets from Basecamp be sent to Blinksale for invoicing? For that matter, why can’t my bookkeeping software (Quickbooks) talk to Blinksale?

    I’m not trying to pick on Blinksale or any web app for that matter, I’m just using this as an example. It just seems that developers/companies want to tackle a certain problem, and while they might solve this one problem well, they keep their system closed to other web apps that can communicate and create a bigger system that runs more efficient.

    Essentially what I’m saying is I wish all the web apps could exist as modules to a much bigger web app. I think this will happen eventually, but right now not many people seem to care and it makes for a lot of redundancy.

    I apologize as this is a bit off-topic from what you are referring to, but I think the disconnect between data and content relationships exists beyond CMSes.

  15. 015 // Brian // 09.20.2006 // 3:06 PM

    Outstanding post Jeff. I think your example is great. It helps translate the issue to non technical individuals which is why you need a CMS in the first place. If every organization had knowledgeable developers in abundance there would be tons of well engineered CMS systems that have been customized to fit the business needs and plenty of people to use them. The problem is most organizations don’t have those resources and their existing staff don’t understand the implications & drawbacks of fitting content in to a existing structure until things have gone to far and it becomes impractical to fix. It gets to the crux of what I kind of feel is one of your philosophies of content that many media people just don’t seem to fully grasp. Add value. The same data without new structure has no additional value it’s just a digital version of a photocopy. Value comes in interpreting, classifying, or displaying data so it is more easily understood or interpreted, or even debated. These are the key things that attract me to a media outlet and I think one of the points of this post. Well said!!!

  16. 016 // Matt Brown // 09.20.2006 // 4:46 PM

    @Nathan Borror:

    I’d be careful calling the Key/Value feature a hack—it’s a core component of WP and has been since v1.5. As for it ‘not scaling’, I don’t know what you mean? You can add unlimited key valued pairs for each and every entry in your blog. And you can easily filter by them on the display side of your blog. The default interface is a bit thin, but you can just drop in a plugin for more versatility… Like this one: http://rhymedcode.net/projects/c…

    But of course, WP is limited in practicality if you’re pushing many different types of content around on your site—a custom built system like Django or Rails would be a much better bet, especially if you pull it off (like you did with your site-nice work).

    More generally, I do think this is a great discussion on CMSes, and where they’re going. There’s lots and lots of room for improvement.

    One question for Jeff—is there any chance of a subset of Ellington’s core features seeing an open-source release? This would probably go a long way towards getting more and more people excited about Django. Just curious.

  17. 017 // Jacob Kaplan-Moss // 09.20.2006 // 5:08 PM

    One question for Jeff—is there any chance of a subset of Ellington’s core features seeing an open-source release? This would probably go a long way towards getting more and more people excited about Django. Just curious.

    Since he’s looking over my shoulder, I’ll tell you that it’s not up to him :)

    Actually, it’s not really up to me, either, but I should point out that a large portion of Ellington is open source — it’s called Django :) That is, originally they were one codebase; we kept some stuff to ourselves and open-sourced the rest. Really, the stuff that’s in Ellington is fairly boring unless you’re a news organization, so open sourcing it doesn’t make much sense.

    That said, we’re constantly rolling stuff we develop internally as port of Ellington into Django. The latest example I can think of is the fledgeling serialization framework, and there are sure to be more bits in the future.

  18. 018 // Joe // 09.20.2006 // 7:03 PM

    Joe, there’s no doubt that Adrian’s latest post is related >and based on similar themes. And, I’ve said many times >before that Adrian’s ideas about structured data and >journalism are an influence to me. But repurposed his >post? Please. By the way, your link looks like a splog to >me, so you’re lucky I decided not to delete your post as >spam.

    Jeff, thanks for thinking my site is a splog. I appreciate being labeled a splog even though there are tons of other legitimate sites acting as gateways to other sites. If my site received more than about 12 hits per day ranked high on false pretenses in search engines and I spammed my link everywhere, I’d say you’re right. Since that isn’t the case, I’ll say you’re wrong.

    My observation about your post is a non-biased opinion. Take it as fact or leave it, but you have to at least partially agree with me that despite Adrian “influencing” you, your post hits just about all of his points, point for point. You’re calling that coincidence?

  19. 019 // Jeff Croft // 09.20.2006 // 7:39 PM

    You’re calling that coincidence?

    Nope, not at all. I’m calling it being influenced by Adrian, whom I respect a great deal. But you’re almost suggesting I plagerized here, which is absurd and simply not true.

    The fact that your comment was related (if trollish) was the only reason I didn’t delete your comment. Your site does look like a splog. Obviously you’re not trying to spam this blog, and that’s why I didn’t delete it. So relax, my friend.

    This is sidetracking what has been a good and interesting conversation. If you wish to discuss this with me (or Adrian) personally, please feel free to contact me (or him, or both of us together).

  20. 020 // Jeff Croft // 09.20.2006 // 9:52 PM

    I’d be careful calling the Key/Value feature a hack—it’s a core component of WP and has been since v1.5

    Sorry, I disagree. The length of time it’s been a part of the WordPress and the fact that it’s a core component doesn’t change the fact that it’s a dirty, ugly, unelegant hack when used for something other than it’s intended purpose.

    WordPress’ key/value pairs are there for you to add (very, very simple) metadata to your blog posts — not for you to turn WordPress into something other than a blog application. If you’re using them to add metadata to your blog posts, great. If you’re using them to add fields that don’t belong anywhere on a blog post (like fields for a portfolio or photo gallery app), then it’s a hack, any way you slice it. WordPress is a blogging app. If you use it for something else, you’re hacking. Sometimes hacks are “good enough.” If it’s “good enough” for you, terrific. But it’s still a hack.

    And even for its intended purposes, it’s not all that useful. Let me give you an example.

    Say I want to add location data about the place I’m blogging from. One every single post, I’d have to set up keys with values for “Location name,” “Address,” “Latitude, “Longitude,” “City,” “State,” and so on. And I if often blog from the same location, I get the pleasure of entering all this duplicate information every single time I post. From one post to the next, I have to remember if I called the key “Address” or “Addr.”

    Contrast this with a real relational database CMS, where you could create a new “Location” model with these fields on it. You’d enter a new place for your favorite blogging location one time, and just pick it from a list each time you went to post an entry from that location. Less data entry, more database normalization, less margin for error, better separation of content types from one other, and more meaningful relationships between them.

    BTW, Matt, I really like your website. Nicely done! :)

  21. 021 // James Asher // 09.20.2006 // 11:41 PM

    Jeff, for what it’s worth, WordPress has a dropdown list of already existing keys, so you don’t have to remember if you put ‘Address’ or ‘Addr’, you just look at the list.

    That being said, it’s not nearly as efficient as it could be, but it’s not the focus of the software.

    The purpose of WordPress is not to be an all encompassing CMS, it may be working towards that, but with the current release, it certainly isn’t one.

  22. 022 // Jeff Croft // 09.20.2006 // 11:51 PM

    Jeff, for what it’s worth, WordPress has a dropdown list of already existing keys, so you don’t have to remember if you put ‘Address’ or ‘Addr’, you just look at the list.

    Ahh. I stand corrected, then. My bad.

    The purpose of WordPress is not to be an all encompassing CMS, it may be working towards that, but with the current release, it certainly isn’t one.

    Which is basically my point. Although (as I’ve just proven) I don’t know WordPress very well, it’s my impression that it (as well as TxP and MT) make for very nice blogging applications. But it’s also my impression that many folks wedge non-blog content into them. As far as I’m concerned, this is a hack, and can only prove to be frustrating down the road.

    These blogging apps (though no fault of their own) have a way of tricking one into believing they’re capable of being something they’re really not. They get you 80% of the way there really fast, and then you hit a wall. If you want that other 20%, you’re shit-outta-luck.

  23. 023 // j. brotherlove // 09.21.2006 // 2:46 PM

    Hmm… I haven’t seen any mention of Expression Engine (http://www.pmachine.com/ee/ ) in this conversation. I think EE fills the gap between dedicated blog CMS and MegaCMSes. It’s scalable and modular enough to serve as a blog or something else altogether.

    EE has a higher learning curve (and cost) than MT, WP and TXP. But it’s not insurmountable. There is no one “perfect solution”. But I think it handles structured data fairly well.

    Unless you’re a progammer, it’s a less intimidating solution than creating your own CMS. And it includes important basic features that James (#5) listed.

  24. 024 // Matt Brown // 09.21.2006 // 2:57 PM

    @Jeff:

    I disagree back :) I don’t think it’s a hack—it’s just a thin feature for extending WP a bit beyond a very simple blog.

    My main reason for bringing it up is because I feel that it would really work well with the situation you set-up—someone who occasionally puts a recipe and wants the data a bit more dynamic and searchable within their blog.

    I think Django sounds great (just starting to learn it myself), but I don’t think there’s a reason to knock a very capable, and very extendable system like WordPress. IMHO, Wordpress makes it realatively easy to take your blog/site into the “hard 20%”. How far depends on your situation—and of course you won’t get all the way… You always have to work hard for something cool :)

    If you’re set on pitting WP against Django, maybe someone within the Django community could come up with a basic blog app to port most of WPs features, and suck in a database. I’m sure it would bring a lot of people over. Just an idea.

    Thanks for the compliments on my site too—always good to hear.

  25. 025 // Baxter // 09.21.2006 // 3:53 PM

    I’ve worked with Wordpress a LOT, and Django some. I like Wordpress quite a bit. I think it’s quite good at what it does, for the most part.

    But there’s just no comparison between what it will do and what Django will do. And in some cases, building it with django would be faster than hacking WP.

    To use a car analogy (sorry), WP is a nice little sports car you could probably take racing if you worked it over enough. Django is like someone handing you a free F1 engine and chassis and saying “Here, I bet you can do something cool with this. If you need help, the engineers are readily available.”

  26. 026 // Kevin Teague // 09.21.2006 // 4:59 PM

    Well spoken piece. I agree that there is still a long ways to go with personal content management systems.

    DabbleDB proved that it is possible to create a web UI that gives control of your object model to the user, and it can be a pleasant experience. Of course the technical challenges of supporting a UI like DabbleDB is rather mind boggling.

    @Jeff - maybe the solution is you quit your day job and build something for us to use - I’d likely buy one :)

    @Nate K - Plone does allow you to define your own content types, define one-to-many relationships, etc. The learning curve for the system is steeper than PHP though (and hosting more costly). There is a lot of experience in the Plone world at making drop-in content types for the system though - for example I dropped AT Google Maps into a site recently and it was a blissfully simple process.

  27. 027 // Jeff Croft // 09.21.2006 // 5:50 PM

    @j. brotherlove: I’ve heard a lot of good things about EE, but haven’t ever used it myself, so I’m definitely not qualified to comment. Thanks for bringing it up, though — my impression of it is quite good, even though I’ve never used it.

    @Matt Brown: First off, I never brought up Django — you did. This post isn’t about Django, it’s about content management. Django isn’t a content management system by itself, so it would be apples and oranges to compare it with WordPress. You seem to keep comparing the two, but I am not. I can not figure out what made you think I was comparing Django to WordPress — can you explain where you got this idea? I don’t think I ever even mentioned Django and WordPress in the same comment, did I? Hell, I’m not sure I used the word “Django” at all in my post.

    I’m not “knocking” WordPress at all. I’m saying that WordPress is for blogging. Blogging is not the same as managing content. You are saying that it makes putting a recipe up easy — and I think you’re right — as long as you want that recipe to go into a blog post. Because anything you make with WordPress is a blog post. Right? To me, a recipe is not a blog post. A recipe is isn’t own piece of content and should be created, stored, and edited separately from a blog post. It can, of course, be related to a blog post — but it does not belong in a blog post, in my opinion.

    But I’m definitely not trying to knocking on WordPress. My impression is that it’s a nice blogging system. But I’m not talking about blogging. I’m talking about managing all your personal content. I don’t believe WordPress enables me to do this without inelegant hacks.

    For the record, your “hard 20%” and mine must be different. :)

    @Kevin Teague: DabbleDB is freaking amazing. I love that thing. But, it’s not a CMS. A CMS with a UI like that — now that would be something. :)

  28. 028 // soxiam // 09.21.2006 // 7:57 PM

    Although I largely agree with your conclusion, I believe any taxonomy is inherently limited by its own structure. Any hierarchical classification system will bump the walls if you throw enough data against it over time. Flat, personalized taxonomy (like tagging) does help in some cases despite their own share of disadvantages. For me personally, wiki and good search goes a long way for personal CMS.

  29. 029 // James Asher // 09.21.2006 // 8:17 PM

    Jeff, to fulfill my job as an occasional WordPress pedant - your favorite word - you technically did mention Django in your main post. However, I think Matt is bringing it up because many of the commentors have done the same. Furthermore, we all know your affinity for Django. Though, you’re right, you weren’t making the comparison to WordPress.

    I will say I understand where Matt is coming from. You are being contradictory. With regard to WordPress, you say

    Blogging is not the same as managing content.

    Yet, in your post - about content management - you predominantly talk about WordPress as failing to properly be a content management solution.

    And as for WordPress itself, you are again incorrect about how it works. Using your example of a recipe, you add the information - using the key/value pairs - on the same page as you make a blog post. But no, it is not in the blog post itself. This is true unless you pull it out and into your blog post, but it doesn’t do that on its own.

    So, you’re thought that:

    A recipe is its own piece of content and should be created, stored, and edited separately from a blog post. It can, of course, be related to a blog post — but it does not belong in a blog post, in my opinion.

    Can happen just like you describe it - and in WordPress, too.

  30. 030 // Jeff Croft // 09.21.2006 // 9:19 PM

    For me personally, wiki and good search goes a long way for personal CMS.

    Depending on your needs, it may. There are a lot of nice things about Wikis. But one of them is not dealing with structured data. In fact, Wikis are pretty much made, by design, to keep data unstructured. That has its advantages — simpler data entry being the main one — but it certainly has disadvantages, too.

    Consider my recipe example again. A wiki wouldn’t help you in this situation at all. There’s no way a wiki can help you find all the recipes that use peanut butter, or all the recipes that are deserts, or all the deserts that use peanut butter, were posted after a specific date, belong to a specific cookbook, and have been commented on by someone named “Bob.”

    If it’s okay with you to have unstructured data, then a wiki is great. That’s what it’s for. But I think, in most situations, there will come a day when you’ll kick yourself for not structuring all that data you’ve thrown at you wiki. It’s that 80% rule again.

  31. 031 // Jeff Croft // 09.21.2006 // 9:21 PM

    Blogging is not the same as managing content.

    James, you’re right. I shouldn’t have said that. What I really meant was “Blogging is one very simple form of content management, because it deals with only one content type (blog posts).”

    My experience, from browsing many sites that make use of WP, TxP, and MT, is that people would like these applications to manage other types of content besides blogs. People are tricking out their WP installs to handle the portfolio, their resume, their photos, etc. If you’re doing that, it’s a clear indication that you should be using something more suited to your content than a blogging app.

    If, on the other hand, you are doing nothing more than blogging, then keep on keepin’ on with WP, TxP, or MT — because they’re great at that.

    Yet, in your post - about content management - you predominantly talk about WordPress as failing to properly be a content management solution.

    I didn’t meant to single out WP. I also mentioned other blogging apps, I believe. The point is that I think it’s important to store data in models that properly define what that data is. If WordPress can do this, then I stand corrected. I’m still pretty leery to believe it really can (without hacking it, of course), but I definitely admit to not being a WordPress expert.

    Using your example of a recipe, you add the information - using the key/value pairs - on the same page as you make a blog post. But no, it is not in the blog post itself.

    It’s not? That seems strange to me. So, if I had 30 “blog posts” that have the recipe meta data, 30 others that have “album” meta data, and yet 30 others that have “book” metadata — how do I tell one from the other? Does WordPress store these in the database as blog entries, or as recipes, albums, and metadata, respectively?

    Say I do that, and then I want to create a list of all my recipes. In the template, am I going to be iterating through an array of blog posts, or an array of recipes? When I go to add a recipe in the admin, do I push a “Add recipe” button, or an “add blog post” button? If I decide I need another field on recipes, can I easily add that field to every blog post that has recipe metadata, or do I have to do it one-by-one? Can I add a relationship between different types of blog posts? So, for example, if one group of blog posts has “cookbook” metadata and other have “recipe” metadata, can I associate recipes with a particular cookbooks? If so, can I do a construct like this in my presentation logic?

    if blog post is a recipe and recipe is in a cookbook:
        print recipe.cookbook.author
    

    In other words, can I follow these relationships in presentation logic to print out an attribute of a related object?

    I think relationships is where WordPress’s key/value concept is going to break down. That’s because the point of the key/value plugin is to add metadata to a blog entry — not to turn a blog entry into another type of object.

    Right?

  32. 032 // Nathan Borror // 09.21.2006 // 10:59 PM

    People with sophisticated content needs will, over time, understand their need to adopt a platform instead of an application.

    Drupal, WordPress, Textpattern and MoveableType are all wonderful gateway drugs, but at some point these users will realize hacks are bad and platforms are good.

    Not saying this is everyone — just those that juggle multiple types of content.

  33. 033 // Matt Howell // 09.22.2006 // 11:50 AM

    This discussion reminds me of the early efforts to convince webmasters to use semantic markup. We take it for granted now that it makes sense to use <h1> tags and <blockquote> tags for their semantic value instead of their presentational value, but ten years ago, that wasn’t the case.

    What Jeff’s talking about here is just as important — actually, I’d say more so. We’re talking about a paradigm shift in how we approach not just the web, but data, and all of its uses.

    All this discussion about the relative merits of Wordpress and EE are just kind of … meh. None of them is really built with the kind of flexibility that can accomodate or describe the richness of the real world — which is ultimately what data-driven sites are there to do. Those tools just aren’t up for the job of where things are going — and it’s a good thing to start thinking outside this particular box.

    Also, I’d think that most devs and designers would see this trend as a good thing. This next generation of web and data apps isn’t going to be able to be created from some store-bought, off-the-shelf product. It’s going to take experienced, skilled people who can think on this level, and that’s good for the industry.

  34. 034 // Jeff Croft // 09.22.2006 // 12 PM

    This discussion reminds me of the early efforts to convince webmasters to use semantic markup. We take it for granted now that it makes sense to use <h1> tags and <blockquote> tags for their semantic value instead of their presentational value, but ten years ago, that wasn’t the case.

    Damn good analogy. Thanks for that. :)

  35. 035 // Matt Brown // 09.22.2006 // 12:31 PM

    @James Asher: Right on man—thanks for clarifying everything for me.

    @Jeff: No, WordPress will still work very well (without hacks) for the situation you set-up. All meta-data is stored in a separate DB table from post information. To separate the types of information into different contexts, you’d just have to put those posts in categories, which the meta-data would then inherit. If you feel limited by the ‘categories’ concept (a one to many relationship) you can use tags, which are (many to many).

    I just wouldn’t jump out of the gate and claim that WP is just begging for “inelegant hacks” to do anything beyond basic blogging. It’s just untrue. No, WP not a fully malleable programming framework that lets you model your own data, any way you chose—it is however, a very easily extendable content management application.

    But, eh…

    @Matt Howell: I agree, this discussion has gotten off track. And you’re right–a big shift in technology and tools is needed to help developers set-up and maintain stores of very different, dynamic content.

    Django/Rails/Cake/Whatever are going to be powerful tools for creating the next generation of dynamic websites. It’s going to be very exiting seeing these frameworks mature and see even greater adoption.

    BTW—I’m spent on this thread. I’d rather learn Django than defend WP :)

  36. 036 // Jeff Croft // 09.22.2006 // 1:47 PM

    I just wouldn’t jump out of the gate and claim that WP is just begging for “inelegant hacks” to do anything beyond basic blogging. It’s just untrue. No, WP not a fully malleable programming framework that lets you model your own data, any way you chose—it is however, a very easily extendable content management application.

    Fair enough. I definitely may not understand WP’s setup completely because I’ve never used WP with that extension. I’m sure you know more about it than me. But I do still know that if I have to click “Add blog post” every time I want to add a photo, portfolio piece, or recipe, it’s going to feel inelegant to me. :)

    BTW—I’m spent on this thread. I’d rather learn Django than defend WP :)

    That’s cool. I definitely didn’t mean to knock WP in any way. I just feel like if you’re going to do more than blogging, you should use tools that are made for more than blogging. If WP is one of those tools that is made for more than just blogging, then I misunderstood it from the few times I used it. That’s definitely possible.

    I still believe that it’s best to avoid hacking your blogging app into being a more full-featured CMS. If WP has grown into being more than a blogging app (or has plug-ins that turn it into more than a blogging app), that means it doesn’t apply here. :)

  37. 037 // Robert Castelo // 09.26.2006 // 8:22 PM

    Nice post, good examples.

    Just to expand on one of the other comments…

    Drupal has a module called CCK (Content Construction Kit) which enables a site administrator to define new content types, without needing to do any programming.

    There’s another Drupal module called Views which enables the site admin to define as many different views of content as they require. A view might be a list of a certain content type tagged with a certain term, which has comments. Views have a lot of filtering options, and are amazingly flexible.

    Also, I want to point out that Drupal is actually a framework - which just happens to have a great CMS already built with it.

  38. 038 // mrben // 09.29.2006 // 8:22 AM

    I hesitate to jump into such a heated debate, but here goes anyway:

    FWIW I think Django looks really cool, and I very much want to get into it - having read this I think I will probably go and install it on my Dreamhost account, and give it a go again, now that I have a current project.

    However, as a hacker of Wordpress-based sites, I do find that sometimes it works well as a ‘lowest common denominator’ rather that installed an all-singing, all-dancing CMS that requires me to disable a load of things, and (and this is the crunch point) that I don’t understand how it works.

    By way of an example, I’m putting together a simple site at the moment, that essentially uses 3 types of data - News stories, Events and Information. And I’ve hacked wordpress categories, and shoved on a few plugins, and it works very nicely, and has a very simple interface for the users to work with. I won’t go into full details, but if you’re interested, drop me a mail ;) I chose to do this rather than using Joomla (which I’m also familiar with) because, in the end, it was a damn sight easier.

    In retrospect, maybe I should’ve bitten the bullet and gone with Django, and may still.

  39. 039 // Jeff Croft // 09.29.2006 // 9:28 AM

    However, as a hacker of Wordpress-based sites, I do find that sometimes it works well as a ‘?lowest common denominator’ rather that installed an all-singing, all-dancing CMS that requires me to disable a load of things, and (and this is the crunch point) that I don’t understand how it works.

    Surely you are not calling Django an “all-singing, all-dancing CMS..,” right? if so, you’re probably going to be disappointed when you install it. Django isn’t a CMS at all — it’s a web application framework that helps you built web applications quickly. You can use it to build a great CMS, but it is not a CMS out of the box. And certainly not an all-singing, all-dancing one. :)

    I want to point out again that this article was in no way intended to be Django evangelism. I didn’t mention Django in the original article. Obviously I use a CMS I built with Django and I like it a lot — but that’s not what this article was about. This article was about the state of content management for personal websites and why I believe it’s inelegant to hack a blogging app into being something it’s not.

  40. 040 // Bob // 09.29.2006 // 4:35 PM

    Oof. This really doesn’t seem like an input problem—it seems like a search problem. You don’t mind any of the process until it comes to finding things—why not work on that problem (or let Google do it)?

    The other issue is that while you may remember your elegant structure and know how to query it, no one else will—they’ll all think of your stuff in different ways, using different terms. So making everything highly structured in one specific way impedes use in any other way.

    No thanks, keep things flexible and open.

  41. 041 // Jeff Croft // 09.29.2006 // 5:12 PM

    This really doesn’t seem like an input problem—it seems like a search problem.

    I disagree. It affects a lot more than search. It affects how you can display content, as well.

    The other issue is that while you may remember your elegant structure and know how to query it, no one else will…

    Two responses:

    1. Why does anyone else need to remember my data structure for my personal site?
    2. I think structuring it well makes it more clean and obvious. If I input recipes as blog posts, how is someone supposed to know that to add a recipe they need to add a blog post? Wouldn’t it be easier for them to find the “add recipe” button than the “add blog post” button?

    No thanks, keep things flexible and open.

    What gives you the idea that structured data isn’t flexible an open. I would definitely argue that it’s more flexible, and there’s absolutely no reason it would be less open. If Flickr flexible and open? Sure — and they have very structured data. Is Basecamp flexible and open? Yup — structured data. Del.icio.us? Yep — structured data.

  42. 042 // Sue Crocker // 09.30.2006 // 8:09 AM
    I think structuring it well makes it more clean and obvious. If I input recipes as blog posts, how is someone supposed to know that to add a recipe they need to add a blog post? Wouldn’t it be easier for them to find the “add recipe” button than the “add blog post” button?

    I use ExpressionEngine (EE) for this type of thing all the time. I can have different data fields depending on what kind of weblog (data container) I have set up. Then I create a stand alone entry form to do just that. If I have a book review weblog (data container) as well, I can create another stand alone entry for it.

    Display for the two different kinds of content differs, as does the search results.

    EE has a fairly steep learning curve initially, mostly because it is so flexible.

    NOTE: Not everyone can post in EE, only registered logged in users.

    Sue from north of the river. :)

  43. 043 // PXLated // 09.30.2006 // 8:30 AM

    Another EE user here. Sue hit on some of the keys so I won’t but It’s about as close to an ideal CMS as I’ve found. Unlimited data types (structured the way you need) that can be displayed in an almost unlimited number of ways.

  44. 044 // Jeff Croft // 09.30.2006 // 11:26 AM

    Thanks for the comments, guys. I’ve never used EE, but I haven’t always herd great things about it, and I know it’s pretty extensible — sounds like it may be a good solution for a personal CMS.

  45. 045 // mrben // 10.02.2006 // 4:45 AM

    Surely you are not calling Django an “all-singing, all-dancing CMS..,” right?

    Ouch, no - I definitely don’t view Django as a CMS at all. Given your statement about this not being about Django, I was trying to answer it in a non-Django way. I was actually thinking more about Joomla at the time.

    FWIW one of the problems I have with Expression Engine is it’s license - unlike Django (and Wordpress/Joomla) it’s non-free (in beer and in freedom). (Well - there is a free core engine that’s free for personal and non-profit use).

  46. 046 // Joshua Kendall // 10.03.2006 // 5:50 AM

    Well, I’m glad I read this before I actually started hacking away at Textpattern (again). :)

    I think I am going to go and make my own using Ruby on Rails so I don’t have to hack at Textpattern.

    Oh, and the recipe example, that’s helps me alot.

  47. 047 // Gilberto Creque // 10.03.2006 // 11:04 AM

    I’m not sure why people think you are trying to knock WordPress or that you are trying to compare Django to a CMS of any type. What’s funny is I am working on my own personal CMS with CakePHP for a lot of the reasons you pointed out in your post. I was using WordPress for my blog, Pixelpost for my photoblog, and Gallery for my photo galleries. I didn’t like how there was no cohesion between any of them.

    You’re idea of rolling your own CMS is the only way to go IMHO. I don’t see how any one application out there will allow you to manage your content exactly how you want to.

  48. 048 // Jordan // 10.05.2006 // 2:24 PM

    Re: eZ publish

    I know the point isn’t to push 1 particular CMS over another, but I think it’s also good to give credit where it is due, and eZ publish passes your “good CMS” test in 2 ways: 1) It is essentially a framework on which to build your site. It has a robust and extensible templating language that goes far beyond what you’d find in WordPress, Joomla, or MovableType. 2) You may not have found it in the demo, but eZ publish provides a very powerful and relatively simple way to define custom objects and custom object attributes. It also gives you the ability to define relationships between content at the object level, which can be very useful.

    Of course, all this functionality comes at a price, which is that eZ publish has a steep learning curve and is really aimed at developers rather than content editors. However, you can create your own “backend” interface just like you’d create your public web site - so the user never has to grapple with something that’s not aimed at them in the first place.

  49. 049 // blurb // 10.06.2006 // 12:17 PM

    Yes. Yes. Yes.

    In my head, I have a vision of what a truly flexible system would provide and it is most definitely a software problem. The responses in this thread seem to indicate that “you can do this with such and such plug-in or by using such and such code for product XXXXX”. The point in flexibility is that from the start, a product needs to ask questions of the user and have the flexibility to connect the answers.

    I think the reason that blog software is so hacked is that it gets part of the problem solved: ease of use. It’s relatively easy to make plug-ins. The problem is that plug-ins can die and the product evolves away from structure that the plug-in used. If I’ve got a professional site, that is not a long-term solution. Even relying on blog software is touchy. This isn’t a dig, just a painful truth.

    Until developers stop thinking like developers and think bigger, we won’t see solutions that are mind-blowingly powerful, flexible or easy to use.

    I could go on for hours about this. Thanks for this post.

  50. 050 // James Bennett // 10.06.2006 // 1:16 PM

    In my head, I have a vision of what a truly flexible system would provide and it is most definitely a software problem. The responses in this thread seem to indicate that “you can do this with such and such plug-in or by using such and such code for product XXXXX”. The point in flexibility is that from the start, a product needs to ask questions of the user and have the flexibility to connect the answers.

    Damn straight.

    Back in the day, when I was freelancing, I had to do god-only-knows how many really ugly hacks to try to wrangle a CMS to suit a particular client’s needs. Then I started picking up Rails, then Django, and now I work at the home of Django, where a huge part of our workflow centers around “what are we going to need it to do” before we write so much as a line of code. In fact, for the last couple large-ish apps I’ve developed here, I’ve spent more time talking with people about what the app would need to do, what features, what interface, etc. than I did actually writing the application code.

    I can’t express how happy I am to be working someplace where that’s just the routine order of business, as opposed to someplace where it’s a “maybe in the future” thing.

  51. 051 // Will Emerson // 10.07.2006 // 12:51 AM

    Interesting discussion. One approach used with a great Mac program, Tinderbox(www.tinderbox.com)-maybe Windows version someday—is to allow collection of unstructured data and then through clever search and links and attribute use along with a flexible template system, the creator can organize and output data in any number of ways. This separates data collection from organizing and display. Amen. It works for a personal blog, a research project, a todo list, documentation, a hypertext novel, a filing system, a real estate agent’s document system. The program has a learning curve and the fingerprints of its creator, Mark Bernstein, all over it but it has great powers.

  52. 052 // Phil Leitch // 10.12.2006 // 6:19 PM

    I’ve used EE quite a bit personally and for clients and the flexibility in defining data and displaying it is pretty amazing. Recent updates have added the ability to create relationships between diffferent data sets which gives you even more power to let you mind wander and create about anything you want.

    Include the incredible module Freeform from Solspace and you can build probably 90% of the sites a client would ever want.

    Lately I’ve wanted to play with Django and now this Tinderbox thing is sounding interesting too.

    Great post btw.

  53. 053 // Miguel Angel Friginal // 10.28.2006 // 12:46 AM

    Wider support for XML (including namespaces, so Basecamp and Bliksale can live together) and XML-native databases with XQuery support making searches across documents and ‘categories/elements’ easier (eXist or Berkeley DB XML come to mind) will get us there.

    Is something that has been possible for a while, just not popular enough.

  54. 054 // Marc // 10.30.2006 // 12:55 PM

    I think websitebaker is one of the best CMS, i´m using it a long time with different layouts… have a look…

  55. 055 // Actimel Francisco // 05.23.2007 // 12:21 AM

    Drupal has many different modules that allow you to create data types. IMHO, Drupal is on the top-three list of CMS.

  56. 056 // Revin Floyd // 11.25.2008 // 6:17 AM

    No one ever seems to really address the crux of “my” problem in discussing “the” problem of content management. I have easilly 30,000 documents on my computer. I can hardly ever find what I’m looking for when I’m looking for it (unless it’s been appropriated of my current project). I have hundreds and hundreds of Word.Doc, Word.Dot, Adobe.pdf, Excel.xls, Excel.Xlt, PowerPoint and so on but most have funky file names, often the CMS applied file number or abreviation or whatever. I have thousands like this! (ex: “Chapter 6 - Using Internet Explorer 7” is named 0735622701_ ch06.pdf).

    I used to change the filenames right away for .pdf files I download, but often, I’m just moving to quick and don’t have time; plus if I change the names of doucments as I download them, I end up with duplicates with different names.

    My goal was to create an MS Access or SQL Server database, as I’ve got skills there. But how to deal with the massive amount of data? I know how to use Access to open up Office documents and get the title from (or at least the top string of whatever’s there) With .PDF documets, I know no other way to get the document’s title except to open it up manually and copy the title and paste it into my database. I was able to do about 35 in an hour (not fast enough with 4500 .pdf docs). Then there’s the matter of organization, if the file moves, I need my system to update where the file moved, or got deleted, etc…

    I realize one way to do this would be to start by updating fields in the file’s attributes. That would be great, I could write some kind of script for that.

    Is there some easy way to get the first 100 characters out of my different documents and get a table of that data with the file path without opening them manulaly? I would be really great to be able to turn on my computer and have it find what I’m looking for like a website, browse or search. Now I find myself just randomly opening files to see what’s inside!

  57. 057 // uggs store // 12.23.2009 // 6:53 PM

    Halfway through the year SPIN tipped their hand by offering the 20 Greatest Albums Of 2009 … So Far. If you remember, the list wasn’t in any specific order. Their 40 Best [url=http://www.uggs-boots-store.net]ugg boots store[/url] Albums Of 2009 are, and it’s interesting to see all the titles that popped up after the last one was published. As well as the albums that missed the cut after [url=http://www.watchesxm.com]Cheap watches[/url] they were spun a bit more: Peter Bjorn And John, Blk Jks, Regina Spektor, Glasvegas, Mavado, and Sa-Ra Creative Partners are nowhere to be found. The list — one of oh so many lists — is also refreshingly interesting in and of itself, a fine example of a publication stepping outside of the hive mentality and coming up with something that feels personal. Even if I don’t personally agree with a lot of it.

Tags for this entry