Another approach is to consider nesting. If the levels of one factor are dependent on the levels of another, this is nesting. Covariates are used to handle factors you have no control over.
For example: You are trying to figure out what factors affect the quality of a drilled hole. Two factors are bit materials (High speed steel vs. carbide) and drill speed. The 2 levels for drill speed are contingent on the bit materials. In this case, drill speed is nested in material type. Although there will be 2 levels of speed tested for each material, there are different speeds. Note, Nesting will not allow for the estimation of interactions.
"All models are wrong, some are useful" G.E.P. Box