I would claim that this is the only way to move forward. Evolution is just more efficient than intelligent design (sorry for using these expressions in the software context). It is not possible to design a sane interface for the mess that actually existing hardware is, and that will include future hardware. Similarly for any aspect of the kernel under real-world loads and use cases.
Getting some working implementation, and then abstract from it, while benchmarking alternative, more elegant solutions, is the only process that works if the problem is not fully understood, or is hard.