Skip to content

Instantly share code, notes, and snippets.

@jaudriga
Created November 5, 2021 19:44
Show Gist options
  • Save jaudriga/cd323fa75397c76b1dd30861ef590302 to your computer and use it in GitHub Desktop.
Save jaudriga/cd323fa75397c76b1dd30861ef590302 to your computer and use it in GitHub Desktop.
JMAP Task Survey

Task System Survery

Introduction

JMAP (RFC8620 – JSON Meta Application Protocol) is a generic protocol for synchronizing data, such as mail, calendars or contacts, between a client and a server. It is optimized for mobile and web environments, and aims to provide a consistent interface to different data types and to improve interoperability. Data formats specified in JMAP standards might also help to improve data portability - easing data transfer between systems of different vendors.

JMAP for Tasks (ietf-jmap-tasks) extends JMAP with synchronization of task data. Its initial design is motivated by task management in groupware and webmail systems, which are the core targets of JMAP. However, while mail, contact and calendar functionality in those systems is relatively similar, there is more heterogeneity when it comes to tasks. Related to that, there is a more heterogeneous set of systems that implement some kind of task management beyond groupware/Webmail. The goal of this survey is to provide an overview about current task systems and identify potential gaps of the current JMAP Tasks data model for other use cases beyond typical Calendaring software. This survey focuses on Groupware systems, Kanban-style tools and bug tracking systems.

Kanban-style tools can be used to implement kanban to manage work. They typically have a board that contains buckets, which in turn contain cards/tasks. Kanban-style systems in this survey are: Microsoft Planner, Clickup, Factro, Nextcloud Deck, Trello and Zube.

Issue tracking systems are built for managing and maintaining lists of issues. These systems typically include features for documenting resource allocation, time accounting and priority management. While this survey only covers two bug tracking systems, Mantis and Jira, there are other types like help desk and service desk issue tracking systems. Bug tracking systems typically have projects as folders, which contain issues.

The following two sections are explanations of TaskList and Task JMAP objects and their properties, sorted by popularity. In case the Task or TaskList objects might not be sufficient to model a property, there is a small note in each section. Very uncommon properties will not be described in further detail.

TaskList

All task lists have a name. Some task lists support quite a few properties that are typically implemented in single tasks. Examples for such properties are: Progress, Priority, Due or Comments. In such a case they may be implemented as a parent Task with sub-tasks instead of implementing them as a TaskList.

Considering systems will choose to implement such folder objects as parent tasks, most popular properties should be covered by JMAP for Tasks. So far we have identified Max Tasks/Work and Comments as properties not currently present in JMAP for Tasks but observed in the wild.

Of those not currently present in JMAP for Tasks, properties specific to Kanban-style Systems are comments and progress. Folder objects of Issue tracking systems still have to be surveyed.

Property JMAP for Tasks Google Workplace Microsoft To Do Microsoft Planner OpenXChange Zimbra Remember The Milk Clickup Factro Nextcloud Deck Trello (free) Zube Total
Title name X X X X X X X X X X X 11
Color color X X X X X 5
Sort Order sortOrder X X X 3
Description description X X X 3
Role role X X 2
Comments Missing X X 2
Progress Task.progress/Missing X X 2
Max Tasks/Work Missing X X 2
Priority Task.priority/Missing X 1
Sub folders Missing X 1
Is Favorite Missing X 1
Enable Notifications Missing X 1
Member Group Missing X 1
Group By Missing X 1
Due Task.due/Missing X 1
Attachments Task.attachments/Missing X 1
Keywords Task.Keyword/Missing X 1
Cover Task.links/Missing X 1

Title "String":

  • Short description. Sometimes called "Name".

Color "String":

  • Color associated with a folder

Sort Order "UnsignedInt":

  • Some lists can be sorted

Description "String":

  • Long description. Usually no formatting.

Role "String":

  • Denotes special folder type like "Inbox", "Trash" or "Root"

Comments:

  • Some systems allow comments per folder.
  • A property like this does currently not exist in JMAP for Tasks. See Comments subsection in Tasks section below.

Progress:

  • In some systems the progress can be set on a folder-level.
  • It might be possible to implement task folder objects with task-level progress property as Task objects with children instead of TaskList objects. Same as progress in Tasks below.

Max Tasks/Work "Integer":

  • Some TaskLists can be configured to only allow a maximum amount of tasks or a maximum sum of estimated work over all its child objects.
  • A max tasks/work property like this currently does not exist in JMAP for Tasks.

Task

All tasks have in common: a title and an indicator for progress. Links to attachments or websites, a longer description and assignees are also quite common.

Popular properties that are not covered by JMAP for Tasks are currently Comments, History, Checklists, estimated amount of work, source of the task, task impact.

Of those not currently present in JMAP for Tasks, properties specific to Kanban-style Systems are comments and history. Effort estimation in an abstract way via complexity points has only been observed at Zube for now, but it is a common concept in Scrum. Issue tracking systems have in common: comments, history and impact.

