I think it's worth pointing out that a key difference between over-DRY cucumber steps and doing the same in RSpec is that with RSpec, since they're just method calls, you at least have an honest chance to use debugging tools to figure out who calls what and where. A lot of the indirection pain in Cucumber comes from the even-opaque-at-runtime translation from stringy steps to blocks via Regex.