Development standards for e-learning… a starting point
Understanding that we should be using standards and best practices throughout e-learning development, the question becomes “what standards and best practices should we follow?”
Here’s my attempt at outlining some basics. Please feel free to suggest additional items in the comments section.
Follow established "web" best practices.
Separate presentation from content as much as possible by using Cascading Style Sheets and semantic (X)HTML markup.
- Use classes instead of inline styles or font tags.
- Avoid tables for layout purposes, except when presenting tabular data.
- Keep your markup semantic by properly using available elements: h1, h2 and h3 for headings, p for paragraphs, div for block-level content divisions (similar to fieldset in forms), and span for inline classes. Don’t be afraid to try lesser-known elements such as acronym for acronyms, dl for definition lists, and cite for citations!
- Note: although div is heavily used in CSS-based layouts, you should try to avoid overuse of the div element. Bloated markup is unsemantic and ugly.
- Avoid direct copying and pasting from Microsoft Office products, as this tends to insert bloated Microsoft-specific HTML.
- Avoid deprecated or browser-specific elements such as blink and marquee.
Separate behavior from content as much as possible by using unobtrusive JavaScript techniques.
Even if your course depends on JavaScript being available, this is a good practice to follow.
- Don’t use inline scripts. Keep all scripts in the head of your document or in an external .JS file.
- Use a lot of error checking throughout your scripts. This helps ensure that if an error occurs, your script should fail gracefully, and you should be able to diagnose the problem more easily.
- Avoid using JavaScript where it isn’t needed. CSS is capable of handling many chores once assigned to JavaScript, such as image-based mouseovers and "hover" or "dropdown" menus. CSS has the added bonus of processing the chore much faster than JavaScript, too!
- Avoid using the global space. With the proliferation of JavaScript in our "Web 2.0" world, web pages use multiple script libraries and customs functions. Avoiding using the global space by using faux "namespacing" (object literals) can greatly reduce the odds of your script conflicting with another script.
Avoid plugins and browser-specific technologies as much as possible
- Don’t use Microsoft’s ActiveX or the Windows-specific FSCommand. Stick to cross-browser and cross-platform solutions.
- Avoid Java and any other format that requires a plugin, especially one that requires a large download. Flash Player may be the only exception due to its incredibly high saturation rate, but even then you should plan ahead in case users don’t have Flash Player available.
- If a plugin is required, especially an unusual or uncommon plugin, be sure to notify the user of the requirement before they launch the course.
Keep content as accessible as possible by following established accessibility best practices.
- Avoid tables for layout purposes, except when presenting tabular data.
- Avoid using images for important navigation elements. Your markup will be cleaner (and you’ll be separating your style from content) by sticking to text-based navigation links. Don’t worry — you can still use images by utilizing CSS image replacement techniques! If you decide to use images in your markup, be sure to include useful descriptive text in the alt attribute.
- Be aware of tab order; don’t mess with the tab order of page elements unless it’s absolutely necessary.
- If your page contains lots of navigation menu items, give the user a ’skip navigation’ option. This is especially important for people who use screen readers.
- Ensure links contain useful text such as "Click here to continue" or even "continue," not the more obscure "click here."
- Heavy use of onmouseover and onclick in JavaScript can cause problems for people who don’t use a mouse (many people use their keyboard for all navigation purposes). Be aware of the repercussions of your coding techniques.
- Try testing your course in a popular screen reader such as JAWS.
- Rich media such as Flash videos are fine to use in your course. However, there are some simple steps you can take to ensure your Flash content is as widely accessible as possible:
- Use fallback (popularly known as "alternate") content in your HTML in case Flash is not available. For instance, if your page contains a Flash video, include a text transcription in the HTML. When Flash isn’t available, display this transcription automatically (SWFObject is great for this purpose).
- If using video, screencasts, or any other media that contains audio narration, include a closed-captioning option or a link to a text transcription.
- Adobe has made strides to make Flash SWFs more accessible. Keep up with the latest trends, and use Flash best practices to ensure maximum accessibility.
Keep your courseware portable.
- Avoid server-side dependencies such as Active Server Pages (ASP), PHP, and databases.
- Use standardized LMS communication protocols such as SCORM and AICC. Avoid using proprietary course-to-LMS communication methods as they make content migration and reusability a very difficult task.
- Avoid using remote content if possible. Some systems may not be able to access the remote content due to security or connectivity issues, which could lead to a broken course.
Ensure your course has a long shelf-life and is easily maintainable.
- Avoid uncommon development platforms and/or proprietary file formats whenever possible. This ensures your content will remain editable for the foreseeable future.
- Clearly annotate/document your development process and home-brewed scripts. This ensures future team members and/or contractors will be able to work on the project if needed.
- If you compile or compress your files, be sure to keep a commented, uncompressed copy of each file with your development files. This applies to both JavaScript and Flash-based projects.
What do you think?
Let’s have a conversation about this. I’m 100% positive I’ve missed a few things, and I’m pretty sure not everyone will agree with my statements. Why not join in and add your two cents? I’ll leave the comments section for this topic open indefinitely.