| 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 | A decorative map background contains unlabeled pins with no coordinate meaning, no current region, no selected marker, no legend, and no list fallback. | A list row shows columns of owner, amount, due date, and status but no headers or column sort state. | A decorative month grid contains colored dots with no event titles, no timezone, no overflow count, and no selected-day detail. | A div layout looks like columns but has no caption, table semantics, or header associations. |
| 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 selects rows, changes sort order, and the bulk action count still includes hidden rows without saying which rows are affected. | A user taps +3 more in a crowded date cell but the calendar navigates away instead of showing the hidden events for that day. | Filtering the table removes selected rows without explaining why or offering a clear-filter path. |
| 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 content is layout, not data. |
| 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 | Using a map as decoration when the positions do not affect the task. | Using list view as a table without column headers or column-state feedback. | Using calendar view as a decorative month card for unscheduled content. | Using table markup to create page columns or layout spacing. |