Time Management

Probably time management part is missing from PP. I mean the functionality that enables time tracking, as time is that what we sell often on many service cases. If we don't track time, we might be in situation where are working for free, but on business scenario this is not acceptable.

So what is time management features, which are making it useful in PP context?

Please post your ideas, comments or any response here.

heyho,
Im new here - just tried ProjectPier 0.8.03, and I agree:
Sorry to use such a blunt word like "useless" - but the truth is that users of ProjectPier is likely to be small companies, groups, freelancers. And - Yes - we need to track time. There are simply no other way to put it, Project pier is actually quite useless without. And its a shame as PP seems to be quite bug free and stable. We're using Collabtive for the moment - .. "bugs" is its middle name...

I hope to see time tracking implemented. And i would suggest to implement it in such a way that you can record time as "standalone" records with the option of attaching it to a tasks. (As not everything you do on a project is via a planned task. some work "just happens", phone calls, etc - we'd just like a Quick And Simple way of keeping record of that time together with the project.)

And then of course the means of extracting the time rel. data through a simple filter into reports...

Thanks for listening :-) ..
ProjectPier looks really promising - hope to see the time tracking feature added.

all the best
S
--
stian haugli
Industrial Designer MA
xordesign.com
London / UK

I agree with you!

I have tested one time management patch for PP, but wasn’t what actually wanted. I have looked also for some time tracking apps around, I need platform independent solution, should work on linux, mac and windows. Also should be capable to work offline, but time sheets accessible online. No a lot of options available at all. And no free solutions at all.

Have you seen Kimai?

http://www.kimai.de/index.php?article_id=1&clang=1

It's written in German with English translation. Integrating into ProjectPier would be amazing! Would it be possible?

Probably it needs a bit different approach. I prefer built in time tracking solution for PP, which support tasks, milestones relations and etc. But yes, something a bit similar to the Kimai.

I looked at a lot of Project Management systems before deciding on PP. The reason I chose PP is because it is easy and simple to use. I'm interested in tracking my projects with my clients and I don't want them to have to take days to learn the system if they are new to it. PP I think accomplishes this. It's very intuitive and does not have a million different ways to look at something.

For some people, I know, keeping track of hours and money in a project management system is important and necessary, but that's not what I need or want. So my one request to the PP Team is that if you do add time management features please make it so it can be turned ON or OFF completely. I.e., if I'm not using it, I don't want to see it.

Thanks for a great program!

Glen
Sweet Thursday Web Development
http://www.sweetthursdayweb.com

Hi glend58,

I agree that major new features should be able to be turned off. I would like anyone who is working on adding any features to PP to please consider this as you write your code. A simple On/Off toggle in the admin interface will suffice.

-Jon

I've saw some mod to the 0.8.3 version, however, time had to be inputed by hand. It would be nice to have a simple counter to keep the track of time.

I saw Kimai and it look perfect in that issue: one big button to start/stop time. Simple and perfect :)

I miss a time tracking integration as well. I did see there is a patch available, but I really do not want to hack the code and do it again every time there is a PP upgrade. I prefer time tracking to be part of the whole as in Basecamp or as a plugin you can can add to Project Pier. As PP does not seem to have a plugin integration function I recommend integration of Time-Tacking into PP.

Time Management is part of 0.8.6. It will be possible to switch it on/off (maybe at project level :) ). I do like the idea of putting a button on tasks to stop/start time to automatically record time spent on a task. Maybe I can put it in for 0.8.6

I like the button with a start/stop time as well. Must easier then me having a stopwatch on my computer.

Also could we add time tracking for tickets? Like how long it took for you to work on the ticket?

I'm exploring using PP and am liking what I am seeing. Having "a button on tasks to stop/start time to automatically record time spent on a task" is one of the features that is exactly what I am looking for. I've been playing around with a demo online of version 0.8.6 ( http://www.aefer.com/scripts/php/projectman/ProjectPier ), but while I do see some functionality that enables one to assign time to a particular task, I don't see the above described ability to click a button to start/stop a timer from within a task. Is this being worked on for a future version (0.9?), and if so is there a rough time line for completion of that? I'm just wanting to know so that I can gauge on my end whether to wait or explore other options. I like what I am seeing with PP, so I'd prefer to ultimately use it. :-)

Regarding the Start/Stop task timer functionality: just to be extra clear, what I'm interested in is the ability to go in to a given Task and click a button that will start a timer and then later click the button again to stop the timer (ideally the button would change visually to identify which state it is in) at which point the time passed would be added as time spent on that task. It'd probably also be nice after the time is assigned to be able to add/edit any of the other time variables (eg, Name, Description, Hours, Private, Billable, Assigned To). (Note: The reason for being able to change Hours would be because there could be times where the user forgets to stop the timer, and so they need to correct the amount of time spent to match something closer to reality.) It would be great if the Name could default to something like "Time spent on [TASK_NAME]", where [TASK_NAME] would be the name of the task that one was working in/on. Also it would be great if the Assigned To would default to the user that was signed in. Obviously, the Time entry would automatically be assigned to the Task the user was in.

[Edit:] Having looked at Tickets, I agree that it would be helpful to assign time to Tickets as well. It also occurred to me that I should specify that I'm envisioning that there could be multiple time events assigned to a given Task/Ticket since it is (unfortunately) not always possible to complete a task in one sitting.

[Edit2:] I could also see it being useful to me to be able to assign time to Messages in the same way as to Tasks/Tickets. I'm going to want a way to make notes related to a given project (eg, notes related to a phone call or e-mail from a client) and that takes time too that I'd want to record potentially. I'm thinking that the Messages functionality could work for keeping those kinds of notes.

I guess it would be great to have the Start/Stop functionality available directly in the Time entry screen as well, for Time that is spent that is not associated with any particular Task.

Thanks much for what looks to be some great software, and thanks in advance for considering my thoughts/requests!
Sean

This feature was requested before and I planned to put this into 0.8.6. Let me see if I can make a patch that will serve your needs. I think it should be possible to have a solution in 2 weeks.

Thanks for the compliments :-)

