Advice to young standards authors
aaronsw posted The
Standards Manifesto a few days ago. In it, he expresses
frustration with the W3C. I can certainly identify.
I've had a fair amount of experience with standards
processes over the
years. I'm sure I'll have more. Most, but not all, of the
experiences
have been unpleasant. Standards are incredibly important,
but not much
fun. Standards committees, in particular, tend to be
particularly
tedious, and not very smart (even if the individual members
of the
committee are). In fact, standards committees are in many
ways the
least qualified entities to be writing standards.
Designing good standards is an art, and an
underappreciated
one to
boot. One of the most important quality metrics is
complexity. A
standard should be as free from unneeded complexity as
possible. The
cost of a spec goes up by roughly an order of magnitude from
spec to
prototype, and again from prototype to production-quality
implementation. It's too easy for glorified technical
writers to come
up with a new feature if they don't have to implement it
themselves.
Standards reflect the process that creates them. The
biggest
problem
with standards processes is lack of openness. There is a
spectrum,
ranging from complete transparency (the IETF at its best,
where
everybody is welcome to show up at meetings, and "rough
consensus and
working code" carries the day), to evil cartels such as the
DVD CCA
and the BPDG. In
these extreme
cases, only members are allowed to participate, only members
are
allowed to see the spec, and there are NDA's and all kinds
of legal
restraints to "protect" implementations of the standard. The
W3C is
somewhere in the middle of this continuum. In general, you
have to be
a paying member to participate, the deliberations are
private (and
NDA'd), but the resulting spec is public, comments from the
public are
solicited, and there are (usually) no patent royalties. The
W3C seemed
to be headed down a darker path, including promotion of
patent
licensing, but to their credit they responded to public
outcry and
backed off.
It is often said that "the great thing about
standards
is
that there
are so many to choose from." I propose that the same is true
of
standards processes. Small, motivated groups (or even
individuals) can
and should make standards. In fact, their work is often the
most
important. Examples abound. While there was a standards
committee
around JPEG, the really important work was done by the IJG
(mostly
Thomas Lane), which standardized a patent-free subset of
JPEG and
produced a very high quality free implementation. Sockets,
developed
by Bill
Joy
in the late seventies and quick to become the universal API
for the
Internet, were ignored by standards committees until just a
few years
ago. Committees tended to favor things like XTI, now
mercifully dead.
Standards bodies are reasonably good at codifying
existing
practice.
They suck at doing research. A good process winnows needless
complexity from a standard, focussing on the essence of the
problem.
It's almost a quantitative science, as different approaches
to the
same problem may differ quite significantly in complexity.
A naive person might assume that building a global
information
network, scaling from coke machines to supercomputers, would
be a
harder problem than, say, synchronizing audio and video in
multimedia. Yet, the TCP/IP documents (RFC's 793 and 791) weigh
in
at about
128 pages and are reasonably complete, while SMIL is about 500
pages, and
includes lots of other standards by reference.
The economic incentives
for closed, proprietary (and complex) standards are
powerful. Who
would spend grueling hours in a standards committee to help
create a
beautiful, free, simple standard, out of pure altruism? In
fact, much
of this work is similar to writing free code, but it tends
to be quite
a bit less fun.
I think the salvation lies in making the creation of
new
standards
more fun. I'm not sure the best way to do this, but
can offer my
own experiences. The most fun I've had in a standards
process has been
IJS. It was
in many
ways a purposeful experiment in process. I deliberately
narrowed the
scope (things like UI and i18n are not included), while
still trying
to solve an important problem (making it easy to create
printer
drivers decoupled from the rasterization engine). I also
acted as a
dictator with respect to the spec. I didn't include
suggestions from
the mailing list until I was convinced that they were
necessary, and
properly thought through. Another key part of the process
was the
reference implementation, not merely free but also designed
explicitly
to adapt easily to other people's drivers rather than impose
my own
framework.
Also important was the fact that IJS built on the
work
done
by HPIJS,
a working protocol and codebase that merely had a few
portability
issues and some aspects specific to HP printers. I didn't
have to
take on a whole research project.
IJS is of course not perfect, but I do think it's
doing
its
job. My
time working on it is justified in the improved user
experience and
decreased support load, and it was kinda fun. (see, it
wasn't
altruism, it was enlightened self-interest :) The next time
I get
involved in a standards process, it's going to look a lot
more like
IJS than a W3C working group.
So, my advice to Aaron? First, by all means seek a
better process
than
the
W3C's. I have no doubts that such a process can be found.
Second, be
clear on whether the task is primarily research into what
should be
standardized, or codifying a well-understood domain. In the
former
case, it makes sense to just go do stuff. In the latter
case, finding
consensus is more important. Third, strive for simplicity,
Feel
especially free to ignore those who wish to add their own
pet
complication, especially if they don't share your
vision.
Last, and perhaps most important, treat it as
something
that's
supposed to be fun. Don't get too emotionally wrapped
up,
especially over the question of whether the rest of the
world is
getting on board. If you create something really good, it
will have an
impact. If the standard is simple, it will be expedient for
others to
implement.
Selected quotes from other blogs
From Dave Winer's Scripting News:
Anyway, we went far and wide and swung around to
desktop
websites, a subject near and dear to my heart.
He wondered why more Mac
developers weren't using
the combo of PHP and Apache
that comes bundled
with every Mac. I think it's
just a matter of time before
Unix developers get there.
Users like apps that run in
the browser.
From Paul Snively's Gadfly Redux:
OK, this is twice now that I've had a ton of news queued up,
posted some things, and... *poof*.
Dozens of news items gone.
Thank God I know that three pressing ones are actually
comments
from Paul Prescod and are
safely ensconced with YACCS. But there are stacks of other
things I
wanted to respond to, and
they're gone.
You know, I try to be
patient.
I try to be reasonable. I get a chuckle out of it when Dave
says in
best ha-ha-only-serious
fashion that they write software that sucks. But Radio has a
combination
of serious architectural
flaws: a browser interface that allows the browser's notion
of object identity
and the database's to get out
of sync, possibly due to browser page caching and navigation
using
the back and forward buttons;
and the lack of transactions in the underlying database.
Sooner or
later, this combination will
result in what I've now seen twice.
I'd be a lot happier if
Radio
would just be an ordinary desktop application. Editing in
the browser
isn't a win, especially on the
Mac. I'm totally with the local flyweight server idea. It's
just that I
want a well-integrated,
rich
client to go with it.
I myself have lost plenty of work editing in a browser.
Here, I think, we have the classic quality tradeoff between
a universal client, and one optimized for a specific task.
This is one of the reasons I'm so happy to see all the
client work happening around Advogato :)