From 1113f9f921a1fdac1767018458adaaccb327af99 Mon Sep 17 00:00:00 2001 From: richard Date: Sat, 28 Jul 2001 01:40:04 +0000 Subject: [PATCH] added more documentation git-svn-id: http://svn.roundup-tracker.org/svnroot/roundup/trunk@113 57a73879-2fb5-44c3-a270-3262357dd7e2 --- doc/images/edit.gif | Bin 0 -> 12962 bytes doc/images/hyperdb.gif | Bin 0 -> 12728 bytes doc/images/roundup-1.gif | Bin 0 -> 40721 bytes doc/images/roundup.gif | Bin 0 -> 24819 bytes doc/overview.html | 962 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 962 insertions(+) create mode 100644 doc/images/edit.gif create mode 100644 doc/images/hyperdb.gif create mode 100644 doc/images/roundup-1.gif create mode 100644 doc/images/roundup.gif create mode 100644 doc/overview.html diff --git a/doc/images/edit.gif b/doc/images/edit.gif new file mode 100644 index 0000000000000000000000000000000000000000..82100d69ab30830e95cd2e10adc561007971909c GIT binary patch literal 12962 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 Y@yqfD?jmK(cu0p69U5g32ypoS0P6I&;{X5v literal 0 HcmV?d00001 diff --git a/doc/images/hyperdb.gif b/doc/images/hyperdb.gif new file mode 100644 index 0000000000000000000000000000000000000000..94d602344400543b6a9d3eebfdcf6e72b2fcb625 GIT binary patch literal 12728 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 literal 0 HcmV?d00001 diff --git a/doc/images/roundup-1.gif b/doc/images/roundup-1.gif new file mode 100644 index 0000000000000000000000000000000000000000..348acb2c8aa4e2239f0ac8a0d261382a81a42f22 GIT binary patch literal 40721 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 ZkhGcN0p3EgPkO`Vgh#PkrHKfe{{z8riB13j literal 0 HcmV?d00001 diff --git a/doc/overview.html b/doc/overview.html new file mode 100644 index 0000000..a653114 --- /dev/null +++ b/doc/overview.html @@ -0,0 +1,962 @@ + + +Roundup: an Issue-Tracking System for Knowledge Workers + + + + + + + + + + + + + + + + + +
+ +[Software Carpentry logo] + + + + + + +
+ +[ACL Logo] + +

+ +[CodeSourcery Logo] + +
+
+Copyright (c) 2000 Ka-Ping Yee. This material may +be distributed only subject to the terms and conditions set forth in +the Software Carpentry Open Publication License, which is available at: +
+http://www.software-carpentry.com/openpub-license.html +
+
+ +


+ + +

Roundup

+

An Issue-Tracking System for Knowledge Workers

+

Ka-Ping Yee

+

lfw discorporated
+ping@lfw.org

+ + +

+ +


+

Contents

+ + + + + +


+

Overview

+ +

We propose an issue-tracking system called +Roundup, which will manage a number of issues +(with properties such as "description", "priority", and so on) +and provide the ability to +(a) submit new issues, +(b) find and edit existing issues, +and +(c) discuss issues with other participants. +The system will facilitate communication +among the participants by managing discussions and +notifying interested parties when issues are edited. + +

This design draws on experience from +an existing +implementation which we will refer to +as "the Roundup prototype". +The graphical interface we have in mind will resemble + +the main display of the prototype. + +

+ + + +


+

Background

+ +

A typical software project requires the management of +many tasks, usually distributed among several collaborators. +In fact, any project team +could use a tool for sorting out and discussing all the +relevant issues. A common approach is to set up some kind +of "to-do" list that people can share. + +

However, to address the overall problem we need much more +than just a shared to-do list; we need to +manage a growing body of knowledge and experience to help a +team collaborate effectively on a project. The issue-tracking +tool becomes a nexus for communication: the Grand Central +Station of the group intelligence. + +

