Working in Publishing as a Developer

Thursday, March 5th, 2009

Whether you’re starting for a top-down, old-style, publishing company or you’re joining a collaborative blog , your tasks as the developer can be grouped into four broad categories. Let’s explore these responsibilities and challenges of programming for a publishing company.

Content Management is King

The CMS (Content Management System) is the center of the publishing action. Your site’s product is content and the CMS is the star tool. The flow chart of activity is as follows: first, the editorial and sales teams inputs content into the CMS which then displays it to the audience and allows the latter to navigate it and interact with it. Finally, through the CMS, the sales and marketing departments follow and analyze the audience trends.

Your responsibility as the developer is to satisfy the 3 areas of the online publishing machine: input, distribution and tracking.

Because of the CMS’ importance, its choice, if you have a say in it, is an important one. Do you go with open-source or do you go with a custom built one? For AskMen, I decided on building a custom CMS using CakePHP, despite what Zend may claim, because they wanted a custom tailored tool. If you choose an open source CMS, make sure it contains the following items:

  • Tagging: The ability to assign multiple keywords to an article
  • Categories: The ability to structure content in a hierarchy
  • Comments: The ability to comment on content
  • Top Feature Tracking: The ability to identify features by popularity, published date and comment count
  • Article Types: The ability to create types of articles with unique fields (e.g. Horse Power for a feature on a car)
  • Photo Management: The ability to upload, crop and embed graphics into features

Of the CMS’ I am familiar with, Drupal and, to a lesser extent WordPress are good choices. Drupal includes the convenient CCK (content creation kit) with allows editors to create content types without developer assistance and WordPress makes the process of starting a small publishing site easy. Both CMS’s are also open source, written in the popular PHP language and receive a lot of user contributed extensions.

Content Sharing

As the site continues to grow, deals may develop to share content with other publishers or aggregators (MSN, Yahoo, etc.). For instance, MSN will look to third party publishers for content that they display under their domain name. Once an agreement is signed with MSN, your site must provide them a NewsML feed of your content.

Your CMS will need to generate and parse feeds of various formats including RSS, NewsML and any internal feed you may encounter within your organization. At FIM (Fox Interactive Media), IGN would share their content with other FIM properties in a proprietary XML format similar to RSS and NewsML.

Building these feeds is simple enough: a list of articles is retrieved from the database and their content is formatted using the selected feed’s markup language.

Parsing incoming feeds is more challenging. Articles coming from an external source may be required to pass the same editorial scrutiny as internal articles. You will be required to integrate the content of these feeds into the CMS and morph it to match the structure of your content.

Content Caching and Performance

Once your site gains a strong following, you may notice that at peak times (usually Mon. to Fri., 9AM to 6PM) your site is running slower. Or, perhaps, your site is preparing for a big, annual event and expects an increase of traffic from Digg.com. In either case, your responsibility is to ensure the stability and quick delivery of content. You may handle this in two ways: temporary caching and performance optimization.

With caching, you may store entire features into HTML files accessible to anonymous users, thus bypassing the CMS entirely. Super-Cache for WordPress is a fine example of this functionality. Once an article is updated, or a comment is added, the HTML file is recreated to prevent it from becoming out of date (‘stale’). Alternatively, you may cache your pages on a dedicated cache server, or, better still, with a CDN (content delivery network) such as Akamai. Not only do they have servers in proximity to your audience (which improves delivery time), but they also allow parts of a page to remain dynamic (e.g. comments, top articles feature, etc). CDN services come with a price, however, that is steep and may be out of reach for smaller sites.

If you choose to improve the performance of your CMS, try using a code profiling tool such as xdebug for PHP. They allow you to pinpoint the bottlenecks in your code. Processes that are most time-consuming and spread across multiple pages should take highest priority.

Microsites and Widgets

Throughout your employment, you may be asked to create one-off sites (microsites) or widgets to present information in novel ways. For instance, an advertising agency may approach your site with an offer to create a number of advertorial articles focused around their product. These articles may require a unique design and/or user interactivty (e.g. survey, poll, questionnaire, contest, etc).

This is perhaps the most interesting part of the job because, as a developer, you can experiment with new technologies and standards. I would use these opportunities to advance my knowledge of CSS, HTML, JavaScript, Flash, etc.

Not a Concern: Business Logic

The one thing that is rarely an issue in online publishing is business logic. Aside from the editorial publishing process and extending the feature model to support new types of content, both of which may already be taken care of by your CMS, there is little logic to consider.

In Conclusion

Working in online publishing is a rewarding, collaborative and relatively pain-free experience for a developer. Your job is mainly that of a facilitator: provide tools for editorial to focus on the content, not the publishing; provide a functional site for your readers; and help your company better understand its audience.

Thanks to Liesl Barrell for helping me edit this entry

Leave a Reply