| UI or UX | UI + UX - Spatial viewport for location-based objects, layers, and routes | UI + UX - Vertical object-summary browsing surface | UI + UX - Date and time grid for scheduled events, availability, and conflicts | UI + UX - Semantic row-and-column data comparison surface |
| UI guidance | Render a real spatial viewport with visible map region, zoom state, scale or distance context, markers or shapes anchored to coordinates, selected-place detail, cluster counts, visible layer/filter controls, and a fallback list or table for the same results. | 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 calendar view around a visible date range, mode switcher, today marker, weekday or time-axis labels, timezone, selected date, and event blocks with start, end, title, status, and all-day or timed placement. | 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. |
| UX guidance | Use Map view when the user's decision depends on where objects are, how far apart they are, what falls inside the current area, which route or coverage applies, or how dense nearby points are. | Use list view when scanning and opening object summaries is faster than comparing columns or inspecting large visual cards. | Use calendar view when users need to understand or manage scheduled items by their position in time: date, weekday, duration, overlap, availability, recurrence, or resource assignment. | Use tables when aligned columns help users compare records, find exceptions, audit values, or triage work faster than opening each item. |
| Good UI | A clinic finder map shows visible bounds, zoom level, selected clinic marker, appointment availability markers, a transit layer toggle, cluster counts, distance chips, and a synchronized results list. | 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 clinic schedule shows June 2026 week view, today marker, timezone, business hours, all-day staff training, timed appointments, room labels, overlap warning, and a More link for crowded days. | 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. |
| Bad UI | The selected popup is detached from the marker or opens outside the viewport. | Every row has five unlabeled icon buttons, and the whole row also navigates. | Calendar navigation resets filters, selected calendars, selected date, or opened event unexpectedly. | Mobile stacking removes headers and turns rows into unlabeled paragraphs. |
| Good UX | A dispatcher pans to the west district, the result count and list update to the current bounds, a cluster expands at closer zoom, and the selected incident popup remains tied to the marker. | 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 dispatcher switches from month to week, opens Wednesday, sees three overlapping room bookings, chooses an available slot, and receives conflict-aware feedback before saving. | 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. |
| Bad UX | A user filters to open locations but the map markers update while the list still shows closed locations, causing the wrong branch to be selected. | A user tries to preview a file but the row click opens navigation while the small trailing icon deletes the file. | A user taps +3 more in a crowded date cell but the calendar navigates away instead of showing the hidden events for that day. | Mobile stacking removes headers and turns rows into unlabeled paragraphs. |
| Best fit | Users choose or inspect objects by where they are, how near they are, or what area they fall inside. | Users need to scan and act on a collection of objects using compact summaries. | Users need to scan or manage scheduled events across dates, days, weeks, months, or resources. | Records share comparable attributes that users need to scan in aligned columns. |
| Avoid when | Location is only a label or decorative backdrop. | Users need to compare many records across shared attributes. | Users only need to select one date for a form field. | The task depends on rich previews, imagery, or uneven metadata. |
| Required state | Default map state with visible viewport, zoom level or distance context, markers, layer state, result count, and synchronized fallback list. | Default list state with label or heading, row count or context, visible row summaries, and primary row identity. | Default calendar state with visible range, view mode, timezone, today marker, selected date, and event count. | Default table state with caption, visible headers, row values, and result count or context. |
| Accessibility burden | Expose the map name, current area, result count, active filters, layers, selected place, and location permission state as text. | Use semantic list markup for ordinary object lists; use listbox only when rows are options in a single control. | Expose date navigation, mode switch, visible range, selected date, today, timezone, and event count as text. | Use native table semantics for tabular data rather than div-only rows. |
| Common misuse | Treating geolocation denial as a dead end. | Putting too many independent controls in every row until the list becomes a keyboard trap. | Using calendar view as a decorative month card for unscheduled content. | Using table markup to create page columns or layout spacing. |