The primary focus of this design is to help +developers work together well, not to provide a customer +service interface to the developers. This is not to say that +the design is to be made unsuitable for customers to use. +Rather, it is assumed that many of the same qualities +that are good for supporting development (see below) +are also good for non-developers using the system. +Additional niceties +for providing a safe or simplified interface to clients are +intentionally deferred for later consideration. + +

A good issue-tracking system should have at least the +following properties: + +

+With a nod to the time-honoured computer science tradition +of "filling in the fourth quadrant", we note that +there are really four kinds of information flow +going on here. The three mentioned qualities +really address the first three quadrants of this 2-by-2 matrix, +respectively: + +

    +
  1. User push: a user submits information to the system. +
  2. User pull: a user queries for information from the system. +
  3. System push: the system sends information out to users. +
  4. System pull: the system solicits information from users. +
+ +An example of the fourth kind of flow is voting. +Voting isn't described in this design, +but it should be noted as a potential enhancement. +
+ +

    +
  1. Low barrier to participation. +The usefulness of the tool depends entirely on the +information people contribute to it. It must be made +as easy as possible to submit new issues and contribute +information about existing issues.

    + +

  2. Straightforward navigation. +It should be easy for users to extract information they need +from the system to direct their decisions and tasks. +They should be able to get a decent overview of +things as well as finding specific information when +they know what they're after.

    + +

  3. Controlled information flow. +The users must have control over how much information and +what information they get. A common flaw of some issue-tracking +systems is that they inundate users with so much useless +e-mail that people avoid the system altogether. +
+
+ +


+

Guiding Principles

+ +

Simplicity. It is a strong requirement +that the tool be accessible and understandable. It should +be fairly obvious what different parts of the interface do, +and the inner mechanisms should operate in ways that most +users can easily predict. + +

Efficiency. +We aim to optimize for minimum effort to do the most common +operations, and best use of resources like screen real estate +to maximize the amount of information that we summarize and present. + +

Generality. We try to avoid making +unnecessary assumptions that would restrict the applicability +of the tool. For example, there is no reason why one might +not also want to use this tool to manage a design process, +non-software projects, or organizational decisions. + +

Persistence. We +prefer hiding or reclassifying information to deleting it. +This helps support the collection of statistics later. +If records are never destroyed, there is little danger +in providing access to a larger community, and logging yields +accountability, which may encourage better behaviour. + +


+

+Okay, enough ranting. Let's get down to business. +
+

Data Model

+ +

Roundup stores a number of items, each of +which can have several properties and an associated discussion. +The properties can be used to classify or search for items. +The discussion is a sequence of e-mail messages. +Each item is identified by a unique number, and has +an activity log which +records the time and content of edits made on its properties. +The log stays fairly small since the design intentionally +provides only small data types as item properties, and +encourages anything large to be attached to +e-mail where it becomes part of the discussion. +The next section explains how items are organized. + +

The Hyperdatabase

+ +

+In my opinion, forcing +items into fixed categories is one of the most +serious problems with the Roundup prototype. +The hyperdatabase is an experimental attempt to +address the problem of information organization, +whose scope goes beyond just Roundup. +
+ +Often when classifying information we are +asked to select exactly one of a number of categories +or to fit it into a rigid hierarchy. Yet things +only sometimes fall into one category; often, +a piece of information may be related to several concepts. + +For example, forcing each item into a single topic +category is not just suboptimal but counterproductive: +seekers of that +item may expect to find it in a different category +and conclude that the item is not present in the +database -- which has them worse off +than if the items were not categorized at all. + +

Some systems try to alleviate this problem by +allowing nodes to appear at multiple locations +in a tree, as with "aliases" or "symbolic links" in +a filesystem, for example. This does help somewhat, +but we want to be even more flexible +by allowing the +organization of nodes into sets that may freely +intersect. Rather than putting each node at exactly +one place in an overall "grand scheme", a node can +belong to as many sets as are appropriate. + +If we choose to represent the sets themselves as nodes +and set membership as a link between nodes, +we're now ready to present the definition of a +hyperdatabase. + +

