Very good article with clear distinction between the 3 types of artifacts. We use the same strategy. However one of the challenges we have faced is not in the beginning but after the project is well underway and is live. Clients want enhancements in later versions, sometimes these updates might be quite unrelated to the original functionality. In either case we always begin with prototyping since after the first release the client already knows and understands the product and its UI. I’m curious what others do in such scenarios. Is there a better approach?