A Programmer's Reflections on Vignette

Last week, after about a year of work by our team, we launched the first of our websites at the University using the new Content Management System we’ve been working on. It’s based on Vignette’s V7, a gigantic, sprawling, enterprise CMS system. (My standard joke: “Enterprise software is software that costs a million dollars and doesn’t work when you take it out of the box.”) I thought this an opportune time to post a few reflections on what I’ve learned of Vignette during the past two years I’ve been working with it.

First off, one must understand that Vignette’s offerings are not a single, monolithic product, but a suite of products which has been created by acquiring other companies and their software and then writing some integration pieces in-house to tie it all together. As a result, the quality and engineering foci of the various pieces are pretty divergent. Their Portal, for example, was bought from Epicentric a few years back, and is nicely engineered and well thought-out. The Content Management System, on the other hand, was developed internally by the engineering team and has a byzantine API and a number of bugs. (In fairness, the CMS portions are a good deal more complex than the Portal bits.) Finally, Dynamic Site, which is the presentation layer of the CMS, was actually written by their Professional Services organization, rather than their engineering team, and while it does what it does fairly well, it also has some big, gaping holes in its functionality that have yet to be filled.

I’m going to focus on the content management aspects of the system, since that’s what we’re using the most. Vignette provides web-based tools to manage structured content. Though these tools only work in a limited number of browsers, due to the extensive use of Javascript and failure to adhere to W3 web standards, they are quite powerful. Content can be reused, versioned, assigned to multiple presentation channels, searched, run through workflows, published to various stages, and rendered as XML, HTML, or any number of other formats. Thus, if you have people who can take the time to learn to use Vignette’s content management tools, it’s possible to do some very powerful things with your content. The interface to do all of this, however, is quite complex, and isn’t really suitable for use by people who don’t spend a significant portion of their day with it. As a result, we’ve ended up having to rewrite a fair portion of the content editing interface to make it manageable for the people in the University who will be maintaining sites — typically administrative assistants who only spend a few minutes each week making tweaks to their department’s site.

Initially, Vignette didn’t provide any application at all in V7 to present the system’s content, but instead relied on the implementors to write an application to pull content from the database via Vignette’s API. As I mentioned, Vignette’s API is not at all easy to come to grips with, nor is it particularly thought out. (For example, each content item in the system has two unique identifiers — a VCM ID and a GUID. Some API calls require one, and some require another. Not only is it not always clear which is which, but getting one if you only have the other takes some doing.) Several months after we started working with the system, however, Vignette introduced Dynamic Site, which is a framework on which to build content presentation applications. It includes some powerful content-querying features, and is a marked improvement over the void that preceded it, but still doesn’t provide a lot of flexibility in how a site can be structured. Our user experts deemed it too difficult for our users to be able to interact with directly, however, so we wrote around a fair portion of it as well.

As we got more content into the system, its lack of flexibility began to cause problems. I wanted to add some additional fields to an existing content type so that we could track more information. In most database driven applications, this isn’t problematic: you add the field to the database, maybe update a schema definition file somewhere, and you’re in good shape. Unfortunately, with Vignette, once you define a content type and have instances of it, changes to the content type are off-limits. When I contacted Vignette’s support about this seemingly-common task, their recommended solution was this: “1. Export all the instances of that content type. 2. Delete all the instances of that content type. 3. Make the changes you want. (You may have to delete the content type definition and rebuild it from scratch if the changes you want to make are extensive.) 4. Import your exported data into the newly modified content type definition.” Not a particularly viable approach for a production system.

When programming, one always comes across challenges, which I like to think of as a closed door. One thing I’ve really been enjoying about learning Ruby on Rails is that more often than not, when I put my shoulder to that closed door and push, I stumble because there was so little resistance. “Oh, I’m through and done already? Wow, great!” Programming for Vignette has been the opposite experience. I push, budge the door a few inches, get my fingers caught between the door and the frame, have to call some friends in to help push, and finally get the dang thing open. While it’s generally possible to get things done, it always feels like about four times as much work as it ought to be — an experience that tends to be a big joy-killer for a programmer.

There are some bright spots, however. As I mentioned, Vignette’s Portal product is well thought-out and implemented. It supports PortalBean, a proprietary interface for writing portlets, and JSR-168, the Java standard for the same task. It also supports WSRP, which allows it to publish portlets deployed on other, potentially non-Java systems. Vignette Business Integration Studio is a nifty visual programming tool designed principally for doing data migration and transformation which can talk to a variety of disparate systems. I quite like it as well. Though I haven’t worked with it, Vignette’s Builder also looks to be a very nice way to quickly build portal-based, database-backed applications as well.

So, where would Vignette’s Content Management System be a good fit? In the case of a highly-structured site with lots of traffic, consistent data and people devoted to content management, it makes reasonably good sense. The Olympics’ official site when the games were in Greece was run off of V7 and enjoyed good success. Vignette’s older content management software, Storyserver, grew out of software developed for CNET, a technical news and information site — the sort of application to which V7 is still well-suited.

At the University, however, our most important needs are flexibility, simplicity, and ease-of-use. These are, unfortunately, Vignette’s weakest spots. As a result, it has taken us an inordinate amount of time and consulting hours to finally get to the point where we’ve been able to field what is, ultimately, a pretty basic set of content management services. While there are aspects of our system that I am proud of, in general I’m left with a sour feeling that we’ve put in an enormous amount of effort for a fairly small payoff, and believe much of that to be a result of our decision to build on Vignette.

Yeah, You're Right!

On the way home from church today, the kids were discussing the latest Harry Potter movie. After minutes of loud enthusing, Maggie boldly proclaimed, “You know, they should really make a book out of that movie!”

Brain Activity and Gaming

