When designing for complex applications, what is the best practice in communicating to the development team the various states / conditions of every element within the application.
For example, in designing an email client such as Outlook, details such as how attachments are displayed, if a message is flagged as important, or if the message is part of an existing chain of messages, etc.
With these various states and dependencies I feel wire-framing and simple prototyping into an application such as Invision or Marvel cannot communicate granular level details.
Do I need to look into UML diagraming? What is best practice for a project of this complexity when transitioning from prototyping to development?