anchor.diff:  
   [gremlin-groovy,modern]
   ----
  -g.V().group().by(bothE().count())                              <1>
  -g.V().group().by(bothE().count()).by('name')                   <2>
  -g.V().group().by(bothE().count()).by('name').by{it.size()}     <3>
  +g.V().group().by(bothE().count())                                  <1>
  +g.V().group().by(bothE().count()).by('name')                       <2>
  +g.V().group().by(bothE().count()).by('name').by(unfold().count())  <3>
   ----
   
   <1> `by(outE().count())` will group the elements by their edge count (*traversal*).
   <2> `by('name')` will process the grouped elements by their name (*element property projection*).
  -<3> `by{it.size()}` will count the number of elements in each group (*function*).
  +<3> `by(unfold().count())` will count the number of elements in each group (*traversal*).
   
   [[coalesce-step]]
   Coalesce Step
  
positive.code: 
  [gremlin-groovy,modern]
  ----
  g.V().group().by {it.value('name')[1]} <1>
  g.V().group().by {it.value('name')[1]}.by('name') <2>
  g.V().group().by {it.value('name')[1]}.by('name').by {it.size()} <3>
  ----
  
  <1> Group the vertices by the second letter of their name.
  <2> For each vertex in the group, get their name (now the name[1] is apparent).
  <3> For each grouping, what is it's size?
  
  The three projection parameters available to `group()` via `by()` are:
  
  
negative.code: 
  [gremlin-groovy,modern]
  ----
  g.V(1).repeat(out()).times(2).emit(has('lang')).path().by('name')
  ----
  
  image::repeat-step.png[width=500]
  
  