A couple more ideas to add on to what delora-software has already said...
For random durations, you could also try using the Durations field of the StepSequencer. For example:
{1 to: 16 collect: [:i | (!BPM bpm random abs) roundTo: !Quantize]}
Or use a random trigger in the Step field, for example:
!BPM bpm random gt: !Thresh