Screen review checklist

Table of Contents

1. Summary

This page turns the UX standards into one list of checks. Use it when you build a screen and when you review one. Each line is one rule and names the page and section that state it. The list adds no rule. If a line and its source differ, the source is right and this page is wrong.

Mark each line Meets, Gap or N/A. Write a gap in the story or task that owns the screen, with the line it breaks. To sign a screen off, follow How do I sign off a screen?: the harness marks the lines it checks, and the person walks the rest on one sheet beside the task. The two standards no longer disagree on a line here; the Audit of the UX standards records how each disagreement was decided. The Entity screen specification rules for an entity. The Record screen standard rules for one kind of record.

Source names: RSS is the Record screen standard, ESS is the Entity screen specification, UXL is UX Language, UDP is UI design principles, CFG is the Configuration screen standard, OLS is the ORE element and leaf screen standard.

2. Detail

2.1. The list

  • [ ] The header has the breadcrumb, the plural title in sentence case and one sentence on what the records are. (RS-LIST-01; RSS The list › Header)
  • [ ] Refresh, then Import and Export for a kind with an ORE document (Export on the record header when the document is one record), then Workflows, then Add stand at the right. Add shows only for a person who may write. (RS-LIST-03, RS-ORE-02; RSS The list › Header)
  • [ ] Import and Export are the shared pair: bare verbs with their icons, the server's ore.v1.ops triple behind them, no XML in the browser, Export where the document's scope is. (RS-ORE-01, RS-ORE-02, RS-ORE-03, RS-ORE-06; RSS Import and Export)
  • [ ] Search, sort, filter and page go to the server. The list never reads every row. (RS-LIST-07, RS-LIST-04, RS-LIST-19; RSS Search and filter, Paging; ESS Paging)
  • [ ] The pager shows the count first, then First, Previous, Next, Last and page size. The default is 15. (RS-LIST-17; RSS Paging)
  • [ ] Page, page size, search, filter and order live in the address. (RS-LIST-20, RS-LIST-19; RSS Paging)
  • [ ] Every column sorts on the server, on the value and not on the text shown. (RS-LIST-12; RSS The table)
  • [ ] The first column is the display field or the key. A click or Enter opens the record page. (RS-LIST-10, RS-LIST-09; RSS The table)
  • [ ] Audit columns are hidden by default. A tenant id and a UUID id never show. (RS-LIST-13; RSS The table)
  • [ ] The list shows these states: loading, loading again with dimmed rows, none yet, nothing matches with a way to clear, and an error in place with Retry. (RS-LIST-21; RSS States)
  • [ ] A party appears as a tag with its name, not its code. (ES-LIST-02; ESS The list)
  • [ ] Rows that changed after a reload get a gold left edge, pulse three times and clear after four seconds, found by comparing the page with the one read before. (RS-LIST-22, ES-REFRESH-21; RSS Recency; ESS Rows and entries that changed)

2.2. The record page

  • [ ] The breadcrumb ends at the subject. The title is the display field. (RS-PAGE-01, ES-PAGE-03, ES-PAGE-01; RSS Header; ESS Header)
  • [ ] Tabs live in the address. Details is first and History is last. A tab that does not apply is not drawn. (RS-PAGE-09; RSS Tabs; ESS Tabs)
  • [ ] A label stands above each value, in sentence case, with no colon. (RS-PAGE-05; RSS Fields)
  • [ ] An empty value is a muted dash. (RS-PAGE-07; RSS Fields)
  • [ ] The details stand in one, two or four columns by breakpoint, in the field table's order, with the meaning or the fixed reason under a value. (RS-PAGE-06; RSS Fields)
  • [ ] A code that names another record is a link to its page, with its flag or photo. (RS-PAGE-08, ES-REF-01; RSS Fields; ESS References are links)
  • [ ] A link that cannot open is plain text. It is never a link that goes nowhere. (ES-REF-04; ESS References are links)
  • [ ] A person is drawn with the photo and a link to the person. (ES-PEOPLE-05; ESS People are links)
  • [ ] The details end with the last-changed line. (RS-PAGE-10; RSS Last changed)
  • [ ] A value shows as a name, never as an identifier, where a name exists. (ES-WORDS-06; ESS Feedback, states and words)
  • [ ] The page shows the access mark, Editable or Read only. It never shows a permission code. (RS-FEEDBACK-02; UXL Access; RSS Access)
  • [ ] An action the person may not take is not drawn. It is not drawn disabled. (RS-FEEDBACK-01; RSS Access; ESS Changes the reader may not make)
  • [ ] A record the server will not change shows no Edit and no Delete. One notice says why. (RS-WRITE-33; RSS Read-only records)
  • [ ] The screen does not explain what is absent. A sentence that only explains an empty space is removed. (ES-WORDS-07; ESS Feedback, states and words)

