You are correct that Roda has gotten significantly more complex this year. There were very few changes to lib/roda.rb from 3.0.0 to 3.16.0, but between 3.16.0 and 3.19.0, there were a lot of changes and added complexity to improve performance.
In most Ruby web applications, time spent in the application code is greater than time spent in framework code, even for frameworks that are not as efficient as Roda. If you look at the CHANGELOG, you'll see multiple cases where Roda performance improved 2-4x (more detail is ). Now, if you have a route that spends 10% of the time in Roda and 90% of the time in your application code, a 2x performance improvement in Roda only improves your application performance by about 5%. I think in many applications, a total application speedup of 5% would be considered significant, and especially appreciated if no application code changes are required other than bumping a dependency version.
I believe the added complexity is worth the extra performance it brings. In my own applications, I've seen improvements up to 3x in some commonly requested routes due to the performance improvements made this year. Those are more extreme cases, but there are definitely cases where Roda's performance improvements have led to a 2-3x performance improvement in real world applications.
The faster your application already is, the more benefit you will see from Roda's improved performance, because a faster application will spent a greater percentage of time in Roda than a slower application.
Two of Roda's goals are simplicity and performance. Unfortunately, there are times where improving performance makes things less simple internally, and tradeoffs have to be made. Ultimately, there are many more Roda users than there are Roda developers and contributors, and I think the majority of users would appreciate improved performance even if it decreases internal simplicity.
Thanks,
Jeremy