This site has been retired. For up to date information, see handbook.gnome.org or gitlab.gnome.org.


[Home] [TitleIndex] [WordIndex

Navigation: Ideas

monkey.png

Project Monkey

Because monkeys are crazy productive!

Author

Bruce van der Kooij

State

Draft (non-published)

Subpages

Background

The reason for starting this project is first and foremost that I simply haven't yet come across a time management application which fully integrates all key aspects of time management (specifically task management, time tracking, reporting and monitoring).

So far I've encountered applications that implement the task management side of things very well (most specifically Things and OmniFocus) and then there are those that implement time tracking properly (GTimeLog and Hamster). In between there are also a lot of applications, both open source and non-free (proprietary) that implement a couple of very interesting features we could reuse.

Instead of getting straight into it and adapting an existing solution and metaphorically trying to punch a square peg through a round hole I thought it would be a better idea to start with writing a proper specification for what I somewhat tongue-in-cheek refer to as "The Ideal Time Management Application". This is that specification.

Vision

A vision is essential to guarantee the success of a project. From a common vision flows the functionality of an application. Here is our vision:

And specifically in relation to time management:

Introduction

The inspiration for this specification came from open source projects such as Hamster (partly vision and a lot of other ideas), GTimeLog (the time mode), Firefox (the bookmarks view), Thunderbird (the search field), Compiz Config (the sidebar), Zeitgeist, Glista and Hotwire (the entry field) and on the non-free side primarily OmniFocus (core concepts), Things (overall layout and look and feel of management mode). Most of the icons are from the Tango icon set and some are from the OpenVista application.

Global mode

Monkey offers two global modes, planned and chaotic. The way you want to track time determines what mode to use.

If you're new to time tracking or aren't very organized it's a good idea to start off with Monkey's chaotic mode. This is a simplified mode to time tracking which hides all management functionality, requires no up-front planning and allows you to simply track time against pre-defined activities. It results in a less detailed time log, but it's quite a bit easier to track time. The mobile application we've developed also works very well for this mode.

Once you're ready for a more organized approach you'll want to try planning mode.

In planned global mode all management functionality will become available. As this mode follows David Allen's action management method Getting Things Done, you'll want to read up on GTD before you attempt using this mode. The Wikipedia article offers a good start but you'll probably want to buy David Allen's book Getting Things Done: The Art of Stress-Free Productivity.

Another good introduction to GTD is the OmniFocus Basics Video (23MB MOV) in which Ethan Schoonover from the OmniGroup explains the concepts behind GTD and the way they implemented it in OmniFocus (an application we draw inspiration from).

No matter what mode you are using you'll always want to specifically log breaks, interruptions and procrastination separate from your activities. The user interface makes this quite easy. Our application based time tracking functionality also helps out a lot.

The taxonomy system

Before taking a look at the different modes it's important to tell you something about the taxonomy system. To organize everything we've implemented a very generic and powerful classification system based on Drupal's Taxonomy module. Basically a vocabulary is a container for terms, or "tags", which you can then apply to projects, actions and facts or "log entries" or even just use them by themselves. Terms themselves should be relatively short (aim for a maximum of two words).

Here are a few examples of terms organized in vocabularies:

Managing vocabularies

mockup-managing-vocabularies.png

Modes

Monkey implements the following modes:

Manage mode

mockup-manage-mode.png

Or using treeviews (think Firefox's bookmarks organizer):

mockup-manage-mode-treeview.png

Time mode

The time tracking functionality builds on top of the task management and taxonomy concepts discussed in the previous section. It is these concepts combined with several time tracking features that make time tracking in Monkey not only enjoyable but also lead to a very accurate record of how time is spent.

mockup-time-mode.png

We've implemented a widget called the Main Entry Field that one uses to log so called facts or "entries" if you prefer. Basically all you have to do to track time is type some text in the entry field, hit enter and you're done, you've just logged some time. For more information on the main entry field see the Advanced Features section.

mockup-main-entry-field.png

Behind the scenes here's how it works, once you submit anything in the main entry field the application will try to match the text typed against projects, actions and terms. If the application manages to match the current text against any of these it will log a fact associated with that particular project, action or term. If not, it will simply create something called an activity and put it in a special list called Unsorted.

Advanced time tracking

There are a couple of interesting things you may want to become familiar with:

  • When you log a fact against a project or an action the application will also log time against the associated terms. So looking at the example below if you logged time on the project "Project Monkey" time will also be logged for the term "Hacking". However, if you log time against the action "Design entire user interface using mockups" time will be logged for the term "Mockups" and indirectly through a child-parent relation with the project on the term "Hacking".

    help-fact-term-logging.png

[...]

Edit mode

Hamster has a very cool time slider you can use to easily adjust the time you spent on an activity. This slider is ideally suited for edit activities but also works quite well for detailed reporting.

slider-view-mockup.jpg

When you hover over an activity you get a tooltip (Pidgin also uses this for when hovering over buddies):

slider-tooltip-basic.png

However, what if you could associate a version control repository with a project? You could then display some more helpful messages from the log history during that specific period (filtered on your username). The extended tooltip below progressively discloses the log history.

slider-tooltip-detailed.png

Explore mode

First is statistical average hours worked per day, then comes the same thing only in month view (might exclude days that are weakly populated, like Sundays to avoid holes). Then there is that graph which could show what type of bird are you – early or late one. It would be possible to drill data down by year and category, but no more.

explore-mode-mockup.png

Report mode

mockup-report-mode.png

Among other things the taxonomy system discussed earlier allows the creation of very generic widgets for use with reporting, for an example take a look at the mockup of a possible reporting view below.

dashboard-widgets-mockup.png

Note how this is basically a representation of 4 individual vocabularies and their terms. This is not much more than a generic graph widget which displays data from a dataset generated from a SQL query.

Advanced features

Main entry field

The main entry field is the fastest way to use the application to add projects, actions, activities and track time. The main entry field is modal and supports the following modes:

Managing trigger rules

You can define trigger rules on a global or per project basis. When you enter a fact, Monkey will go through all related rules and execute those that match. Trigger rules allow you to automatically manipulate facts and safe you from having to manually type in repetitive information.

The rule below would allow you to always associate the term Python with the fact when you use the term Programming. This is quite handy because it's more intuitive to type the term Programming (which is an activity) but still allows you to properly track your experience working with particular languages.

   1 if "Programming" in fact.terms: fact.terms.add("Python")

Extras

GNOME Do plugin

New action

mockup-gnome-do-new-action.png

Track time

mockup-gnome-do-track-time.png

Android application

mockup-android-teaser.png

Overview

mockup-android-overview.png

Term view

mockup-term-view-slim.png

Requirements

General

Manage mode

Time mode

Edit mode

[...]

Report mode

Architecture

Overall architecture

overall_architecture.png

Architecturally significant decisions

Views

Logical

http://yuml.me/diagram/class/[Action] , [Project], [List], [Fact|start_time;end_time;interuption_time], [Activity], [Vocabulary], [Term]

Generated using yUML, source:

[Action] 
[Project]
[List]
[Fact|start_time;end_time;interuption_time]
[Activity]
[Vocabulary]
[Term]

Useful resources


CategorySpec CategoryProject


2024-10-23 10:59