+Perhaps it's too pretentious a name? +You could say this is just like an object database. +The hyperdatabase is hardly much of an invention; the +intent is merely to emphasize querying on links +rather than properties. +(I haven't heard of this being done with +object databases before, but plead ignorance if +there's already a good name for this idea.) +
+A hyperdatabase is a collection of nodes +that may be hyperlinked to +each other (hence the name "hyperdatabase"). +Each node carries a collection of key-value pairs, +where some of the values may be links to other nodes. +Any node may have an arbitrary number of outgoing and +incoming links. Hyperdatabases are able to efficiently +answer queries such as "what nodes link to this node?" +and "what nodes does this node link to?" + +

Rationale

+ +

There are several reasons for building our +own kind of database for Roundup rather than using an existing one. + +Requiring the installation of a full-blown third-party +SQL database system would probably deter many potential +users from attempting to set up Roundup; +yet a real relational database would be too +complicated to implement on our own. + +On the other hand, a hyperdatabase can be implemented fairly easily +using one of the Python DBM modules, so we can +take the "batteries-included" approach and provide it +as part of the system. It's easier to build and understand +than a true relational database (in accordance with our guiding +principle of simplicity), but provides +most of the query functionality we want. + +

A hyperdatabase is well suited for finding the intersection +of a number of sets in which items belong. We expect that +most of the queries people want to do will be of this +form, rather than complicated SQL queries. For example, a +typical request might be +"show me all critical items related to security". +The ability to store arbitrary key-value pairs and links +on nodes gives it more flexibility than an RDBMS. + +Users are not going to be making thousands of queries +per second, so it makes sense to optimize for simplicity +and flexibility rather than performance. + +

+ + +

Roundup's Hyperdatabase

+ +

For our application, we store each item as a node in a +hyperdatabase. The item's properties are stored +as key-value pairs on its node. +Four types of properties are allowed: +string, date, +choice, and reference. + +

The string type is for short, free-form strings. +String properties are not intended to contain large +amounts of text, and it is recommended that they be presented +as one-line fields to encourage brevity. + +

The date type is for calendar dates and times. + +

The choice type denotes a single selection +from a number of options. A choice property +entails a link from the node possessing the property to +the node representing the chosen option. + +

The reference type is for a list of links to any +number of other nodes in the in the database. A reference +property, for example, can be used to refer to related items +or topic categories relevant to an item. + +

For Roundup, all items have five properties +that are not customizable: + +

    +
  • a string property named description +
  • a reference property named superseder +
  • a reference property named nosy +
  • a date property named creation +
  • a date property named activity +
+ +

The description property is a short +one-line description of the item. +The detailed description can go in the +first e-mail message of the item's discussion spool. + +

The superseder property is used to +support the splitting, joining, or replacing of items. +When several items need to be +joined into a single item, all the old items +link to the new item in their superseder +property. +When an item needs to be split apart, the item +references all the new items in its superseder +propety. +We can easily list all active items just by checking +for an empty superseder property, and trace +the path of an item's origins by querying the hyperdatabase +for links. + +

The nosy property contains a list of +the people who are interested in an item. This +mechanism is explained in +the section on Nosy Lists. + +

The creation property records the +item's creation time. The activity +property records the last time that the item was edited or +a mail message was added to its discussion spool. These two +properties are managed by Roundup and are not available to +be edited like other properties. + +

Users of the system are also represented by nodes in the +hyperdatabase, containing properties +like the user's e-mail address, login name, and password. + +

The Default Schema

+ +

+Roundup could be distributed with a few +suggested schemas for different purposes. +One possible enhancement to the +software-development schema is +a reference property +named implements for connecting +development items to design requirements which +they satisfy, which should +be enough to provide basic support for +traceability. +Clearly there is also potential for adding +properties for related source files, check-ins, +test results, regression tests for resolved items, +and so on, though these have not yet been +sufficiently well thought out to specify here. +
+

