I've used it before to do lightweight scheduling: you can include a timestamp and then have a "sleep until" step that waits until that timestamp before continuing. So I'd pass in timestamp + event, it'd wait and then execute the event by passing it to a lambda. For something only occasionally I think it was probably easier and less intrusive into the rest of the infrastructure than any alternative.
In terms of source control, the step function definition is just JSON (IIRC). I deployed it with CDK so the structure of the step function, its metadata, permissions etc. were all in source control. AWS docs like this tend to show things done in either the web UI or the CLI, but generally you can use an infrastructure-as-code solution instead.
Also the local testing experience is surprisingly good: there's a stepfunctions-local by Amazon and I think that's used by localstack too (which is what I used).
It is great for large, asynchronous, parallelised processing jobs. I’ve used it to integrate and orchestrate with numerous services within AWS ecosystem. We use source control for the step function JSON and deploy with terraform.
Am I right to think that if you don't want to do some "no code" weirdness, they're just not for you?
Because deploying a thing I can't store in source control looks like insanity to me.