What's amazing to me is how uncommon state machines are in software, comparatively. In ASIC and FPGA design, it's so fundamental and ubiquitous. At least with synchronous designs.
The vast majority of companies essentially code and design to the lowest common denominator so that their devs are fungible cogs.
Code doesn't have fixed timing requirements, most of the time.