In running an IP development team, I learned how critical quality is, and yet how difficult it is to achieve zero-defect code. For years I thought this was a verification problem. I am now convinced that the problem is how we design hardware and how we write RTL code.
Recently I have spent a lot of time looking at high level design and synthesis tools. I think there is some real value in the approaches they take. But I think there are significant opportunities for improvement in how they approach the design problem. Most importantly, I have come to realize that good design and good code do not miraculously emerge from raising abstraction.
Aside: Check out the acknowledgement in the final paragraph of that preface.