2.3. Edit

  • [ ] Edit is one button with an icon and the word Edit. It is on the card it changes. (ES-EDIT-01; ESS The Edit pattern)
  • [ ] Edit stands on the thing it changes: the header for a record of one kind, the card for an entity. (RS-PAGE-04, ES-PAGE-05; RSS Header; ESS Header)
  • [ ] Edit opens a modal dialog over the page. The dialog has no address. (RS-ADDR-01; RSS Addresses)
  • [ ] The dialog is titled Edit followed by the title of the page or the card it changes. (RS-WRITE-20, ES-EDIT-02; RSS Amend; ESS The Edit pattern)
  • [ ] The dialog asks for the change reason and commentary. The page asks for neither. (ES-EDIT-02; ESS The Edit pattern)
  • [ ] The reasons follow the change. "No change in substance" is offered only when nothing changed. (RS-WRITE-22; RSS Amend)
  • [ ] Save is enabled once the form is complete. A save with no field change is allowed and is offered only No change in substance. (RS-WRITE-22, ES-EDIT-03; RSS Amend; ESS The Edit pattern)
  • [ ] A commentary is required when the chosen reason needs one. (RS-WRITE-21; RSS Amend)
  • [ ] A wrong field shows its message under it when the person leaves it. Save waits until the form is complete. (RS-WRITE-05; RSS The form)
  • [ ] The write claims the version that was read. A stale save is refused, and the dialog says so and offers to reload. (RS-WRITE-23, ES-EDIT-04; RSS Amend; ESS The Edit pattern)
  • [ ] While the dialog is open it listens for a newer version. A warning shows who changed what and offers Keep my edit or Take the new values. (ES-REFRESH-25; ESS An edit in progress)
  • [ ] The dialog says under its title when the record was loaded. (ES-REFRESH-28; ESS An edit in progress)
  • [ ] Closing with changes asks "You have unsaved changes. Close anyway?" (RS-WRITE-24; RSS Amend)
  • [ ] The server's own words show in the dialog. The dialog stays open. (RS-FEEDBACK-07; RSS Feedback)
  • [ ] After a save the dialog closes. Refresh turns gold and the person presses it. The page does not reload by itself. (ES-REFRESH-15; ESS Refresh)
  • [ ] An optional field has a Clear control. (ES-EDIT-06; ESS The Edit pattern)

