Wheelbuilding checklist for non professional wheelbuilders

Bicycle wheelbuilding is half science and half art. The best wheelbuilders can start with hubs, lightweight rims, just a few ultralight spokes and create a strong and reliable wheelset. The rest of us can create similar results by choosing more conservative components and less radical spoke counts.

By using good quality components and a little attention to detail a person who is mechanically inclined can assemble a reliable wheelset. The following are some guidelines and then a checklist that we keep handy in the Race Garage.

Before building we need to do our homework.

  1. Choose to build with adequate spoke count. Avoid superlight butted spokes as controlling wind up is a hassle. Choosing brass spoke nipples will ease the building process and create less trouble if and when the wheel needs maintenance.
  2. Calculate correct spoke lengths. Many online tools exist. Often these tools include instructions on measuring your hubs. Some have hub data but measuring is wise just to be sure. The number of crosses will need to be determined at this point. Some reliable options are 36 built cross three, 32 built cross three, and 28 built cross two. Once the various parts are ready it's just a matter of connecting the various components.

Here are the basic steps to create a strong and reliable wheelset.

  1. The spoke threads need to be clean and lubricated. 'Spoke Prep' is a commercial spoke thread lubrication product. Some use beeswax for the same purpose.
  2. Lace the wheel. Use an existing wheel with identical spoke count and cross as a guide if necessary. Check the rim drilling. Most rims will have the spoke holes slightly angled to line up with the off center flanges. A nice touch is to arrange the valve stem hole so it lines up with the logo or name printed on the hub.
  3. Spokes that are laced with the head on the inside will need to be bent a bit near the 'J' bend. The goal is to pre bend these spokes so that they make the turn nicely from the outside of the flange back towards the center of the rim.
  4. Bring the wheel up to about half the target tension. Use a lever where the spokes cross (and touch) to prebend the spokes at the cross. Sheldon Brown describes a left hand crank arm as the perfect tool. This is a subtle bend. Be careful as too much is worse than too little.
  5. Bring the spokes up to even tension while simultaniously monitoring wheel dish, lateral true, and hop. This step requires practice and patience. Use a spoke tension meter if you have one. Or just tension them to match a known good wheel. Plucking the spokes and listening to the tone will get you in the ballpark.

Extra Credit:

  1. Some builder discuss specific lacing patterns in regards to which rear wheel drive spokes are 'spoke heads in' and which are 'spoke heads out'. Sheldon Brown says it is not the highest priority and strong wheels are built both ways. We like to lace rear wheels with all 'pulling' spokes to be heads out.  Front wheels with crossed spokes (that do not use disc brakes) have no torque applied through the hubs so we just lace them up to match the rears for cosmetic purposes.

Just for fun The Editor wrote the basic steps to wheel building and truing as non function PHP code.

<?php

if(!(require("components.php")){
  die ("Inadequate components available.");
}
if(!(require("wheelbuilderskills.php")){
  die ("Read 'The Bicycle Wheel' by Brandt Jobst before executing.");
}
if(($spokecount=getspokecount($hub,$spokes,$rim))===FALSE){
  die ("Mismatched components.);
}

foreach ($spokes as $onespoke){
  cleanthreads($onespoke);
  lubethreads($onespoke);
}
if( noeyelets($rim) || hasaluminumnipples($spokes) || nonipplewashers($spokes) ){
  lubespokeholes($rim);
}

lacekeyspoke($hub,getdrivesidespokes(1,$spokes));
laceleadingheadsoutdriveside($hub,getdrivesidespokes($spokecount/4-1,$spokes));
lacetrailingheadsindriveside($hub,getdrivesidespokes($spokecount/4,$spokes));
laceleadingheadsoutnondriveside($hub,getnondrivesidespokes($spokecount/4,$spokes));
lacetrailingheadsinnondriveside($hub,getnondrivesidespokes($spokecount/4,$spokes));
foreach($spokes as $onespoke){
  if(isheadin($onespoke)){
    setspokebendathub($onespoke);
  }
}

if(isrear($hub)){
  tensiondriveside($builderpreference->drivesidetension/2);
  foreach(getdrivesidespokes($spokes) as $onespoke){
    setspokepathatcross($onespoke);
  }
  truehopdrivesideonly($builderpreference->hoptolerance);
  while(nondrivesidetension<$builderpreference->nondrivesidetension/2){
    truedishnondrivesideonly();
  }
  foreach(getnondriveside($spokes) as $onespoke){
    setspokepathatcross($onespoke);
  }
}

if(isfront($hub)){
  truedish(builderpreference->dishtolerance);
  tension($builderpreference->tension/2);
  foreach($spokes as $onespoke){
    setspokepathatcross($onespoke);
  }
}

while(
  $rim->hop>$builderpreference->hoptolerance ||
  $rim->runout>$builderpreference->runouttolerance ||
  $rim->dish>$builderpreference->dishtolerance ||
  $spokes->averagetension<$builderpreference->tension ||
  $spokes->tensiondifference>$builderpreference->tensiondifferencetolerance ){

  truedish($spokes,improved($rim->dish));
  truehop($spokes,improved($rim->hop));
  truerunout($spoked,improved($rim->runout));
  increasetension($spokes,improved($spokes->averagetension));
  equalizetension($spokes,improved($spokes->tensiondiffernce));
  stressreleive($spokes);
}

?>