01
Design for the screen, not the table
APIs that mirror database tables force the frontend to stitch reality together. Prefer response shapes that match real views — dashboards, detail pages, onboarding flows.
That does not mean one endpoint per pixel. It means intentional aggregation where the UI would otherwise waterfall.
02
Errors need a contract too
Inconsistent error payloads create fragile UI branches. Standardize codes, messages, and field-level validation so forms can recover gracefully.
When the contract is boring and predictable, product teams spend less time debugging edge cases and more time shipping.
03
Pagination is a product decision
Cursor vs offset, page size defaults, and empty-state semantics all affect perceived performance.
Agree on pagination rules early. Changing them later is a quiet breaking change that hits every list in the product.



