h1. UI Fundamentals For Programmers Ryan Singer Programming cuts a lot closer than what we do with user interfaces, than what web design does. h2. Modeling UI is a layer of software. It's not independent. You don't take some code and put usability on top of it. From the customers point of view, the UI is the entire application. If we start with the interface, we start with what matters to the customer. Terseness might be valueable on the technical site, but on the UI side we need lots of text. Start with a model that allows for implementation and makes sense to your customers. Recommended book: Domain-Driven Design - Eric Evans - Model-driven design - Ubiquitous language The modeling is really important, and people talk to little about it h2. Screens How do we split the app into screens the customer can look at? How do we organize these screens? The REST notion is perfect for organizing screens. What mattes to the person using this screen? We have a Strong tag, but we don't have a Weak-tag. How can we emphasize and deemphasize this thing? h2. Actions Every action has a beginning, middle and end. Split every action into three. h3. Templates No HTML in helpers Don't be clever - People will extract code at the first opportunity HTML stays in the templates. We don't build stuff. We don't prematurely extract templates and other logic. CSS and JS follow the same REST-inspired naming conventions - One CSS file per resource, one JS file per resource Treat ERB like an image tag. Use helpers to reveal intention.