I define a mock-up as a medium-fidelity prototype that shows the look and feel of a user interface. I show real screens and realistic click flows. However, I do not implement real backend functionality. Therefore, stakeholders can interact with the interface. As a result, they experience how the system will behave from the user’s perspective.
I use mock-ups mainly for specifying and validating user interfaces in Requirements Engineering. For example, I use them to turn vague needs into concrete UI examples. Moreover, I use mock-ups to reveal missing requirements. In addition, I use them to reduce misunderstandings between users and developers. Consequently, teams gain a shared view of the intended interaction.
I build mock-ups with dedicated prototyping tools. Thus, I create clickable screens that look like the final product. Furthermore, I add realistic navigation and interaction behaviors. Nevertheless, I keep the prototype free of real business logic. Likewise, I avoid implementing databases or server integrations. This approach keeps costs lower than building a native prototype. At the same time, it provides a believable user experience.
I contrast mock-ups with wireframes and native prototypes. First, I create wireframes as low-fidelity sketches for early idea discussion. Then, I raise fidelity to mock-ups for UI specification and validation. Finally, I use native prototypes when I need to test technical feasibility or critical system behavior. Therefore, I choose the prototype type based on purpose and cost.
I use mock-ups during requirements elicitation. For instance, when stakeholders cannot describe what they want, I show a screen draft. Consequently, they react faster and provide clearer feedback. Moreover, I use prototypes during validation to check requirement adequacy. In addition, I link UI screens to use cases and user stories. This practice helps me trace UI details back to requirements.
I follow practical rules when I create mock-ups. First, I focus on typical user tasks. Second, I test realistic scenarios. Third, I annotate interactions with acceptance criteria and constraints. Also, I document decisions and open questions directly on the mock-up. Furthermore, I version-control prototypes and save iterations. As a result, I preserve the evolution of requirements and design choices.
I know the limitations of mock-ups. For example, I cannot use them to test system performance or backend stability. Also, if I make them too polished, stakeholders may mistake them for finished software. Consequently, I balance visual quality and clarity of purpose. Otherwise, I risk wasted effort or false expectations.
I recommend when to use mock-ups. For example, apply them when you need to validate user workflows and screen layouts. Also, rely on them when stakeholders must experience interactions before you write final requirements. If you want quick, concrete feedback, mock-ups help as well. However, avoid them when you need to verify low-level system integration or performance.
I keep mock-ups simple and iterative. Meanwhile, I involve users early and often. Hence, I gather actionable feedback faster. Finally, I link mock-ups to other requirements artifacts. For example, I map mock-up screens to user-level requirements and usability goals. Thus, I make requirements clearer, testable, and easier to implement.

