| UI or UX | UI + UX - Vertical object-summary browsing surface | UI + UX - Semantic row-and-column data comparison surface | UI + UX - Interactive row-and-column data workspace | UI + UX - Persistent selected-object inspection panel |
| UI guidance | Render a labelled vertical list where each row has a strong primary label, concise supporting text, metadata, status, optional leading media, and row-scoped actions with clear hit targets. | Render a table with a specific caption or heading, visible column headers, optional row headers, aligned values, consistent row actions, and enough spacing for scanability. | Render the grid as a named work surface with visible headers, row identifiers, focus location, selection state, dirty and invalid cell markers, column controls, and status text for row count, sort, filter, and save state. | Render a details panel as a persistent side or adjacent region that names the currently selected object, shows high-value metadata, status, and local secondary actions, and keeps the object selection visible in the source list, table, map, board, or feed. |
| UX guidance | Use list view when scanning and opening object summaries is faster than comparing columns or inspecting large visual cards. | Use tables when aligned columns help users compare records, find exceptions, audit values, or triage work faster than opening each item. | Use a data grid when cell-level interaction makes users faster and more accurate than opening each record separately. | Use a details panel when users need to select and compare nearby objects while keeping a durable inspection area visible, such as reviewing records, tickets, assets, alerts, comments, files, or map locations. |
| Good UI | A ticket list row shows TCK-2048 Database backup failed, a one-line incident summary, Critical status, owner, updated time, selected state, and a labelled More actions menu. | A payment review table has the caption June vendor payments, headers Vendor, Status, Due date, Amount, and Action, right-aligned amounts, and row actions labelled by vendor. | An invoice-review grid shows frozen invoice IDs, column headers for Vendor, Amount, Due, Owner, and Status, one highlighted focused cell, two selected rows, a dirty edited amount, and a status line naming the current cell. | A ticket queue keeps TCK-2048 selected in the list and shows a right details panel with requester, severity, SLA, owner, activity, and Open full ticket. |
| Bad UI | A list row shows columns of owner, amount, due date, and status but no headers or column sort state. | A div layout looks like columns but has no caption, table semantics, or header associations. | A static report uses role grid even though users only read values and ordinary table semantics would be clearer. | A panel titled Details shows metrics from the previously selected record after the list selection changes. |
| Good UX | A user filters tickets to Critical, selects two rows, opens the details panel for one ticket, then clears the filter and the selected count and active ticket remain understandable. | A user sorts by Amount descending, filters to Pending, moves to page 2, and the table keeps its caption, active sort, active filter, row count, and selected payment context. | A user presses Arrow Right to move from Amount to Due, presses Enter to edit the due date, presses Escape to cancel, and focus returns to the same cell in navigation mode. | A keyboard user moves down a ticket list, the highlighted row and details panel update together, and focus remains in the list until the user chooses Open full ticket. |
| Bad UX | A user selects rows, changes sort order, and the bulk action count still includes hidden rows without saying which rows are affected. | Filtering the table removes selected rows without explaining why or offering a clear-filter path. | A user edits an amount, sorts by status, and the row disappears with no saved or unsaved indication. | Sorting the list silently clears the highlighted row while the panel continues to show an old ticket. |
| Best fit | Users need to scan and act on a collection of objects using compact summaries. | Records share comparable attributes that users need to scan in aligned columns. | Users repeatedly inspect or update many records in shared columns. | Users repeatedly inspect selected records, tickets, alerts, files, assets, tasks, comments, or locations while staying in a work surface. |
| Avoid when | Users need to compare many records across shared attributes. | The content is layout, not data. | The data is read-only and ordinary table navigation is enough. | The content is just a short temporary preview before navigation. |
| Required state | Default list state with label or heading, row count or context, visible row summaries, and primary row identity. | Default table state with caption, visible headers, row values, and result count or context. | Default navigation state with labelled grid, column headers, row headers or row identifiers, focused cell, and row count context. | No selection state with a clear prompt or preserved last-selection rule. |
| Accessibility burden | Use semantic list markup for ordinary object lists; use listbox only when rows are options in a single control. | Use native table semantics for tabular data rather than div-only rows. | Use grid semantics only for an interactive composite widget with managed focus. | Name the panel region from the selected object's title or a heading that includes the object identity. |
| Common misuse | Using list view as a table without column headers or column-state feedback. | Using table markup to create page columns or layout spacing. | Using role grid on a static table only to make it sound richer. | Showing a details panel with no selected-object identity. |