@TheKiwi, SparkIntervalTimer uses hardware timers which fire an interrupts that call a user ISR. Using hardware interrupts allows precise timing at the cost of using hardware resources, some of which may impact I/O pin functions related to those resources (eg. PWM or Tone). They also allow a user to create sub-millisecond interrupts.
Software Timers are provided by the FreeRTOS kernel and have a minimum resolution of 1 milliseconds. However, they don't user hardware resources, you can have up to 10 at a time and they are quite precise. For many timing requirements, these timers are great and remove the need to use millis() type timers in loop(), whose accuracy may be affected by delays within loop().
Like hardware interrupts, Software Timer callback functions should be non-blocking and short. Hope that helps!