It is hoped that the hyperdatabase together with the +specializations mentioned above for Roundup will be +applicable in a variety of situations +(in accordance with our guiding principle of generality). + +

To address the problem at hand, we need +a specific schema for items applied particularly to software development. +Again, we are trying to keep the schema simple: too many +options make it tougher for someone to make a good choice. +The schema is written here in the same form that it would +appear in a configuration file. +
+ +

+    fixer = Reference()             # people who will fix the problem
+
+    topic = Reference()             # relevant topic keywords
+
+    priority = Choice("critical",   # panic: work is stopped!
+                      "urgent",     # important, but not deadly
+                      "bug",        # lost work or incorrect results
+                      "feature",    # want missing functionality
+                      "wish")       # avoidable bugs, missing conveniences
+
+    status = Choice("unread",       # submitted but no action yet
+                    "deferred",     # intentionally set aside
+                    "chatting",     # under review or seeking clarification
+                    "need-eg",      # need a reproducible example of a bug
+                    "in-progress",  # understood; development in progress
+                    "testing",      # we think it's done; others, please test
+                    "done-cbb",     # okay for now, but could be better
+                    "resolved")     # fix has been released
+
+ +

The fixer property assigns +responsibility for an item to a person or a list of people. +The topic property places the +item in an arbitrary number of relevant topic sets (see +the section on Browsing and Searching). + +

As previously mentioned, each item gets an activity log. +Whenever a property on an item is changed, the log +records the time of the change, the user making the change, +and the old and new values of the property. This permits +the later gathering of statistics (for example, the average time +from submission to resolution). + +

We do not specify or enforce a state transition graph, +since making the system rigid in that fashion is probably more +trouble than it's worth. +Experience has shown that there are probably +two convenient automatic state transitions: + +

    +
  • from unread to chatting +when e-mail is written about an item +
  • from testing to resolved +when a new release of the software is made +
+ +Beyond these, in accordance with our principle of generality, +we allow access to the hyperdatabase +API so that scripts can automate transitions themselves or +be triggered by changes in the database. + +


+

User Interface

+ +

Roundup provides its services through two main interfaces: +e-mail and the Web. +This division is chosen to optimize the most common tasks. + +

E-mail is best suited for +the submission of new items since most people are most comfortable +with composing long messages in their own favourite e-mail client. +E-mail also permits them to mention URLs or attach files relevant +to their submission. Indeed, in many cases people are already +used to making requests by sending e-mail to a mailing list +of people; they can do exactly the same thing to use Roundup +without even thinking about it. +Similarly, people are already +familiar with holding discussions in e-mail, and plenty of +valuable usage conventions and software tools already exist for that medium. + +

The Web, on the other hand, is best suited for summarizing +and seeking information, because it can present an interactive +overview of items. Since the Web has forms, it's also +the best place to edit items. + +

Submission and Discussion

+ +

+Nosy lists have actually been tried in practice, +and their emergent properties have +turned out to be very effective. +They are one of the key strengths of the Roundup prototype, +and often cause me to wonder if all mailing lists ought to work this way. +Roundup could even replace Hypermail. +
+ +

The system needs an address for receiving mail +and an address that forwards mail to all participants. +Each item has its own list +of interested parties, known as its nosy list. +Here's how nosy lists work: + +

    +
  1. New items are always submitted by sending an e-mail message +to Roundup. The "Subject:" field becomes the description +of the new item. +The message is saved in the mail spool of the new item, +and copied to the list of all participants +so everyone knows that a new item has been added. +The new item's nosy list initially contains the submitter. + +
  2. All e-mail messages sent by Roundup have their "Reply-To:" +field set to Roundup's address, and have the item's +number in the "Subject:" field. Thus, any replies to the +initial announcement and subsequent threads are all received +by Roundup. Roundup notes the item number in the "Subject:" +field of each incoming message and appends the message +to the appropriate spool. + +
  3. Any incoming e-mail tagged with an item number is copied +to all the people on the item's nosy list, +and any users found in the "From:", "To:", or "Cc:" fields +are automatically added to the nosy list. Whenever a user +edits an item's properties in the Web interface, they are +also added to the nosy list. +
