Microbenchmark Design Guidelines