We're working on an "import from Excel" feature to speed up bulk data entry, especially when moving data from another B2B system into ours.
Of the 20-ish fields we'll be importing, only one of them is challenging to format in Excel: a recurring schedule. So I'm trying to define a text format that:
- is plain unformatted text that can fit into a single Excel cell (or a small number of cells on one row)
- is machine-readable to avoid import errors
- is human readable to avoid data entry errors and to make it easy to troubleshoot format mistakes if the import fails.
Obviously these requirements are in tension, or this would be an easier solution. ;-)
Our users are non-technical office workers, so "just use XML or JSON" probably won't work here-- too complex for our users, and too verbose too.
Although the app is English-only now, we may eventually have to localize into European languages (although not RTL or East-Asian or other more challenging localizations).
Is what I'm trying to do possible? Or is it such a bad idea that I shouldn't bother?
The alternative is that every time we need to input hundreds of schedules into our app, we'll end up asking our developers write custom import code... and for obvious reasons we really want to avoid this so our customers can self-serve instead.
Today, schedules are very simple: a pattern recurs every 1-4 weeks, and within those 1-4 weeks the same days are selected.
- Mon, Wed, Fri (1 week pattern)
- Every 2nd Monday (2 week pattern)
- Every 4th Tuesday (4 week pattern)
- Two-week pattern, with Mon, Wed on first week, and Tue, Thu on second week
Ideally a format could grow over time so if we wanted to support monthly schedules (e.g. 1st and 15th of the month) the format could be extended.
I know that text serialization is often more of a developer-facing topic than a UX topic, but in this case I'm targeting the text format at non-technical users, not developers, so I assumed that UX StackExchange would be appropriate. If you disagree, feel free to vote to migrate to StackOverflow.