+ +

The effect +is like each item having its own little mailing list, +except that no one ever has to worry about subscribing to +anything. Indicating interest in an issue is sufficient, and if you +want to bring someone new into the conversation, all you need to do +is Cc: a message to them. It turns out that no one ever has to worry +about unsubscribing, either: the nosy lists are so specific in scope +that the conversation tends to die down by itself when the issue is +resolved or people no longer find it sufficiently important. + +

Each nosy list is like an asynchronous chat room, +lasting only a short time (typically five or ten messages) +and involving a small group of people. +However, that +group is the right group of people: +only those who express interest in an item in some way +ever end up on +the list, so no one gets spammed with mail they +don't care about, and no one who wants +to see mail about a particular item needs to be left +out, for they can easily join in, and just as easily +look at the mail spool on an item to catch up on any +messages they might have missed. + +

We can take this a step further and +permit users to monitor particular topics or +classifications of items +by allowing other kinds of nodes to +also have their own nosy lists. +For example, a manager could be on the +nosy list of the priority value node for "critical", or a +developer could be on the nosy list of the +topic value node for "security". +The recipients are then +determined by the union of the nosy lists on the +item and all the nodes it links to. + +

Using many small, specific mailing lists results +in much more effective communication than one big list. +Taking away the effort of subscribing and unsubscribing +gives these lists the "feel" of being cheap and +disposable. + +The transparent capture of the mail spool attached to each +issue also yields a nice knowledge repository over time. + + +

Editing

+ +

+ +Since Roundup is intended to support arbitrary user-defined +schema for item properties, the editing interface must be +automatically generated from the schema. The configuration for +Roundup will include a template describing how to lay out the +properties to present a UI for inspecting and editing items. +For example: + +

+    <table width="100%">
+    <tr><td align=right>Description:</td>
+        <td><?property description size=70></td></tr>
+    <tr><td align=right>Status:</td>
+        <td><?property status></td></tr>
+    </table>
+
+ +

To display the editing form for an item, Roundup substitutes +an HTML form widget for each <?property ...> +tag, and transfers attributes +(such as size=70 in the above example) +from the processing tag to the form widget's tag. +Each type has its own appropriate editing widget: +

    +
  • string properties appear as text fields +
  • date properties appear as text fields +
  • choice properties appear as selection lists +
  • reference properties appear as multiple-selection lists +with a text field for adding a new option +
+ +

We foresee the use of custom date fields for things like deadlines, +so input fields for date properties should support some +simple way of specifying relative dates (such as "three weeks from now"). + +

The superseder property is a special case: +although it is more efficient to store a superseder +property in the superseded item, it makes more sense to provide +a "supersedes" edit field on the superseding item. So we need +a special widget on items for this purpose (perhaps something +as simple as a text field containing a comma-separated list of +item numbers will do). Links in the superseder property +should appear on both the superseding and superseded items to +facilitate navigating an item's pedigree. + +

After the editing widgets, the item inspection page shows +a "note" text box and then a display of the messages in the +discussion spool, like the Roundup prototype. This field +lets you enter a note explaining your change when you edit the +item, and the note is included in the notification message that +goes out to tell the interested parties on the nosy list of +your edits. + +

Browsing and Searching

+ +

The ideal we would like to achieve is to make searching as +much like browsing as possible: the user simply clicks about +on things that seem interesting, and the information narrows +down comfortably until the goal is in sight. This is preferable +to trying to digest a screen filled with widgets and buttons +or entering a search expression in some arcane algebraic syntax. + +

+Though the generation of each page amounts to a database query, +so that the underlying mechanism is still a series of queries and +responses, the user interface never separates the query from +the response, so the experience is one of stepwise +refinement. +
+While a one-shot search may be appropriate when you're +looking for a single item and you know exactly what you want, it's +not very helpful when you want an overview of +things ("Gee, there are a lot more high-priority items than +there were last week!") or trying to do comparisons ("I have +some time today, so who is busiest and could most use some help?") +
+ +

