Proper randomization is critical for the causal inference that experiments provide. This is true across subjects, but also within a subject, in the way he or she is exposed to a set of trials or conditions. Many standard programming languages permit randomization, sampling, and design to be performed, but do not make it easy. In PEBL, I strive to provide flexible functions that make standard designs simple, and complex designs possible. As a consequence, there are probably a dozen sampling, shuffling and design functions available. The downside of this is that it can be hard to find exactly what you want (and
there are many ways you might want to do a design that are different in subtle ways).