Thanks much for your response and your willingness to work up a patch. :-)

We've been doing some thinking and talking on our end as we're acclimating to PP and to using project management software in general. I've realized some potential user interface problems with what I was originally requesting. It appears that the current Time Tracking plugin is just storing a single field for time (ie, hours in decimal form) which would mean that the easiest way to do a Start/Stop timer would be with Javascript. What I realized however is that if the Start/Stop timer is achieved with JS then there is probably a decent risk that some (many?) users will at times forget that they have time being tracked and either navigate away from the page or close their browser (or have it crash), which in all cases would mean their time would be lost. One alternative would be to store both the start time and the end time in the database, but that likely involves more work for you all, and as we have thought about things on our end we're not sure that is necessary (for us, at least) at this point. If you did go the route of storing start and stop times in the database (so that the time tracking is not dependent on the page, or even the browser, staying open then it would probably be really helpful to have some way of seeing all of the time entries that are not closed (ie, time that one started logging for a Task or Task List, but have not yet stopped logging).

We are experimenting with using desktop timer software (http://www.programming.de/multitimer.php) to keep track of time spent on tasks over the course of a day and then entering the time for the corresponding tasks at the end of the day, and/or at multiple points during the day (eg, if a given task is ready to be Marked as Completed). This avoids the problem of forgetting about time being tracked and closing a tab, browser, etc. It also potentially means less programming for you. :-)

I do still think that making time logging possible from within associated Tasks, etc. would be handy in the long run, but it is not urgent at this point. So here would be my suggestions/requests for proceeding on implementing some of these new features...

-First make it possible to add time for a Task or Task List from the associated Task or Task List. I'm thinking that instead of creating a form that would be shown on the Task view screen that there could be a link accessible from the various screens that would be part of this string: "ASSIGNED_TO | Edit | Delete | View | Mark task as completed" (this list is a little shorter when in the Task View screen), and for Task Lists it is "Edit | Copy | Move | Delete | Add task | Reorder tasks | Download". So for example, one of these might read like this (note the Add Time):
"ASSIGNED_TO | Edit | Delete | View | Add Time | Mark task as completed"
Clicking on the Add Time for the Task (or Task List) would take the user to a Add Time screen that would default the Time Name to something like "Time spent on [TASK_NAME]", where [TASK_NAME] would be the name of the Task (or Task List) that one clicked on the Add Time link for (but the use would be able to change the Name field if they wanted to). The Assigned To would default to the user that was signed in (which I believe it already does). Obviously, the Time entry would automatically be assigned to the Task (or Task List) the user clicked on the Add Time for. Upon submitting the time the user would ideally be taken back to whichever screen they were on when they clicked Add Time. If this proves to be difficult then that could be saved for a later improvement and maybe an easier fall back would be that the user is always returned to the Task View (or Task List View) screen, but obviously it would be best in the long run to be able to have the user returned to the screen they originally came from.

The big benefit I see to going the route of having an Add Time link is that it can be used on multiple screens/views and thus the user can add time for a Task (or Task List) from multiple views, whereas if there is just a add time form on the Task View that is more limited. So I'm thinking the Add Time link idea would give you the programmer more functionality out of your programming time.

-After the above is working the next thing I'd suggest/request is making it possible to view the time associated with a Task or Task List when one is in the Task View or Task List View screens. Now for this it would be nice if it were possible to view the time all listed below (ordered by date, perhaps with oldest at the top?) the Task or Task list (only in the View screen though). It would also be helpful to be able to click on a given time entry in this view to be able to view more info and/or to be able to edit it (if for some reason one needed to). So ideally this list of time entries would be the same presentation and functionality as when viewing time on the Time tab (except in this case it is only time entries associated with the particular Task or Task List). If it is a lot of work to be able to view time in the Task View (or Task List View) then a decent fall back would be the ability to click a link to go to a page that showed just the time entries associated with that Task (or Task List). If you went that route then maybe next to the Add Time links for Tasks and Task Lists there could be a View Time link for any items that had time assigned to them. This relates to another little enhancement to all this which is that it would be nice to be able to see from any Task or Task List view if a given Task or Task List has time associated with it. I was thinking that maybe a little clock icon could be displayed, but the View Time link is better in some ways in that it serves multiple purposes (ie, it would notify the user that time has been assigned to that Task or Task List, and it would enable them to click through to view that time as well). If you decided to go the route of displaying time for an associated Task or Task List on a separate page, it would be good if there were a Add Time link on that page so that the user can easily add another time entry for that Task (or Task List). Again, being returned to the proper/originating pages when done would be ideal.

-After all of the above is working, then I'd suggest/request applying all the same enhancements to Tickets first, and then to Messages (I put Messages last because I haven't seen anyone else yet asking for that other than myself, but someone else did express interest in time for Tickets).

I hope that you find the above helpful, and I hope I have not presumed too much in offering these thoughts and requests. You are very generously doing the work on PP and I just want to help make your good labors as fruitful as possible. Also, we (my wife and I) are just two new PP users, so other folks more experienced with PP and/or with larger groups may have different thoughts/preferences. We understand and respect that you have to prioritize your time so if it turns out that some or all of the above just doesn't make sense right now then we understand. Let me know if you need/want any clarifications on the above, plus I'd love to hear your thoughts/reactions as well. Thank you again for all your hard work! :-)

