neithere

Python, Music, Laziness

OrgTool

Concept, with zzr (UPD: in development).

what
Organizer. A flexible information management platform.
when
Pre-alpha
url
http://bitbucket.org/neithere/orgtool/
code
http://bitbucket.org/neithere/orgtool/src/
technologies
Python, Tool, Doqu

Goal

A personal information manager (PIM) with a single dashboard for all tasks, without the need to manually synchronize it with other tools and/or constantly switch contexts.

Principles

  1. Person-oriented
  2. Methodology agnostic
  3. Distributed collaboration
  4. Easy import/export

Principles, explained

1. Person-Oriented

The software collects everything a person needs to stay organized. The person can see on the single page all his/her tasks, reference materials and projects (s)he is involved into.

  1. This principle is in contrast with project-centric, company-centric or methodology-centric approaches when user data is spread around many mutually incompatible systems and the user has to constantly switch between contexts and therefore lose focus.
  2. This principle is also in contrast with provider-oriented approach when a single service provider stores all user work-related data (email, tasks, documents) and provides its own tools for data management. While this may seem convenient, a) the user is bound to the service provider and sometimes does not really own his/her data, i.e. is unable to retrieve data in a format suitable for data reuse; b) the tools may not match user needs but no reasonable way to modify these tools is provided; c) privacy issues may raise.

Users should be able to install the organizer software wherever they want, modify it the way they want and enjoy privacy.

2. Methodology Agnostic

There are various methodologies for project- and time-management. To name few: Getting Things Done (GTD), Extreme Programming (XP), Scrum. Each methodology defines its own philosophy, scope, values, abstractions (models), roles and processes. None of them can be considered universal: for personal use GTD is perfect and SCRUM is irrelevant; in software project management GTD is rather weak (and irrelevant for teamwork) but SCRUM is just fine. But both GTD and SCRUM deal with the same core concepts: project, goal, action. Moreover, every SCRUM-driven project is a wrapper for product owner’s goals and developers’ goals/actions. It provides the common ground for personal activity scopes. The product owner wants to see if his goals are completed; developers want to see what next actions they’ve got. The SCRUM wrapper is essential for planning but may not be the best tool to track goals and actions as integral parts of someone’s personal life (and we all are first of all individuals, and then developers or investors).

A universal organizer should not impose a methodology; on the contrary, it should support all of them. This can be achieved by using a basic set of workflow-related models (the core) and pluggable applications with key models inherited from the PIM base (the «perspectives», like in Eclipse).

3. Distributed Collaboration

We could implement this PIM as a single service with web interface. But consider these use cases:

  1. John wants to work offline with a GUI (e.g. desktop Django+PyQt+SQLite package)
  2. John works for a company with its own organizer repository. John wants to pull new tasks from that repository (to his desktop) and push changes back.
  3. John wants to share a calendar item with Mary; she accepts it (adds to her calendar), edits the time and saves; John now sees the updated version in his calendar.

This leads us to the idea of distributed event/goal/etc. data storages; each repository contains unique private or public data and caches some data from remote storages. This is a bit like DVCS with the exception that the organizers should cache only some data from remote repositories. Also, more granular (per-instance, not even per-model) access is necessary.

4. Easy Import/Export

In order to be comprehensive, the organizer should provide a small framework to write import/export scripts the easiest possible way. Of course the developer will have to handle remote API but probably in the form of callbacks and/or metadata.