The browsing interface presents filtering +functionality for each of the properties in the schema. As with +editing, the interface is generated from a template +describing how to lay out the properties. +Each type of property has its own appropriate filtering widget: +

    +
  • string properties appear as text fields supporting +case-insensitive substring match +
  • date properties appear as a text field with an +option to choose dates after or before the specified date +
  • choice properties appear as a group of +selectable options +(the filter selects the union of the sets of items +associated with the active options) +
  • reference properties appear as a group of +selectable options +(the filter selects the intersection of the sets of items +associated with the active options) +
+ +

For a reference property like topic, +one possibility is to show, as hyperlinks, the keywords whose +sets have non-empty intersections with the currently displayed set of +items. Sorting the keywords by popularity seems +reasonable. Clicking on a keyword then narrows both the list of items +and the list of keywords. This gives some of the feel of walking +around a directory tree -- but without the restriction of having +to select keywords in a particular hierarchical order, and without +the need to travel all the way to the leaves of the tree before +any items are visible. + +

Below the filtering form is a listing of items, with their +properties displayed in a table. Rows in the table can also be +generated from a template, as with the editing interface. +This listing is the central overview of the system, and it +should aim to maximize the density of +useful information in accordance with our guiding principle of +efficiency. +For example, +Bugzilla +initially displays seven or eight items of the index, but only +after the user has +waded +through +three +bewildering +screens of +form widgets. +Jitterbug can't +even fit any items at all in the first screenful, as it's +taken up by artwork and adminstrative debris. In contrast, +in the +Roundup prototype, +25 high-priority issues are immediately visible, with +most of the screen space devoted to their descriptions. +Colour indicates +the status of each item to help the eye sift through the index quickly. + +

In both Jitterbug and Bugzilla, items are sorted by default by ID, +a meaningless field. Sorting by ID puts the issues in order by +ascending submission date, which banishes recent issues far away +at the bottom of the list. +The Roundup prototype sorts items +in sections by priority, and then within sections by the date +of last activity. This reveals at a glance where discussion is +most active, and provides an easy way for anyone to move an issue +up in the list. + +

The page produced by a given set of browsing options constitutes +a view. The options should all be part of the query +parameters in the URL so that views may be bookmarked. A view +specifies: + +

    +
  • search strings for string properties +
  • date ranges for date properties +
  • acceptable values for choice properties +
  • required values for reference properties +
  • one or more sort keys +
  • a list of properties for which to display filtering widgets +
+ +

On each sort key there is the option to use sections -- that is, +instead of making the property's value a column of the table, each +possible value for the property +is displayed at the top of a section and all the items having +that value for that property are grouped underneath. This avoids +wasting screen space with redundant information. + +

We propose that our default view should be: + +

    +
  • all options on for priority and fixer +
  • all options on except "resolved" for status +
  • no options on for topic +
  • primary sort by priority in sections +
  • secondary sort by decreasing activity date +
+ +

The starting URL for Roundup should immediately present the listing of +items generated by this default view, with no +preceding query screen. + +


+

Development Plan

+ +

The hyperdatabase is clearly a separable component which +can be developed and tested independently to an API specification. + +

As soon as the API to the hyperdatabase is nailed down, +the implementation of the Roundup database layer +on top of the hyperdatabase can begin. +(This refers to the data types and five fixed properties +specific to Roundup.) This layer can also be tested separately. + +

When the interface to the Roundup hyperdatabase is ready, +development can begin on the user interface. The mail handler +and the Web interface can be developed in parallel and mostly +independently of each other. + +

The mail handler can be set up for testing fairly easily: +mail messages on its standard input can be synthesized; +its output is outgoing mail, which can be +captured by replacing the implementation of the +"send mail" function; and its side effects appear in the +hyperdatabase, which has a Python API. + +