Sean

I read your comments with pleasure. You (2) have given it a lot of thought.

I was indeed thinking of a JavaScript timer including storing the start time in the database. Initially the timer would start ticking from 0. If you would leave the task page it would be no issue. Reopen the page and based on the time of opening the page and the value in the database the timer would start ticking on the difference. This would work but after reading your comments it triggered me to do better.

Your Add time comment made me realize that Add time is the result of a Start/Stop combination. So, Add time is definitely the way to go. And your observation to make it generic is clever. We should be able to attach times to any object in the system. Funny thing is that we already have a working example of this in the system: Comments.

Combining this it makes me think that adding a time field to comments may do the trick. In addition you get the option to put comments with the time. We probably want to make a distinction in the user interface between timed and non-timed comments. But that is not hard to do. Viewing task time entries would simply be viewing task comments with a time value :-).

It would be very easy to extend this to messages and other objects. And within a project an overview of all time entries (comments with time values) over all objects and users would be interesting as well.

Now for starting and stopping. Your remarks on desktop timer software made me think. Basically, we want to notify others that we have started work on a task. Without computers, it is like calling someone up and saying "Hi, this is X, I have started work on task 15 in project 10". This way interested parties can keep track of task progress and duration outside of ProjectPier. Of course, I will also develop a part within PP for receiving task notifications but notifications like this will open up the possibility to notify external systems and users as well.
We have an example of this in the systen with messages where we can notify others that a message is posted. What I am thinking of is, when you start a task, a notification is sent out to interested parties. Conceptually the minimal notification is of the form:

SITE: xyz PROJECT: 10 USER: 6 TASK: 15 START: YYYYMMDDHHMMSS

For stopping a comparable message is sent:

SITE: xyz PROJECT: 10 USER: 6 TASK: 15 STOP: YYYYMMDDHHMMSS

Work on a task can be started and stopped multiple times before the task is completed. So, in the Add time page each start/stop pair plus duration is shown plus the sum of the durations. There could be 0 start/stop pairs of course. The sum of the durations is prefilled in the time field.

To extend this to other objects is no problem then. E.g.:

SITE: xyz PROJECT: 10 USER: 6 MESSAGE: 20 START: YYYYMMDDHHMMSS

Displaying the time counter (JavaScript) in the page is just informational.

And yes, we definitely need a page that shows all the started but not stopped tasks (I did not think of that). I guess we need it on project level for project users and system level (over all projects) for administrators.

How about this approach?

P.S. Come to think of it, notifications seems to be a generic thing that we want for potentially any object in ProjectPier.

Hey, thanks much for your response. I'm still digesting it all and doing a lot of thinking, processing, research, etc.

I'll post more (a LOT more) later (hopefully within the next day or so) once I've organized my thoughts enough to present them. :-)

Thanks much for your kind words! I'm really glad you're finding my thoughts helpful. :-)

