Somebody Has to Decide What Matches
Import and export are one-time events. Keeping two systems agreeing is a permanent one — and the hard part is identity, not transfer.
Import and export are one-time events. Keeping two systems agreeing is a permanent one — and the hard part is identity, not transfer.
The first thing a new customer does with your product is hand it a file of their real data. Whatever happens next is what they learn about the software.
Notifications get added one feature at a time, each individually justified. Nobody owns the total, and the total is what determines whether any of them get read.
Notification preferences look like a courtesy. They're actually the mechanism that keeps the channel usable — and the coarser they are, the more people mute everything.
Notifications are deliveries to systems you don't control, on paths that can retry. The duplicate that reaches a customer is more visible than almost any other bug.
A recurring manual repair is a bug report written in someone's calendar. Building a faster way to perform it is progress; not needing it is the actual goal.
Internal tools get built quickly, reviewed lightly, and given more power than anything customers can touch. They deserve the standards the customer-facing paths get.
When the internal tooling doesn't cover a case, nobody files a ticket. They invent a workaround, and the workaround becomes permanent infrastructure nobody planned.
Limits get added to protect the system, then serve as the product's only communication about how much use is acceptable. Most say it badly.
Shared capacity is first-come, first-served by default, which means the heaviest user sets everyone else's experience. Nothing about that is automatic to fix.