Gradual Enhancement

  • Adam Wiggins' story (paraphrasing) - friend wanted to have a clock on his website, Adam gave him a PHP snippet, and coming back a few weeks later that friend cobbled together an amazing interactive website, by piecing together various random PHP bits
  • gradual enhancement seems like important idea for End-User Programming - allowing users to change small pieces of functionality without feeling overwhelmed, and slowly "luring them in"

A particularly useful design pattern that exemplifies commensurate effort is progressive disclosure. In progressive disclosure, advanced or less frequently used controls are hidden in an expanding pane, which offers a small expand/hide toggle control to give the user access. This type of design is a boon to expert users, because the toggle is usually “sticky”; that is, once left open, it stays that way. It also gives intermediates an easy window into more advanced features but allows them to be stowed away neatly when not in use.

About Face

  • while "progressive disclosure" is described here in terms of advanced UI controls appearing when the user wants them (is ready for them), I can see a clear parallel to how we could progressively show more of the "internals" of the system, or allow users to make more complex things, enhancing what they already know

Novices need "progressive evaluation", an environment where it is easy to check a program fragment before adding to it. Ideally, every step could be checked individually and combinations of steps could be checked to see whether something had gone adrift. So the environment needs to allow seriously incomplete program fragments to be evaluated

— Usability Analysis of Visual Programming Environments - A "Cognitive Dimensions" Framework

  • Gradual Enhancement on a programming level could be achieved by creating an environment in which programs can be created in a step-by-step fashion, every new piece visible and easily testable before adding to the larger codebase

Consider the typical trajectory of Emacs power users. They start by downloading Emacs, and learning enough of it for their editing needs. At some point, they want to do some basic customization. Then some less basic customization, which is likely to be the first contact with Emacs Lisp, even if it's only a copy-paste of a small function found on the Emacs Stack Exchange. With the confidence gained from such minor tweaking, they move on to more ambitious tasks. Some end up developing and maintaining major Emacs Lisp packages, but most don't, and that's perfectly fine.

The most successful malleable system in history