I feel a little apologetic at the moment because I have written a LOT below about all this stuff; I really hope it is not overwhelming or otherwise unpleasant. I happen to have had some free time in the past several days to give to thinking about all this, and I anticipate having less time as this winter progresses, so I'm kind of in a think-about-this-while-I-can mode. I hope that you'll find all of the below helpful and not take any of it as demands, expectations, etc. These are all simply my thoughts, recommendations and preferences. :-) Additionally, I occasionally will write things that I then change my mind about in the next paragraph. I typically leave my original thoughts because I think they often have valuable info in them, even just as an alternative perspective from where I end up on an issue. So if you find yourself wondering where I'm going at times, keep reading because it hopefully will become more clear. Having said all that, let's dive in!

I have written a ton, and since I have been trying to organize my thoughts as I went by grouping them into categories, I'm going to just make several posts which will hopefully make it a little easier to follow, but also easier to post replies to sections of content. :-)

I think I like the direction you are going with things, but I do have some follow up questions/clarifications as well as some thoughts for consideration. Also, as I re-read over what I've written below I notice that I do at times use words like "should" and "always"; please don't take these as commands, absolutes or judgments. Rather, I'm simply trying to be clear regarding how I think about things and what makes the most sense to me. There are many other users who may have different opinions, and additionally you are the one offering to do the work, so you have tremendous say in all this! :-)

Storing Start/Stop events in the database would be great for all the reasons we've both cited. I'm glad you like my Add Time idea, and being able to attach time to any object in the system. I think your making the analogy to Comments is spot on.

I do have some hesitations about actually combining time and Comments though, at least on a visual level. Part of the beauty of Comments with how they currently work is that there is only 1 field (not counting the attach file field) which keeps it nice and simple; I'm concerned that it could get confusing for some users to have a time field thrown in the mix. Additionally, the way Comments currently work, if someone adds a Comment everyone (I think) who has access to that project gets notified about that Comment (even if the Object, such as a Task, is not assigned to them, or to their Company). So if logging time is done by way of Comments there could be a LOT of emails flying about that at least in our case would be more unhelpful than helpful. Having said all that, I think that closely duplicating the underlying structure of Comments (and how they can be attached to any object) makes a lot of sense and should help minimize your having to "reinvent the wheel".

I've done a bunch of thinking, reading (and re-reading) of your post, talking to my wife (my business partner), and various research trying to wrap my brain around ways we might effectively approach these various time logging improvements we're discussing here. One of the things I did was to go looking at how other software handles these things, as well as how users of other software feel about these topics. The following are some of the links that are informing me as I'm processing all this, followed by a few of my observations. You'll notice that several of the links are from the Collabtive forum; I did a bit of looking there because they were one of the other applications I was considering before settling on PP. I figure they are probably a similar demographic of users to PP and they also handle Time a little differently, so I thought seeing comments in their forum regarding Time and peoples preferences might be informative. I also took a peek at Basecamp's website, since it seems like they are the standard that everyone is compared against. I have not used Basecamp, so I'm speaking from a fair amount of ignorance, but I wasn't that impressed and I feel much more hopeful about the possibilities with PP. :-)
http://collabtive.o-dyn.de/forum/viewtopic.php?f=10&t=5752
http://collabtive.o-dyn.de/forum/viewtopic.php?f=10&t=2765
http://collabtive.o-dyn.de/forum/viewtopic.php?f=10&t=4842
http://collabtive.o-dyn.de/forum/viewtopic.php?f=10&t=2948
http://collabtive.o-dyn.de/forum/viewtopic.php?f=10&t=5774
http://help.37signals.com/basecamp/questions/229-how-do-i-use-basecamp-to-do-lists-to-trac...
http://basecamphq.com/extras#time
http://answers.37signals.com/basecamp/1974-i-want-to-track-my-time-as-spent-and-billable

A few observations: It seems it would be good to retain the ability to Add Time independently the way one currently can (ie, go to the Time tab for a Project and Add Time that is either just for the Project or is assigned to an object such as a Task, Task List, Ticket, etc.) because sometimes for whatever reason one wasn't able to (or forgot) to Start the timer running and/or one just doesn't want to bother with it on a particular occasion. Based on my interpretations of what you've written thus far I think we're fine here. It also seems that it would be good to have the ability to log time in a more granular way and have that automatically tied to a given object (Task, Task List, Project, Message, Ticket, etc.). Being able to perform quick, easy Start/Stop operations as a part of this seems important. If you peruse the above links (especially the Collabtive ones) you'll get more detail, but to sum up it seems that we're heading in a direction that there is some amount of interest in, which I find encouraging. :-) Additionally, it seems (based on my impressions from my research) that developing this Time related feature set may make PP all the more compelling for people to use (eg, it seems PP already may be doing a better job at giving the user nice options for handling billable and non-billable hours as compared to something like Basecamp, which I have not used, but the above forum post does seems to indicate is not quite as robust functionality as PP).

