The word Ply denotes a half-move, that is a move of one side only. When we speak of a "6 ply search", we mean three full moves - something like 1. e2e4 e7e5 2. g1f3 b8c6 3. b1c3 g8f6.
A full ply has been a natural unit for counting search depth before the introduction of selective search techniques. Today, if a program claims to do a 12-ply search, it informs us only about the parameter fed into search function. Some lines might have been severely reduced, others - extended. To make matters even more complex, top programs often use fractional extensions and reductions, changing depth by less than one full ply and taking effect only when they accumulate.
A typical depth-first non-uniform depth search decouples node-distance to the horizon from node-distance to the root. Often, two distinct parameters of a recursive search routine were used. While searching deeper, one parameter, distance to horizon, often called "depth", "height" or "draft", is decremented by a number possibly in fractional ply units, which could be less than one ply in case of extensions or more than one ply in case of reductions, while the second parameter "ply" starts with zero at the root and is incremented exactly by one each search call deeper. It corresponds to one level of the search tree and can act as index (ply-index) into a random accessible search stack, an array of node states.