# Entering several date based values

I am currently writing a system for a Care agency. A brief summary is as follows:

• Staff can use a Timeline to enter in their availability. I'm pretty happy with this and the initial user response is very positive. This looks like this:

• The manager should be able to then allocate them shifts based on their availability.

The Timeline approached works well for normal staff because the only important thing that the user enters about their availability is a fromDate and a toDate. This means it's just a very quick "click and drag" process. However, when assigning a shift to someone, there is the fromDate, the toDate but also the clientName, address and the employee that this shift has been assigned too.

This means that, whenever a new item was added to the timeline, the manager would need to enter all of these things. And every time they drag and change the shift, it would potentially make the employee invalid as they may no longer be valid. In short, this approach isn't really going to work for allocating shifts to employees.

I'm really, really struggling to visualise an equally clean interface for a Manager to allocate shifts, and I was hoping someone with some experience would be able to assist me? So far, I've got this horrible thing:

And this will just take far too long, as there can be around a hundred callouts in a week. Any suggestions on improvement? What is an intuitive way of entering in these kinds of values?

• One question about the possible manager's user flows. Will the manager FIRST enter on employee availability page and THEN assign a shift based on what he/she can see (for that employee)? Or will the manager have a shift to assign, so FIRST he/she select the dates and THEN assigns it to an employee. – gpelelis May 31 '15 at 11:43
• A member of staff will fill out their availability. The manager will then see that availability and based on that, assign them shifts. It's the latter in your example. They assign dates, then the system returns the staff who can work that shift, then they select the staff. – christopher May 31 '15 at 18:56
• So, there is a similar timeline for each client and the manager has to match each employee with n clients, so all of the latter are fully covered but not necessarily all of the former? Do they have to take into account distance between client addresses, because an employee would usually drive to several clients one after the other? – Crissov May 31 '15 at 18:57
• Correct! You do not need to fill their availability. Just allocate all shifts. Location is considered which will determine the ordering of the clients. I'm not sure whether to show it on a map or not yet. My major worry is making a user friendly way for adding these callouts because the current one is awful. – christopher May 31 '15 at 19:04
• This isn't really an answer (which is why I'm commenting) but could you devise some method to automatically assign shifts, and then managers can tweak assignments or resolve conflicts? Your UI will be easier to use, regardless of the design, if the manager has to perform fewer actions. – J. Dimeo Jun 1 '15 at 1:51

Using calendar-like UI for managing schedules/events is good. To provide better user experience, you need to use the Calendar UI as primary control. This means you organize flow in the following sequence:

1. Set date/time date using the Calendar UI (direct manupulation)
a) datetime-related data – with direct manipulation on Calendar UI
b) other data – with appropriate input controls

In this way you interact with map applications when adding new point of interest:

1. Set location (direct manipulation with Map control)
2. Describe it

My suggestions are on the image:

Note 1: Microsoft need to be adjusted, as Oleg G. has changed his hours of availability
Note 2: Manager is adding new customer for Oleg G.
Note 3: John P. should to think twice if he needs to change his time. He feels more responsible now

1. A Manager has full system overwiew: the capacity, the empty and filled slots, the employees
2. New customers added with direct manipulation, so datetime-related data is setted automatically
3. Conflicts are visible and easy to resolve
4. Datetime-related data can be adjusted with direct manipulations (drag and drop)
5. Manager can contact the Employee easily in needed
6. Employee sees his assigned tasks. This disciplines him and make him more responsible for his decisions: once he sees the assigned tasks, it's not so easy (mentally) to change the hours, though it's possible. This allows to eliminate endless adjusting loops between Employee and Manager
• I really like this. I'm going to give this a go and see how it pans out. I may be back with more questions! Thanks for the time you've obviously spent on this. – christopher Jun 3 '15 at 13:12

The first aid I can give you is to request you break down your Management app's capability to an irreducible threshhold. "Computers automate tasks." There is only so much automation or reduction inherent in the system of a task. This may be the result...

• Client name ----------------------hand entry unavoidable
• Client address ------------------hand entry unavoidable
• Appt date -------------------------automation control
• From time ------------------------ automation control
• To time ----------------------------automation control
• Employee -------------------------hand entry unavoidable

Then, too, there is the point of using data from a backend database to accomplish your automation. You could create and integrate preexisting data so it is almost a transparent operation. Potentially, this Info can be gathered from other sources : windows and controls open on the same desktop~>

• Client name -----------drag and drop operation
• Client address -------drag and drop operation
• Employee --------------drop down list selection

Representing a higher standard of data synthesis. Your options for these latter three strictly rely on "data!" And it depends on the system already in place, and what you are willing to accomplish. Perhaps, you could

1. get a connection to the Care Agency's database,
2. query the appropriate tables,
3. add or bind it to a functional control,
4. present it to the user/Manager.

I hope this makes it easier for you to wrap your head around your problem. Good luck.