I think the primary issues of this thread are firstly, I titled it incorrectly, and the initial post focused on the wrong points of the system. Secondly, we all have our own ways of dealing with problems, and we all have had different experiences with Roblox in the past, so we all have different ideas on what systems are reliable or not.
From my perspective, I’ve had major issues in the past with the wait() service getting completely bogged down and having horribly long duration inconsistencies. Granted, the last time I had a seriously game-breaking issue with that was a few years back. However, the default wait() service is currently causing my recursive functions and loops to run slower on lower-frame-rates. I’ve also had a problem with the TweenService. Because running a tween, then using a wait() as long as the tween’s duration is to determine when it should be done almost always leaves a little hang-time. Sometimes as long as 0.14 seconds, which is really noticeable to the player. I had been compensating for this by making the wait, roughly 0.05 seconds shorter than how long the tween will operate for.
My entire engine, all 8000 some-odd lines, had functions and loops using the default wait() service. I didn’t want to go through and optimize each function individually, or rewrite entire blocks to compensate for an inaccurate wait. Instead, I made AccuWait, a simple short system that I can throw in anywhere, and use the replace tool to replace all the default waits. Most of my waits were less than a second, so I didn’t get the chance to test how it would handle long durations.
In my particular case, the benefits of the AccuWait system were instantaneously evident. All my loops and functions started working as intended even on low-framerates. The AccuWait function seemed to fix the hangtime on tweens as well. Most importantly, in comparison to your examples, is that without rewriting my functions, they could now run up to 10 times per frame. In the example of fast firing weapons on lower framerates, people have said; “just write the fire function so it can send out multiple rounds in a single frame”. Except it’s speed was relying simply on the wait(), so I don’t have to rewrite it, using AccuWait, it already does that.
That’s why from my point of view, it was the best solution, and did exactly what I needed if not more.