2.4. Fields in the form

  • [ ] Each field uses the control for its kind: text, number, Yes and No, date, select, picker or image. (RS-WRITE-32, RS-WRITE-01; RSS The form)
  • [ ] A field that names another record or a classification is a select. It is never free text. (RS-WRITE-01; RSS The form)
  • [ ] A combo box offers only values that exist, as the server holds them. (ES-PAGING-08; ESS Combo boxes and filters)
  • [ ] A screen that shows one value at a time has no "all" choice. (ES-PAGING-09; ESS Combo boxes and filters)
  • [ ] The key is fixed after the record exists. So is a field that changes what the record is. (RS-WRITE-03; RSS The form)
  • [ ] A fixed field says why in one line of small text under it. (ES-PAGE-08; ESS Cards)
  • [ ] A field that another person owns says who. (ES-PAGE-09; ESS Cards)
  • [ ] A field that follows from others is not asked for. The dialog fills it. (RS-WRITE-07; RSS The form)
  • [ ] A rule across fields shows before the save. Save waits on it. (RS-WRITE-08; RSS The form)
  • [ ] Long text uses a text area, asked for with the longtext kind. (RS-WRITE-06; RSS The form)
  • [ ] The form is one dialog with no tabs; a kind with more than twelve fields declares groups, drawn as titled sections. (RS-WRITE-09; RSS The form's layout)
  • [ ] The fields stand in the field table's order, key first, in two columns from the small breakpoint; a long text spans both. (RS-WRITE-11; RSS The form's layout)
  • [ ] Under a control stands one line of help, meaning or why it is fixed, replaced by the message when the field is wrong. (RS-WRITE-12; RSS The form's layout)
  • [ ] Nothing marks a required field; an empty one says Required when left. (RS-WRITE-13; RSS The form's layout)
  • [ ] The footer holds Cancel, then Add or Save, at the right, each with its icon. Delete is not in the form. (RS-WRITE-14; RSS The form's layout)
  • [ ] Escape asks the closing guard; Enter does not save; Tab moves through the fields in the field table's order. (RS-WRITE-15; RSS The form's layout)
  • [ ] The dialog says under its title when its record was loaded and warns of a newer version above the form. (RS-WRITE-16, ES-REFRESH-25, ES-REFRESH-28; RSS The form's layout; ESS An edit in progress)

2.5. Create and delete

  • [ ] Add is titled "Add <thing>" with the button Add. A new record uses the reason system.new_record, stated in a note. (RS-WRITE-18, RS-WRITE-17; RSS Create)
  • [ ] A key that exists is refused, and the refusal names the key. (RS-WRITE-18; RSS Create)
  • [ ] After a create the screen opens the new record page. (RS-WRITE-19; RSS Create)
  • [ ] Delete always confirms, names the record and says what is lost. (RS-WRITE-25; RSS Delete; Safety)
  • [ ] Delete asks for a reason. After it the screen returns to the list. (RS-WRITE-30; RSS Delete)
  • [ ] A link is removed with Remove, not Delete. (RS-RELATED-03; RSS Links)
  • [ ] Revert writes a new version and says so. (RS-HIST-02; RSS History; Safety)

2.6. History

  • [ ] History is the versions of one record. A log of events is Audit and has Refresh only. (UXL History and Audit)
  • [ ] The tab is named History, never Timeline. (ES-HIST-40; ESS How the Staff screens conform today)
  • [ ] The shared timeline draws it. Headers are one line, details open on demand. (ES-HIST-18, ES-HIST-09; ESS History and the timeline)
  • [ ] The author's photo stands at the left of each entry. The note is on its own line. (ES-HIST-08, ES-HIST-07; ESS One line per entry)
  • [ ] The newest version carries the current-version emblem and no Revert. (ES-HIST-11; ESS One line per entry)
  • [ ] A gap in the history is stated in words. It is never an empty list. (ES-HIST-39, ES-HIST-38, ES-HIST-37; ESS Gaps)

2.7. Refresh and live updates

  • [ ] The header has the shared Refresh button, with the load time under it. (ES-REFRESH-06, ES-REFRESH-16; ESS Refresh, When the data was loaded)
  • [ ] Refresh turns gold when the data changed on the server. Gold means that and nothing else. (ES-REFRESH-08; ESS Refresh)
  • [ ] Nothing reloads by itself. Nothing the person typed is lost. (ES-REFRESH-13; ESS Updates and refresh)
  • [ ] The screen names the entities it shows, so it hears only their changes. (ES-REFRESH-02; ESS How a screen hears)

2.8. Words, icons and colour

  • [ ] The verbs are Add, Edit, Save, Delete, Remove, Revert, Refresh, Cancel and Propose. An own action is a verb and its object. (RS-NAME-02, ES-WORDS-04; RSS Naming; ESS Feedback, states and words)
  • [ ] Every action carries the icon of the icon table beside its word. (RS-ICON-01; RSS Icons and cells)
  • [ ] Each idea has one icon, and each icon has one idea. (RS-ICON-02; RSS Icons and cells; Icon reference)
  • [ ] Words are in sentence case. (RS-NAME-01; RSS Naming)
  • [ ] Every string exists in English, French and Portuguese before the screen ships. (ES-WORDS-05; ESS Feedback, states and words)
  • [ ] Every message says what happened and what to do. "Error" alone is not a message. (RS-FEEDBACK-07; RSS Feedback)
  • [ ] A time is relative, with the exact time on hover. A missing time is a phrase, not a date. (ES-WORDS-03; RSS Icons and cells; ESS Feedback, states and words)
  • [ ] A code or number is monospace. A number is right-aligned with tabular figures. (RS-ICON-03; RSS Icons and cells; UDP Monospace for Data)
  • [ ] Grey means inactive and nothing else. Orange means a missing badge definition. (UXL Colour semantics)
  • [ ] Red, amber and green carry a real status. They never mark a plain category. (UXL Colour semantics)
  • [ ] Colour appears only when it means something. (UDP Color for Meaning Only)
  • [ ] Spacing is on the 4 pixel grid, and padding is symmetrical. (UDP The 4px Grid, Symmetrical Padding)
  • [ ] A control is not a native form element when it needs styling. (UDP Isolated Controls)

2.9. Access and safety

  • [ ] The screen needs a typed permission. The menu, the route guard and the button read it. (ES-NEEDS-01; ESS What a screen or a form needs)
  • [ ] A refused read is stated as a refusal in words. It is never shown as a failure. (ES-WORDS-02; ESS Feedback, states and words)
  • [ ] Every write carries a change reason. There is no silent write. (RS-FEEDBACK-06; RSS Safety)
  • [ ] A save goes through the shared record dialog, remove dialog or revert dialog. A screen builds no dialog of its own. (RS-WRITE-31; RSS Writes)

2.10. The configuration screen

  • [ ] The kind is named as the standard names it: Pricing engine configuration, Engine run settings, and the rest of the table. No screen says Pricing engines or Engine settings alone. (CFG The name of each kind)
  • [ ] The pricing page's parameter tab is Parameters. No configuration screen has a Settings tab. (CFG The name of each kind)
  • [ ] Details is first, the section tabs follow in the declared order, and Used by and History are last. (CFG The record page)
  • [ ] A group shows the value in force, and the default where the parameter is unset. (CFG Reading a group)
  • [ ] A group is edited in place; a collection is edited in a dialog per row. (CFG Changing a group; Changing a collection)
  • [ ] Every label, help, description, default, format and release comes from the documentation contract, not from the screen. (CFG The documentation contract)
  • [ ] A setting with no documentation entry shows its ORE name and a note. (CFG Reading a group)
  • [ ] Simple and Advanced are the shared switch, and Advanced adds the schema entry. (CFG Reading a group)
  • [ ] The page says what the configuration decides and lists the related configurations the same report binds, with links both ways. (CFG What this configuration decides, and the related configurations)
  • [ ] Used by lists the reports that bind the configuration and states the reach rule. (CFG Reach)
  • [ ] History is the shared timeline, and a change names the section and moves the version of the whole. (CFG History)
  • [ ] A change to a numbers-changing section of a bound configuration is a proposal: the version in force stays and the proposer cannot sign. (CFG The lifecycle)
  • [ ] A change to an operational section writes directly, with a reason. (CFG The lifecycle)
  • [ ] An import parses on the server, names every dropped value, lists removed rows first with Keep it as the default, and never makes a file official. (RS-ORE-05; CFG Import)

2.11. A value ORE reads

For every screen that draws a product parameter, an engine run setting or a convention term.

  • [ ] Every word for a leaf comes from the oreParameter namespace; the screen keeps no copy, and names the leaf with its kind's noun. (OL-WORDS-01; OLS The words a screen prints)
  • [ ] One Simple and Advanced switch per page, remembered for every screen, named and explained in the words for leaves. (OL-MODE-01, OL-MODE-06; OLS The Simple and Advanced switch)
  • [ ] Advanced adds only the schema entry; the switch hides no value, control or gap. (OL-MODE-04, OL-MODE-05; OLS The Simple and Advanced switch)
  • [ ] A row has one label, from the documentation entry, then its marks, then the value in force; a leaf not set shows Default: X. (OL-READ-01, OL-READ-02, OL-READ-03; OLS Reading a leaf)
  • [ ] Every leaf the element type takes is a row, set or not. (OL-READ-04; OLS Reading a leaf)
  • [ ] A leaf that changes the numbers carries the mark in its row. (OL-READ-07; OLS Reading a leaf)
  • [ ] Documentation opens the shared panel under one leaf, Show all documentation opens it for the section, and focus in edit opens it. (OL-DOC-01, OL-DOC-03, OL-DOC-04, OL-DOC-07; OLS The documentation under a leaf)
  • [ ] The element type's card says what it is, with its asset class from data and its source tag. (OL-ELEMENT-01, OL-ELEMENT-04, OL-SOURCE-01; OLS The element type)
  • [ ] Every select starts with Default (X), and no control offers a value the set refuses. (OL-CONTROL-01, OL-CONTROL-02; OLS The control)
  • [ ] A changed leaf shows changed, and the foot counts the changes. (OL-EDIT-02; OLS Changing a leaf)
  • [ ] Set in this configuration keeps every held value, a filter is drawn only where the data answers it, and no filter hides a problem. (OL-FILTER-02, OL-FILTER-03, OL-FILTER-04; OLS Filters)
  • [ ] A leaf with no documentation entry shows its ORE name, its value and No documentation is held for {name}.; a failed read of the documentation still shows every value. (OL-READ-02, OL-STATE-01; OLS Gaps and states)

2.12. Exceptions

  • [ ] A part the screen lacks is named in the standard's list of how screens conform, with the reason. (RS-EXCEPT-01; RSS How today's record screens conform)
  • [ ] An exception changes which parts exist. It never changes how a part looks. (RS-EXCEPT-02; RSS Exceptions)

2.13. Check on the running screen

  • [ ] Try list, page, search, open, edit with a stale version, history, and the empty, error and no-permission states. (RS-BUILD-01; RSS Building a record screen)
  • [ ] Try data of the real size, as a member and as an administrator. (ES-VERIFY-01; ESS Building an entity screen, Verifying a rule)

3. See also

Emacs 29.3 (Org mode 9.6.15)