मॉकअप में एक बटन आमतौर पर एक स्थिति दिखाता है: डिफ़ॉल्ट। वास्तविक उत्पाद में उसी बटन को घुमाया जाता है, कीबोर्ड से फोकस किया जाता है, दबाया जाता है, फॉर्म अधूरा होने पर अक्षम किया जाता है, और अनुरोध भेजे जाने पर लोड किया जाता है। उनमें से प्रत्येक एक यूआई स्थिति है, और प्रत्येक को एक डिज़ाइन की आवश्यकता है।
यह दो समूहों को अलग करने में मदद करता है। इंटरेक्शन स्थितियाँ उपयोगकर्ता से आती हैं: होवर, फ़ोकस, दबाया हुआ और अक्षम। डेटा स्थितियाँ सिस्टम से आती हैं: लोडिंग, खाली, आंशिक डेटा, त्रुटि और सफलता। उदाहरण के लिए, एक सूची स्क्रीन को एक डिज़ाइन की आवश्यकता होती है जब यह लोड हो रहा हो, जब इसमें कोई आइटम न हो, जब इसमें एक आइटम हो, जब इसमें सैकड़ों हों और जब अनुरोध विफल हो।
फोकस वाले राज्य विशेष ध्यान देने योग्य हैं। जो लोग कीबोर्ड या स्विच डिवाइस का उपयोग करते हैं, वे यह जानने के लिए दृश्य फोकस संकेतक पर निर्भर करते हैं कि वे कहां हैं। प्रतिस्थापन के बिना ब्राउज़र फ़ोकस आउटलाइन को हटाना सबसे आम एक्सेसिबिलिटी विफलताओं में से एक है।
राज्यों के बीच परिवर्तन भी डिज़ाइन का हिस्सा है। डिफ़ॉल्ट से दबाए गए में एक संक्षिप्त, स्पष्ट संक्रमण टैप की पुष्टि करता है। एक लोडिंग स्थिति जो आसानी से सफलता में बदल जाती है, लोगों को बताती है कि उनका कार्य सफल हुआ। अचानक उछाल, या एनीमेशन जो बहुत धीमा है, इंटरफ़ेस को अविश्वसनीय महसूस कराता है।
लापता राज्यों से बचने का एक व्यावहारिक तरीका यह है कि डिजाइन करने से पहले प्रत्येक घटक के लिए उन्हें सूचीबद्ध किया जाए, या घटक को एक राज्य मशीन के रूप में मॉडल किया जाए: राज्यों का एक सेट और उनके बीच चलने वाली घटनाएं। ExodeUI, जिसे हम बनाते हैं, इसी तरह काम करता है। आप प्रत्येक स्थिति और उनके बीच के बदलावों को एक फ़ाइल में डिज़ाइन करते हैं, और आपका कोड उन घटनाओं को भेजता है जो वास्तविक ऐप में स्थितियों को स्विच करती हैं।