I'm writing this paragraph after having written everything below, but thought it might be more helpful to put at the beginning. Though I'm probably not always as consistent in my terms as I might like to be, the following are what I'm trying to refer to when I use various terms below:
-Add Time: This refers to the current system of Adding Time, as well as to that same system with some improvements (such as having more accessible Add Time links with associated Objects (eg, Tasks), like I discussed in my earlier post. I sometimes also refer to this as Recording Time Activity, or as Record Time, because it can (but does not have to) involve connecting Time Activity (defined below) with an Add Time record. Depending on how everything ends up working we may be able to just stay with Add Time, or we might switch to Add/Record Time.

-Object: This refers to anything in PP that we can attach Comments, or eventually, Time to; eg, Projects, Messages, Task Lists, Tasks, Tickets.

-Time Activity: This refers to the function of logging time spent doing something that is attached to an Object in PP; it is meant to be distinguished from Add Time. I see Add Time as ultimately having to do with Adding Time for billing purposes, whereas I see Time Activity as being more for the user to help them keep track of how they are using their time and thus to aid them when it comes time to convert the time they have worked (ie, their Time Activity) to billable time (ie, Add Time). Note: Having read over all of this one last time it occurs to me that we may ultimately want to use terms like Start Timer / Stop Timer; this relates to the analogy I make later about Time Activity logging basically functioning as a stopwatch with a memory; Start/Stop Timer (and similar terms) may help disambiguate this functionality from Add Time. For all of the below I use Time Activity (because I don't feel like retyping it at this point).

-Open Time Activity: This refers to Time Activity where the timer has been started, but the user has not Stopped the timer and thus the Activity is still Open.

-Closed (but Unrecorded) Time Activity: This refers to Time Activity that is completed, meaning the user has Stopped the timer. However, the user has not yet Recorded this Time Activity by connecting it to an Add Time record. In the future it might be simpler to just call this Unrecorded Time Activity.

-Closed (and Recorded) Time Activity: This refers to Time Activity that is completed, AND it has been assigned to an Add Time instance and thus will no longer be available to be added to another Add Time instance. In the future it might be simpler to just call this Recorded Time Activity.

-Global setting: This refers to a setting that when changed will apply to all users; this would be akin to enabling or disabling a plugin.

-User-Global setting: This refers to a setting that only applies to (and is stored for) the currently logged in user, but will apply across multiple views in PP for that user (eg, if there were a User-Global setting that changed how Comments functioned for the user, then all Comments would be changed for that user, not just on a particular screen, such as Tasks).

-User-Global view: This refers to a view where the user is able to see all of a certain kind of data, spanning across all Projects; this is basically what views like My Tasks are.

Ultimately there may be much better terms to use for things than the above. I just had to come up with something so that I could communicate what I'm talking about. :-)

(I'll come back to the notification concepts you put forth later.)
I'm envisioning a complete Start/Stop pair being a single row in a database table and having the following fields (this is not exhaustive, but just to give you the idea of how I'm thinking, hence I don't bother with fields like a PrimaryKey in this example): StartTime (holding a value like YYYYMMDDHHMMSS), StopTime, Note, Recorded (a yes/no field), AssociatedTimeRecord (this would be a reference to the Add Time record that this Time Activity is eventually connected to). When a complete Start/Stop pair is displayed there would typically be a computed duration value like you have described.

A couple of thoughts on all this: I'm not a big fan of having a Note field for these records because I don't think this is the place to do a lot of recording of notes (if someone wants to record a lot regarding what they did, then they should just go ahead and Record the Time Activity via what we've been calling Add Time, but I'll now refer to as Record Time Activity, and use the Add Time Description field for their additional info); but I recognize that some folks will likely want the ability to make a brief note about what they're doing in connection with a given object (Task, Ticket, etc.). I definitely think that the Note field should NOT be required to have data entered in it (and I'd personally be a fan of it visually being only a 1 line text box as opposed to multi-line). The goal here is to make it quick and easy to punch in/punch out on a given object (Task, etc.).

The fields "Recorded" and "AssociatedTimeRecord" would probably not be visible to the user. I'm thinking that once Time Activity has been Recorded to a particular Add Time record then the Recorded field would change to Yes and the AssociatedTimeRecord field data would relate (obviously) to the associated Add Time record. Things should be set up such that a Time Activity record only is available to be Recorded (ie, associated with an Add Time record) if the Recorded field is empty (or the equivalent of a "No" value). If an Add Time Record is deleted, then the previously associated Time Activity record(s) would need to be updated so that the "Record" field was returned to a "No" status so that those records could be re-recorded to a new Add Time record.

Obviously, it needs to be impossible for the user to Start Logging Time for a given object a 2nd (3rd, 4th, etc.) time when there is still an open Time Activity being logged. So when the user comes to the detail screen for a given object (Task, Ticket, etc.) they should automatically be presented with the currently open Time Activity being logged and a big button for them to click to Stop Logging Time (and having the nifty JS counter here could be cool too).

In terms of layout positioning, I think that having Open Time Activity listings near the top, below the Task details, but above Comments would be good. This makes it quick and easy to get to your Open Time Activity listing and Stop it (or Edit it if need be). We might even want to apply special styling to this item so as to better make it stand out and enhance the easy-to-spot-and-click aspect of it. Open Time Activity listings for other users should always be shown below the Open Time Activity listing for the logged in user; additionally (and obviously), the Open Time Activity for other users should NOT be editable by anyone other than them (we may need/want to provide some kind of Admin power/permission to edit these, or a special Admin view among the other Admin configuration pages, for making changes to these records in the instances that it is actually needed; I don't think there should be very many occasions where someone else would need to be able to edit another user's Time Activity, but there may be significant scenarios that I am not thinking of). The user's own Time Activity listings should be editable by them (unless the Time Activity has already been assigned to an Add Time record, as described more below, in which case it should no longer be editable, except for maybe the Note field??); I'm thinking that both StartTime and StopTime should be editable, as well as the Note field. The main reason for making editable Start and Stop times is that sometimes people will forget to Start or Stop when they intended to and so being able to make changes will make it more useful (otherwise folks will just revert to entering time in large chunks via Add Time and not track it in more detail the way the functionality we're talking about adding will enable them to do).

[Note: The next several paragraphs contain content that I changed my mind about later.]
I would envision the Closed Time Activity listings (ie, these are a complete Start/Stop pair, but that has not been Recorded yet) for a given object to be listed somewhere below the Open ones (and again, only the Time Activity listings created by the logged in user should be editable by them). I'm not certain yet myself whether I would prefer that the Closed (but Unrecorded) Time Activity listings to be above or below the Comments section for a given object. I could imagine myself and others wanting either/both, so it might be worthwhile to just plan from the beginning to make a global Admin option to switch between showing Closed (but Unrecorded) Time Activity "Above Comments" or "Below Comments".

It also would probably be good to add a line just below the object details (Task, Ticket, etc.) with in-page links to the Comments section, the Closed (but not Recorded) Time Activity section, and the Closed (and Recorded) Time Activity section. It makes the most sense to me that the Closed (and Recorded) Time Activity section can be at the bottom of the page, because it is the least necessary to see. In fact, that section would be a good candidate for some kind of JS powered accordion functionality (eg, http://jqueryui.com/demos/accordion/) with this section defaulting to closed. It is nice to have access to the info when one wants it, but after the Time Activity as been Recorded to one or more Add Time records, it is less likely the user will be referring to it very often (and in many cases probably not at all).

Thinking a little further about the possible accordion functionality, it could make sense to have all 3 sections be accordion powered. We would need to make sure that when a user has clicked on a link that takes them to a particular Comment that the accordion functionality does not interfere with that (ie, ideally the page would load, the Comments accordion would open, and the page would jump to the appropriate Comment like normal). Additionally, we could make use of the JQuery Sortable functionality to make the sections rearrangable via drag and drop. I would envision this arrangement being a User-Global setting, meaning that the ordering is stored for the logged in user, and it applies to all views that have these same elements (eg, views that have the ability to add Comments and Start/Stop Time Activity Logging). Adding accordion functionality to all 3 sections probably warrants further thought though. My intention is to help keep the page from getting too cluttered, especially with the data to do with Closed (and Recorded) Time Activity listings (of which there could end up being quite a list of in some cases). But I don't want to in any way decrease functionality or availability of important options/data, such as adding/viewing Comments, Start/Stop Time Activity, etc.
[Note: This ends section that I changed my mind about.]

I realized as I was reviewing this one last time that we really don't need to bother with the above 3 paragraphs (I'm leaving them in case there is something useful in there). The My Time functionality (which is discussed later) in conjunction with enhancements to the Time tab page and the Add Time page should address everything adequately. In the above paragraphs I was struggling with how best to handle having all of that info on Object detail pages, and now I'm realizing that it doesn't need to be there at all. All that needs to be on Object (eg, Task) detail pages is any Open Time Activity (with the logged in user's being at the top of the list, and editable).

[Note: The following may be less pertinent now, but it still might be something we want to consider at some point.] A final (for the moment) thought regarding layout considerations: if it would be helpful I could make a rough mockup in Dabbleboard that you could then edit and comment on. If we do that I'd probably want to PM you the link so as to avoid any mischievous persons from doing any editing of their own. :-)

A mockup would be really helpful. Otherwise I am forced (as a human) to convert your text into an image in my brain. And my guess is that you have that image in your brain and were busy converting that into text in the comment above ;-)
So, if you would share a mockup it would be really helpful.

You mean you can't see the pictures in my brain? ;-) In all seriousness, you put that really well. I will work up some mockups of the various screens and how I'm picturing stuff. I'll PM you once I've got them ready.

Sean

The mockups are done. PM sent.

In the mockups I've switched to using the word "Timer" instead of "Time Activity" (which was a bit cumbersome).

Sean

An important element of making the Start/Stop functionality useful is having a way for the user to be visually reminded (but not obnoxiously so) that they have Open Time Activity being logged. This helps prevent the user from logging Time Activity for multiple things at the same time (which we may want to technically allow in case there are instances where someone wants to use PP that way, but which is not how we would expect people to use it), and it also encourages them to stay on task and to Stop the Time Activity being logged if they are switching to something else.

So to these ends I would suggest that in the right sidenav, above all other items there be a list of all Time Activity Being Logged (which would only be for the logged in user) which would list the object names (eg, name of the Task, Ticket, Project, Message, etc.) of any Time Activity being logged; in theory this would usually just be 1 item, but it is possible that some users would have a wish/need to be logging multiple items at the same time. Each item in this list would be a link to the detail page of the object listed where the user would have originally Started their Time Activity being logged, and where they could now easily Stop their Time Activity being logged. Another consideration with this list is whether to have it display the amount of time logged thus far next to each item (in parenthesis perhaps). I personally would lean more towards this being a static number that just updates each time the page is loaded versus a live javascript clock that ticks away the seconds; if we did do a JS clock, I (and my wife) would prefer it to not display the seconds and not to have any blinking animation--we both find that kind of thing distracting. That all goes for any JS timer/clock used on any page; something that changes every minute is fine, but something that is constantly changing (eg, every second) is annoying (to us, at least).

It would also be really useful to have a My Time tab on the main dashboard screen (alongside of My Projects, My Tasks, etc.). I'm thinking that this would basically be a User-Global view (meaning, it is only data pertaining to the logged in user, but it spans all Projects) of the Open Time Activity, Closed (but not Recorded) Time Activity, and Closed (and Recorded) Time Activity information, just like what is viewable and editable in the detail view of a given object (Task, Ticket, etc.), only the listings probably won't be editable on the My Time screen, but rather this would be a list of the items with links to the detail pages where you can perform the appropriate actions (this would be similar to the My Tasks page). Within each of the 3 sections (Open, Closed and Closed-Recorded) Time Activity listings would need to be grouped by the particular objects they are attached to (eg, Projects, Task Lists, Tasks, Tickets, Messages, etc.). Probably the only actions to be performed via these lists is for there to be links to the detail page for each listed object, because that is where one would perform further actions (eg, Stop Logging Time Activity, Record Time Activity to an Add Time record, etc.), if one so desires. This view is also very useful for enabling one to see what they have done for the day across all projects, in addition to Closing any Open timers, and Recording any Unrecorded Time Activity to Add Time records.

It would probably be helpful if there were controls on this page (My Time) to show all Time Activity listings for this user for various time periods (the units could probably be days, and we could have it default to 1 day, which would basically be today's time, but they could make it 2 days, 3 days or longer if they wanted to); we might also want to add pagination to this, so that changing the default number from 1 to 3 would change how many days worth show on the page at once, but there probably needs to be a way to go back to look at older records without having to display everything that came before them on the same page (which at some point could be taxing for a server). So maybe we make 7 days the max to shown on one page at a time (and for those who have more powerful servers, or very little data and want a higher number there could be an Admin global setting to allow a higher number or something), and the user can page through 7 days/page at a time to get to older records if need be (which I don't imagine people would need to do very often). We could consider making it a User specific setting to be able to set the default # of days shown (but the max would still be limited by the Admin settings).

A side note on this: In the long run I'm not sure that the Time Activity records would actually need to be kept forever since they ultimately are translated into Add Time data, which is what billing is done off of, etc. So we eventually might want to build in a function to purge old (and Closed AND Recorded) Time Activity records via the Admin section. The command could default to Purge records older than 13 months, which would be sure to leave a full year of data in case it was needed, but there could be a field to change the number to whatever # months the Admin user wanted. It occurs to me that some users might choose to use the Time Activity functionality without using the Add Time functionality (and thus their Time Activity would never be Recorded), so it'd probably be good to have the option in the Admin section to Purge even Time Activity records that are NOT Recorded.

When the user is ready to Record some of their logged Time Activity I'm envisioning that they would ultimately end up at the Add Time page for a given Project. They could come to the Add Time page via the Time tab, or via a Record Time (or perhaps Add Time) link in the detail view of an object (Project, Task, Ticket, Message, etc.) with Unrecorded Time Activity). When on the Time tab page, if they have any Unrecorded Time Activity then the associated objects would be listed. This would be something like, "Items with Unrecorded Time Activity", with a list below of each Object name and two links next to each name: View (for going to the detail page of the original Object), and Record Time (or perhaps Add Time). Clicking Record Time would open the standard Add Time screen, with the addition of the various Unrecorded Time Actitivty items for this object listed below.

[Note: From here to the end of this paragraph is content that I changed my mind about in the next paragraph.] Each Time Activity item would have a checkbox in front of it that would default to checked (but if unchecked would then exclude that Time Activity from being added to the Add Time record; this functionality is because there may be occasions where the user wishes to assign some Time Activity as Billable and some as Non-Billable, in which case they would be doing two Add Time instances and some Time Activity with each). If any Time Activity is unchecked so as to be excluded from the current Add Time operation, then ideally there would be some Javascript that would dynamically update the hours field accordingly.

Since the Add Time Hours field will be manually changeable anyway, an alternative to part of the above would be to not have any sort of checking/unchecking ability, but rather just have it such that whatever Unrecorded Time Activity there is for this Object (Task, Project, Ticket, etc.) is what is going to get assigned to the Add Time record, and if the total hours is not accurate for billing purposes then the user just manually changes the Hours field (and if necessary does a second Add Time instance after the first, which would not have any Time Activity associated with it, but could still be manually tied to the appropriate Task, Project, etc.). Personally, I think I lean more towards this option for several reasons. One is just that it seems like it is simpler in multiple ways, not the least of which is regarding the programming which you will likely be doing. :-) Another reason is that if we put too much functionality into the Time Activity Logging functions we eventually end up just duplicating a lot of what Add Time already does (eg, Billable/Non-Billable, Private, etc.). The Add Time functionality is already pretty good, we just want to better connect it to various Objects and make it easier for users to initiate an Add Time activity from an Object and have the appropriate details be pre-filled. In addition to that we (you, I and others interested in this) are also trying to build in some timer Start/Stop time logging functionality, but do it in such a way that it meshes well with the existing Add Time functionality. So all that is to say, I lean towards making the Time Activity geared towards helping users be aware of and track the time they spend on various activities and provide a way for them for dump the time/activity data into the Add Time records, but to not let the Time Activity logging become more than it is, which is basically a stopwatch with a memory. :-)

As side note, in keeping with the above paragraph, it would make sense if Time Activity Logging were actually it's own plugin, separate from Add Time. Thus some users can continue to just use Add Time (albeit with it being a bit more accessible via Add Time links placed with various Objects like I talked about in my previous post (http://www.projectpier.org/node/1333#comment-4701). Alternatively, some users might want to log their Time Activity, but not be concerned with Billable, etc. and so actually never Record their Time Activity into Add Time records. So at least as I'm envisioning things so far, a user would be free to use one, the other, neither or both of the plugins; in other words, the Add Time and Time Activity plugins would be complimentary without being ultimately dependent on each other.

As I've indicated above, I still think it would be handy to have Add Time links interspersed with the various objects (Projects, Tasks, Task Lists, Tickets, Messages, etc.) which would either just take the user to the Add Time form with Name and "Task" prefilled as I talked about in my earlier post, or if they have Unrecorded Time Activity (for the Object for which they clicked on an Add Time link) then when they arrive at the Add Time page they would have their associated Unrecorded Time Activity listings visible like described previously, and the Object/Task that the Add Time entry was defaulted to would not be changeable (since if they could change it at this point that would make things wonky in that there would be no Object to associate the Time Activity with, which would not be good). Oh wait, now that I write that I'm remembering that in the Add Time screen if nothing is selected then the Time is just associated with the project, so maybe it will be fine to let folks change that. I'm going to leave my prior sentences since it seems like something worth reflecting on.

A small visual change which will accompany backend changes is on the Add Time form where it currently has a drop down box of "Open tasks" we would want to change that to something else (perhaps "Project Activity"?) and the drop down would of course allow selection of more objects (eg, adding Tickets and Messages, and anything else that Time Activity can be attached to).

As you can tell my thoughts have been much more regarding thinking through other aspects of all this time related stuff. Your ideas about Notifications sound pretty cool, but I don't yet have a vision for how I'd use them personally, so I don't have a ton of thoughts for you (yet). I think the possibility of being able to send notifications to other services/applications is definitely intriguing and likely something that the PP user base could find some use for once they were aware of the possibilities.

Regarding notifying other users of Time Start/Stop events, I need to think more about how I'd at least like for this to work. The part that I'm certain of is I'm going to want to the ability to set a default of NOT notifying other users because in my case it is just a small group and so it will be enough just to see on a Task (or other Object) detail page that UserXYZ has Started Working on this Task/Ticket/Message/etc. Again, since I envision that there will be periods where a user might end up Starting and Stopping their time logging many times in a day I don't want a buzzillion e-mails flying back and forth giving me all of those details.

So all that is to say, I think you are on to some really cool ideas regarding Notifications, and I need some more time to be able to offer more helpful thoughts about it. But feel free to put more of your ideas about it out there and I can give you my reactions to those at the very least. :-)

As always, many thanks for considering my ideas and I hope that you find them helpful. As I've said, we're just two users (my wife and I) and others may have very different opinions, recommendations and preferences. I'm enjoying getting to collaborate with you on all this. That is very fitting for a open source project that helps people to collaborate. :-)

Thanks!
Sean