Property JMAP for Tasks Google Workplace Microsoft To Do Microsoft Planner OpenXChange Zimbra Remember The Milk Clickup Factro Nextcloud Deck Trello (free) Zube Jira Mantis Total
Title title X X X X X X X X X X X X X 13
Progress progress X X X X X X X X X X X X X 13
Links links X X X X X X X X X X X X 12
Description description X X X X X X X X X X 10
Assignees attendees X X X X X X X X X X 10
Keywords keywords X X X X X X X X X 9
Priority priority X X X X X X X X X 9
Comments Missing X X X X X X X X X 9
Relations relatedTo X X X X X X X X 8
Due due/utcDue X X X X X X X X X 9
Start start/utcStart X X X X X X X 7
History Missing X X X X X X 7
Checklist Missing X X X X X X 6
Recurrences Recurrence Properties X X X X X 5
Alerts Alerts Properties X X X X X 5
Estimate estimatedDuration/Missing X X X X 4
Categories categories X X X X 4
Source Missing X X X 3
Percent Complete percentComplete X X 2
Type @type X X 2
Impact Missing X X 2
Locations locations X X 2
Additional information Missing X X 2
End progress + progressUpdated X 1
Cover links X 1
Risk Missing X 1
Pending Reason Missing X 1
Organizations Missing X 1
Urgency Missing X 1
Investigation Reason Missing X 1
Root Cause Missing X 1
Workaround Missing X 1
Resolution Missing X 1
Reproducibility Missing X 1
Profile Missing X 1

Title "String":

  • Short description. Sometimes called "Summary" or "Name".

Progress "String":

  • Also called "Status". In some systems this is as simple as "Done" or "Not done". There are various other observed states like "Not started", "In Progress", "Done/Completed", "Waiting (on someone else)", "Deferred", "Active", "Closed", "New", "Feedback", "Acknowledged", "Confirmed", "Assigned", "Resolved".
  • It might make sense to extend the Task object of JMAP for Tasks with additional values.

Links "Link":

  • Can point to a Blob or to a website with properties such as:
    • href: "String" URI (potentially to a blob)
    • title: "String" Description of resource
    • created: "UTCDateTime" When the blob was uploaded
  • It might make sense to extend JMAP for Tasks' Link data type with a property that displays when a blob was uploaded. Or add such a property to the JMAP Blob management extension ietf-jmap-blob

Description "String":

  • Long description. Sometimes supports some formatting.

Assignees "Id[Participant]":

  • List of assignees that this task is assigned to. May include people only watching the task.

Keywords "String[]":

  • Unstructured keywords or tags.
  • Also, sometimes they are a list of objects with:
    • title: "String"
    • color: "String"
  • keywords in JMAP for Tasks' are currently not connected to a color. It might make sense to change this.

Priority "Int" typically between 0 and 3:

  • It represents something like "None, Low, Medium, High", "Low, Medium, High" or "Low, Medium, High, Urgent". Also, things like "None, Low, Medium, High, Urgent, Immediate" were observed.

Comments

  • A Comment is typically an object with:
    • createdBy: "UserId"
    • dateSubmitted: "UTCDateTime" when the comment was submitted
    • dateEdited: "UTCDateTime" when the comment was last edited
    • message: "String" content
    • editHistory: Different versions of the comment since initial creation
    • deleted: "Boolean" comment was deleted
    • attachments: Comments quite often also contain attachments
  • A property like this does currently not exist in JMAP for Tasks.

Related To "String[Relation]":

  • A map of the UIDs of the related objects to information about the relation. A Relation object has features like the following:
    • relation: "String[Boolean]" identifies the relation such as "blocks", "parent", "child", "duplicate", "has duplicate" or "related"
  • The Relation data type in JMAP for Tasks is missing some additional keys to reflect all that. They could be: blocks / blocked by, clones / cloned by, duplicates / duplicated by, caused by / causes

Due "LocalDateTime/UTCDate":

  • when the task is due (sometimes only full-day supported)

Start "LocalDateTime/UTCStart":

  • when the task is supposed to start (sometimes only full-day supported)

History

  • A history of changes to the object.
  • A history property does currently not exist in JMAP for Tasks.

Checklist "Checklist":

  • An object with properties like:
    • name: "String"
    • checkItems: "CheckItem[]"
  • "CheckItem" are objects similar to simplified tasks with observed properties:
    • title: "String"
    • isComplete: "Boolean"
    • sortOrder: "UnsignedInt"
    • due: "UTCDateTime"
    • assignee: "UserId"
  • A "checklist" property does currently not exist in JMAP for Tasks.

Recurrence:

  • Recurrence is tied to the Due Date. Sometimes it is pretty simple (like every X day/week/month/year) and sometimes comes close to the complexity of its definition in JSCalendar.

Alerts:

  • Some systems support only a single alert/reminder, some multiple.

Estimate "Duration" or "Integer":

  • Estimated for amount of work required can be measured in duration or more abstract measures like complexity points.
  • The "estimate" property "estimatedDuration" of JMAP for Tasks is currently of "Duration" type. It might make sense to add a property to measure estimated amount of work in a more abstract way.

Categories "String[Boolean]":

  • Typically structured or preconfigured. Could also be connected to a color like above's Keywords.

Percent complete "Unsigned Int":

  • Typically a value between 0 and 100.

Type "String":

  • Some systems have different types of tasks.

Impact "String":

  • Impact or severity of task with values like: extensive, significant, moderate, minor, feature, trivial, text, tweak, major, crash, block
  • An impact property does currently not exist in JMAP for Tasks.

Locations "Id[Location]":

  • Location with typically a name and an address.

Source "String":

  • The source of the task like "Web app", "Mobile client" or "Email"
  • A source property does currently not exist in JMAP for Tasks.

Conclusion

This survey stresses our initial assumption of heterogeneity across task systems. Of the systems observed, there was none that supported all properties of JMAP for Tasks. That means, even within the groupware/webmail scope, we need to deal with the fact that some servers (and clients) will not support all functionality (e.g. task recurrence). Other system types seem close enough, so it makes sense to address them in JMAP.

It might make sense to separate JMAP for Tasks into separate parts, so developers would be able to navigate more easily through the spec when choosing which parts to implement for their own use cases. Such extensions would need to cover two types of things:

  • Specific simple data properties supported by some systems (e.g., in bug trackers)
  • More complex features that some systems support (e.g., checklists, comments or recurrences)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment