Definitely agree that the hard part of software is the requirements and specing aspects to know WHAT you want in the end after coding. I propose that when a design and spec is good, realistic and complete, the coding actually become quite easy!
My copy of "domain modelling made functional" is trapped in my works office building whilst I am stuck working from home. If anybody has any interest in F# and domain modelling at all, I cannot recommend this book enough.