The Web interface is not easily testable in its entirety, +though the most important components of it can be unit tested, +such as the component that translates a view specification +into a list of items for display, and +the component that performs replacements on templates +to produce an editing or filtering interface. + +


+

Open Issues

+ +

The description of the hyperdatabase above avoids some +issues regarding node typing that need to be better specified. +It is conceivable that eventually Roundup +could support multiple kinds of items with their own schemas. + +

To permit integration with external tools, it is probably +a good idea to provide a command-line tool that exposes the +hyperdatabase API. This tool will be left for a later phase +of development and so isn't specified in detail here. + +

Generating the user interface from a template is like +applying an XSL stylesheet to XML, and if there's a standard +Python module for performing these transformations, we could +use XML instead. + +

More thinking is needed to determine the best filtering +interface for reference properties. +The proposed interface works well for topic keywords, but +it isn't clear what to do when there are too many keywords +to display them all. + +

There has been a variety of reactions to the hyperdatabase +from reviewers: some like it, some are neutral, and some +would prefer a "standard" RDBMS solution. +For those in the latter camp, note +that it's still possible to build the Roundup database layer +around an RDBMS if we really need to. The rest of the design, in +particular the "nosy list" mechanism, remains intact. + +

The possibility of malice by registered users has been disregarded. +The system is intended to be used by a co-operative group. + +

This design tries to address as many as possible of the +suggested requirements mentioned on +the contest page: + +

    +
  • configuring states: Edit the schema. +
  • setting state transition rules: We don't enforce any rules. +
  • assigning responsibility: Set the fixer property. +
  • splitting and joining: Use the superseder property. +
  • hiding information: Add +a property and a pre-defined view that filters on it. +
  • secure protocols: Naturally HTTPS would be nice, though it's largely +a webserver configuration issue; secure e-mail is not addressed. +
  • archiving old issues: Tag them with a property. +
  • identifying repeated issues: Use the superseder property. +
  • connecting state changes to external operations: We provide an +API to the database and the notification mechanism so it can be scripted. +
  • non-Latin alphabets: Unicode in Python 1.6 will handle +this for string properties, and we can leverage existing standards for +internationalizing e-mail messages. +
  • images and other binaries: Attach them to e-mail messages. +
  • inspecting item state: Use the editing interface. +
  • translation between system-dependent formats: This is not addressed. +
  • performing searches: Use the browsing and filtering interface. +
  • collecting statistics: Information is gathered in the activity log, +though tools to summarize it are not described here. +
+ +


+

Summary

+ +

Roundup is an issue-tracking system that also functions as +a communications center and a knowledge repository. It combines +the strengths of e-mail and the Web to try to provide the best +possible user interaction. + +

    +
  • The submission and discussion of items by e-mail, permitting +participants to use an easy and familiar tool, achieves our goal +of low barrier to participation. +
  • The generic link-based structuring of data and use of +incremental filtering rather than one-shot querying makes for +straightforward navigation. +
  • The use of nosy lists (a powerful replacement for +e-mail discussion lists) to manage communication on +a fine-grained level provides controlled information flow. +
+ +

The use of a "hyperdatabase" as the core model for +the knowledge repository gives us the flexibility to extend +Roundup and apply it to a variety of domains by +providing new item schemas and user-interface templates. + +

Roundup is self-contained and easy to set up, requiring +only a webserver and a mailbox. No one needs to be root to +configure the webserver or to install database software. + +

This design is based on an existing deployed +prototype which has proven its strengths and revealed its +weaknesses in heavy day-to-day use by a real development team. + +


+

Acknowledgements

+ +

My thanks are due to +Christina Heyl, Jesse Vincent, Mark Miller, Christopher Simons, +Jeff Dunmall, Wayne Gramlich, and Dean Tribble +for reviewing this paper and contributing their suggestions. + +


+ +

+ + + + + + + + + +
   [Home]      [FAQ]      [License]      [Rules]      [Resources]      [Archives]   
+
+ +


+
+Last modified 2001/04/06 11:50:59.9063 US/Mountain +
+ -- 2.30.2