During the time I was working at Origin, I bought and sold computer games at an alarming rate. This wasn’t because I spent endless hours playing games, but because the part of the games I most enjoyed was learning how to play. Once I had the mechanics of a game pretty well figured out, playing it through to the end had little appeal unless it had a particularly strong story I wanted to see the end of. I discussed this with a couple of my coworkers, and they confessed to the same thing — games held their attention only as long as it took to figure out new play mechanics, to sort through novel techniques, etc.

Thus, it was with considerable interest that I read this paragraph from Roger Ebert’s review of Silent Hill, the movie based on the video game of the same name:

Dr. Shlain made the most interesting comment on the panel. He said they took some four and five year-olds and gave them video games and asked them to figure out how to play them without instructions. Then they watched their brain activity with real-time monitors. “At first, when they were figuring out the games,” he said, “the whole brain lit up. But by the time they knew how to play the games, the brain went dark, except for one little point.”

Apparently in many cases, the meta-game of figuring out how a game works is a much more mentally engaging activity than the game itself. I would guess that the results — the “one little point” — would be different depending on the game, but I at least now have some empirical support for my short attention span.

Still Alive, Kicking, and Attracting Black Helicopters

Things have been pretty busy around here with a dozen people living under our roof, so I haven’t gotten around to posting much lately. A few recent highlights in the family news department:

  • Have been enjoying time with The Adams Family (snap, snap) immensely. I’ve tried to drag them around Texas in high speed tourist mode, but they’ve been content to relax and enjoy time of leisure and communion (as much as possible with 8 kiddos running around the house). It’s been great to have the time together.
  • I took the three eldest kids to the beach this past weekend to camp on the sands of Port Aransas, where we met up with Meara, and to enjoy Sandfest 2006. We had a great time; there were some super sculptures, and the beach is always a treat for us — one of the places where we can stop being in a hurry and worrying about what needs doing and just play. Bliss! (You can see some of the photos on Flickr.)
  • Jeff, my buddy Jason and I yesterday build a water rocket based on these plans. While we didn’t get it finished until 9:30pm or so, the project was a huge success — we estimated our best launches at about 150 feet into the air. Plus, as an added bonus, we didn’t get arrested! Between this, the trebuchet, and the cannon, I’ve got a pretty good arsenal going now.

    Check out Jason’s typically better and more thorough writeup here.

African Invasion

Jeff and Karen Adams and their delightful brood of children arrived in Texas last night for two weeks of work and visiting. As Karen is Kathy’s sister, and Jeff an old college buddy of mine, we’ve been quite looking forward to their arrival for some time. The cousins were all hyper-excited to see each other, and after waking Liam by throwing pillows at his head, spent an hour running around the house shrieking their glee for all the world (or at least our neighbors) to hear until 11:00pm, when we finally decided it was time to duct tape them all to various beds around the house.

I was thrilled when Jeff hauled in a gigantic african drum by way of a present; it’s a beautiful piece of work, carved from the trunk of a tree with a hairy goatskin drum head. (I’m a little baffled as to how they navigated transoceanic flights with such a beast in tow, but am grateful for their tenacity.) I’ll need to enlist the aid of some of my percussionist friends to teach me how to make the most of it!

We’re very excited about the chance to spend the next couple of weeks with this too-infrequently seen portion of our extended family!

New Options for Do-Gooders

I’ve added a couple new items to the “Do Some Good” sidebar:

  • The Fight Aids link goes to the World Community Grid, a distributed computing effort that allows you to donate your unused computer time to a couple of giant research projects, among them an effort to find more effective protease inhibitors to deal with HIV. (Windows and Linux only so far, unfortunately.) Best of all, it doesn’t cost you a dime.
  • Help Bill Help Nehemiah Project goes to the fundraising page of Bill Cunliffe. Bill is my sister-in-law’s brother who lives in London and is running in the London Marathon on April 23 to benefit the Nehemiah project, an organization that helps people with a variety of addictions and other issues to overcome them by living in close-knit community. Great work. Bill needs a few hundred pounds more to reach his fundraising goal, so go chip in! (You can use a US credit card — the bank will do the currency conversion for you automatically.)
  • Give a Cow links to Mercy Corps’ “Cow Kit”, which allows you to fund the gift of a cow for an economically marginal agrarian family. It’s truly the gift that keeps on giving.
  • UPDATE: Seth is riding in the PMC again this year, so go Help Seth Fight Cancer!

Short Stories

  • Back when Abigail was still of the appropriate age to sit in a high chair, we had stopped at El Chico on the way from Denton to San Antonio. As a red-blooded Mexican food loving Texan, I was delighted when I looked over to see Abigail diligently dipping her chips in salsa before wolfing them down. She still falls down as often as she manages to walk, but by golly, she knows what to do with a tortilla chip!

    My pride swelled to epic proportions a few minutes later when I looked over and found that she had abandoned the tortilla chips altogether and had upended the salsa tub, sucked it dry, and was now licking the last dregs from the bowl. That’s my girl!

  • Once, while working at Motorola, I was standing next to a guy at the row of urinals when he glanced over and said thoughtfully “that’s a pretty short one you’ve got there.” It took me 5 seconds of flummoxed silence to realize that he was referring to the fact that I was using the urinal that was at the appropriate height for kids, and not insulting my manhood.

Surgery Redux

After Kathy left for her sinus surgery this morning, the kids and I left for the University with a pile of orange paper in hand. We found the highest places we could get to and made and launched paper airplanes and helicopters for about 90 minutes.

Upon our return, we got a call from the ENT who was responsible for the surgery. He said everything went fine, and we should expect to hear from the surgery center in about two hours when Kathy comes out of the anaesthesia and is ready for picking up.

So, apparently all went well. Thanks for your prayers and pies! I’ll post again once Kathy is home and settled in.