Ward Number

If you've practiced PairProgramming with WardCunningham, you have a WardNumber of 1. If you have paired with someone who has paired with Ward, you have a WardNumber of 2, and so on.

Or, more rigorously:

David West's paper (http://www.xpuniverse.com/2001/pdfs/Method01.pdf) inspired the WardNumber, borrowing from the ErdosNumber (from the Mathematician PaulErdos). It was first encountered at XpUniverse 2001.


For WardNumber of 1 and WardNumber of 2 people, be sure to check out WardOne, the conference for you.


So what is the WardNumber of someone who has never practiced PairProgramming?

The usual algorithm is this: Set each node to an initial value of +infinity, and then set the root node to 0. Repeatedly sweep through, setting each node to 1 plus the minimum of its neighbors. If nothing changed: stop. This takes as many sweeps as the longest path in the component containing the root node (namely, Ward), plus one. With a little extra bookkeeping you can avoid the extra sweep.

In practice you can't use a true +inf (assuming you're not using a language in which you can), so compromises are made. You can set the initial value to -1, NULL, NIL, MAX_INT, or other options. Each has its effect on the code. The cleanest code results from using an initial value of MAX_INT as an approximation to +inf.

Anyone not then connected to Ward via a PairProgramming path gets left with this initial value. Examining the algorithm suggests that this value should be +inf. This meshes nicely with the usual mathematical definition that the minimum of the empty set of numbers is +inf, just as the sum of the empty set of numbers is 0 - the initial value to which other values are added. In computing, a term that can't be computed is often preset to NULL, but the code is less clean.

So by this analysis, the WardNumber of someone who has never practiced PairProgramming, or who has no PairProgramming path back to Ward, is +inf.


So what is the WardNumber of someone who has never practiced PairProgramming?

Null I would say such a person does not have a Ward number. Presumably, this is what is meant by saying 'null'. In a computer IMPLEMENTATION, one might well choose to give some value so that a compiler can cope with it without the programmer having to always incorporate code to deal with this case. Such a value might be NULL, INFINITY, MAX_INT, or NAN in a programming language which has one or more of these concepts. However, neither the definition of a Ward number nor the question refers to how one might represent it in a computer implemantation. The correct answer, it seems to me, is, as I said above, that such a person does not have a Ward number. If, on the other hand, you want an answer to the QUITE DIFFERENT question 'how would one represent such a person's Ward number in a computer implementation', then there are many different possibilities, and it is futile to argue as though there were one CORRECT answer. -- MichaelDavis


Mathematically the most consistent way to give a WardNumber to someone who has never practised PairProgramming or at least never done with anyone who is part of a path connecting back to WardCunningham would be - as noted above, +inf. This is because the WardNumber of a person P is the graph distance between WardCunningham and P in a graph where vertices correspond to people and two people are connected by an edge if they have practised PairProgramming together. If two points are in disconnected components in a graph then their graph distance is infinite. Reasoning: The definition of "distance" states that it's nonnegative, so it can't be less than zero. It can't be zero because that would mean the same point appears in both (disconnected) components - an absurdity. It can't be any finite number N greater than zero as that would imply that there is a path of length N by which one can get from the point in one component to the point in the other - again an absurdity.

You could argue that this means that there is no number that describes the distance between points in different disconnected components of a graph. But then you could also argue that the best insoles for leather boots are made of cheese. You could say that "there is no number" but that's as useful as saying "splunge"; an alternative would be something with existing semantics that would be consistent with its use in the current setting. The definition can be used to prove that there is no finite number that describes the distance - that whatever the distance is, it must be greater than any finite value. Fortunately, mathematicians long ago developed a concept to represent "something greater than any finite number" and they use it to define the graph distance between two disconnected points.

So an even more rigorous definition of WardNumber can be made: Let G = {V,E} be a graph consisting of a set of vertices V representing people, and a set of edges between those vertices E such that for any two vertices u and v there is an edge in E iff the people represented by u and v have practised PairProgramming together. Let a vertex w represent WardCunningham. The WardNumber for any person P is defined as the path length between w and the vertex representing the person P.

Note that a person P who has performed PairProgramming but is in a different component to WardCunningham will have (by construction) a WardNumber of +inf, and so will all the people with whom P has practised PairProgramming with: and min(+inf, +inf, ...) + 1 == +inf.

There is absolutely no point in treating a person who has never practised PairProgramming differently from two people who have only ever practised PairProgramming with each other and no-one else. Or fifteen people who have practised PairProgramming among each other in some combination, but aren't connected to the same component as WardCunningham. Each of them is just as connected to WardCunningham as any of the others no matter how many people happen to share their component and that's all that matters to the definition.


Is there an entrepreneurial opportunity here? I would stick my neck out and offer my programming services to anyone wishing to acquire instant WardNumber 2 status... but then again, such an ostentatious act would probably reveal the fact that a WardNumber of 1 doesn't necessarily correlate to a presumed level of talent or genius. -- MichaelLeach


Ward is smart and a good programmer, but this WardNumber stuff is bordering on hero worship. I'm sure that Ward likes to be appreciated as much as the next guy, but this is just a little creepy. -- JimHollcraft

I agree. I'd put a stop to it except that I really do like programming with a lot of different people. I programmed a tv with a fella at oopsla just so we could say we'd programmed together. Do you suppose we should study the graph of people who have authored wiki pages together? -- WardCunningham

The concept started as an incentive to PairPromiscuously at an XP conference, not as ego boost. See IncreasingYourWardRating.


What number do you get when you fix Ward's code?

You should know better than that. CodeOwnership is not that good an idea, so surely someone as experienced as WardCunningham would avoid it just like the hero-worship he is stuck with on this page? -- SteveHolden


"Creepy-schmeepy. All in good fun..." This is where we proclaim our WardNumbers:


JeffMcKenna has quipped that there are now so many people with a WardNumber of 1 that, if you want to impress, you have to specify the date of your one-ness. And Jeff seems to have everyone beat.


As a counterpart to the WardNumber, a pointless centrist numbering scheme for wikis.

So the OusfgWiki? has a wiki number of 1, and the OxfordMathsWiki? has a wiki number of 2. A better example would be that MeatballWiki and WhyClublet have wiki numbers of 1, but I don't know of any children of theirs.

Note that this is different to the WardNumber in that it's more hierarchical, and less about the distance through a graph.


See WardNumberInManyProgrammingLanguages

See also: SmallWorld, SixDegreesOfKevinBacon, ErdosNumber, KiboNumber, IncreasingYourWardRating

EditText of this page (last edited April 30, 2014) or FindPage with title or text search