A good way to assess scope and functional breadth & complexity is to do functional decomposition. It's a fancy term for breaking down the system functionality into smaller bits. If a block is too high level with too many unknowns, then break it down more. Until every block is sufficiently defined and of low enough complexity to estimate properly in terms of effort and time. Because the functions have been have down to manageable size, it becomes easier to estimate. The decomposition is very important, because the devil is always in the detail. If you feel a function is still too nebulous, keep asking the customer questions around the function. Invariable some more detail will pop out and you can expand.
Use cases are a great way to communicate this. So let's say the app requires user management. So we can assume we know what user management is all about and put one use case down to indicate that the admin will do user management.
Like this:
But there is more. User Management is too high-level, so we break it down to a typical CRUD type activity:
But there is more. The user (and admin) must have a way to reset his password:
Woah, by chatting to the customer it turns out that the users have to use a mobile device like this
http://www.datalogic.com/eng/products/healthcare-retail-other-solutions/mobile-computers/memor-x3-pd-636.html out in the field. Entering a pass in gonna be ****ty. So we decide that users must have a numeric PIN as well so that it can easily be entered on the device keypad. Also PIN reset. So the use cases expand once again.
I tend to not use Word for my requirements as typing and formatting gets in the way of my 'creative flow'. I use Enterprise Architect from Sparx to do all my documentation. ERD, Use cases, process flows, the lot. And it is pretty cheap. The diagramming environment is smooth and you don't have to worry about formatting. The actors, entities and relationships all live within the UML model. Therefore the diagrams are not standalone diagrams. They are actually views into the entire model. These diagrams literally took 2 minutes.
Then as part of a typical use case I would then create a screen mockup of the screen that the user would use to perform that function. I only do that where the UX might be more complex. I use Balsamiq for this. Again, the environment is such that your creative flow is not interrupted. The screen mockup captures the essence of the UX for that function. That then feeds into the design of the ViewModel in code....