Archive for February, 2009|Monthly archive page

Teamwork 4.0.8330: print Gantts and a few little things

Print preview of a Gantt.
Print preview of a Gantt.

This release contains some feature improvements and bug fixes. Also the user guide has been updated. Download the release here.

Features
- task Gantts are now “web printable”
- distributing a sample iframe parametrical portlet (extended the user guide with instructions) which is a rough way of getting anything visibleon your dashboard

Bugs
- fixed a bug on agenda filtering
- fixed bug on updated issue notifications
- fix on PDF names on save
- fixed multiple bugs in Basecamp import

Managing with lists vs. managing with trees

listOrTreeThe field of “software aided project management”, which should by now more aptly named “web based work management” today can be divided by two basically different approaches to management: list based, and tree based. There are also other approaches, like “let’s just use a blog/a wiki”, or “e-mail is the way to go”, but I believe these to be simply a bit too naive.

The reference application for “managing with lists” is Basecamp, an excellent “work management” application built by 37Signals, which became famous by building RubyOnRails, a web development framework.

Basecamp is considered a prime example of a “project management 2.0″ application, changing the old approach to the problem: purely online (but this is not such great news), and based on the idea of to-do list, with a very very very simple user interface. This in contrast with more classical Gantt-based planning. It also looks so simply done that it has also uncountably many clones, see e.g. this discussion and links, but the original is probably better, and keeps improving.

Before releasing Teamwork 4, we studied (among many other usability books) Defensive Design for the Web: How to improve error messages, help, forms, and other crisis points, a book still by 37Signals, which gave us some good ideas which you see for example in Teamwork 4 error page.

Teamwork could hardly be more different from Basecamp, as we disagree on the basic philosophy: we still think that the good way to model management problems is with the project tree / assignment  notion (though not necessarily presented through a Gantt graph), and not with to-do lists.  We share with 37Signals the idea that the user interface should be as simple as possible, and that usability concerns should be at the center of development. But we also believe that usability is not necessarily synonymous with poverty of features and integrations.

The difference between lists and tree based management may seem misleadingly small: notice that for example it touches on whether the order of things to be done is just as the order in the list, or is linked to dates. There are far-reaching consequences of this assumption: it is difficult to imagine how ordered lists can be the source of a shared organization, instead of being the result of a shared planning tree of events and dates. These results in completely different applications: Basecamp with a universal dashboard, Teamwork with dates, projects, and different views for different users. And it would be a big mistake to think that one can be somehow transformed in the other.

You may ask: why can’t I have both? In fact, both applications do some of both approaches, but it is a general philosophical choice that has been done: Basecamp has a minimal modeling structure, Teamwork tries to keep it maximal, giving all options to the users. If you are familiar with Teamwork, “trees” (projects) do indeed “manage” lists (issues and to-do’s), but you can’t do without the central notion of assignment, linking “branches” to “leafs” (people).
listOrTreeBlossom

Teamwork also tries to embrace the existing IT infrastructure (so it can become complex to configure), and hence it is not necessarily an online service: not a purely “web 2.0″ service in this.

On how to improve usability, without impoverishing the model, see for example this blog post. Also if you want to try switching from lists to trees, Teamwork provides an import from Basecamp, see the user guide, section “Escape from Basecamp”.

So, between lists and trees, the choice is yours…

The name and logo for Basecamp and 37signals are registered trademarks of 37signals, LLC. Teamwork and Open Lab are in no way affiliated to Basecamp or 37signals, LLC.

Smarter search and recent object functionality

Here we examine a technique to improve usability in complex applications by introducing smarter search and “recent objects” functionalities. As usability becomes more and more a crucial feature of applications, helping users with full-text search and recent object lists may still prove insufficient. You may need to go beyond these features, by having a way to keep track of “most used” objects, which will help to:

- guess what you are looking for

- find what you are searching for

The problem

Lets see an example.

In these weeks you are working on items A, B and C of your favorite web application. Friday, you actually briefly worked on X, Y and Z before going home, as you had these for quite a while in the bottom of your to-do list. Now, you get back to work on Monday, and what you have in your “recent objects” list? Well, X, Y,Z. Useless. But you have full-text search. You search for the name of A, which actually hundreds of other objects share, and which maybe there are far more occurrences than in A, even if nobody has been using them for quite a while, so they fill results on top of your A. Useless. There is no easy way to get back to A: something here is not working.

This is a usability problem; in order to make your application more helpful, you should somehow keep track of what is being used most often by the users. How to do that? A complete answer is not trivial: as often happens in usability problems, what looks simple from the point of view of the user, is actually complex to solve and render. In the end, all complexity should be hidden, but the solution is not trivial.

Area of focused interest
Area of focused interest in time.

What is relevant to you is not just stuff that you occasionally visited, but say projects or documents to which you recently returned to again and again: you need to keep in focus a window of attention. See it in this way: you want the projects or documents to which you are frequently linking to. You need a sort of personal page rank.

Recording hits

Well, the way to go is record what are doing; you have to record it somehow as a parallel, probably de-normalized table of “hits”, keeping it very simple, as you will probably get quickly really a lot of records there.

A sample hit collector class in Java/Hibernate
A sample hit collector class in Java/Hibernate

In the picture you see an example “hit”, when a user looks and/or works on something. Notice that as you will collect a lot of data, you will need to filter out in function also of your security model: that is why we have the “areaId” field there.

Now however you decide to collect hits, you will have to meet the problem of how to weigh them, that is, have a hit rank function defined on users, objects and time.

In our implementation, we created a function that for every Teamwork user and every entity (be it task, issue, diary entry, document, worklog action) computes the user hit rank for the entity; if the entity is relevant for the user, the hit rank will be high. Rank gets high by “hitting” i.e. visiting an entity.

As we said before, interest is assumed to fade in time, otherwise you’d end to have too many entities with high rank: so you have to define a sort of window of attention, with a degradation of relevance.

gaussian GaussianParameters

You need a way to compute degradation of relevance; we defined degradation with the rigth side of a Gaussian curve with the constants in the code.

Hit rank can be refined to group rank notion, if your application has a notion of workgroup, so that you could define the activity of the group. Another benefit of hit rank is that you can efficiently monitor your application usage, or “activity”, and could lead to introducing badges et cetera.

Example implementation

An example implementation is in Teamwork: as it includes project management, business processes and groupware, there are many objects around. Hit rank has proven useful in a number of ways to improve usability, without impoverishing the model.

“You mostly visited” is a portlet which you may have on your dashboards, and you also see search results ranked:

Your highest ranked entities.

Your highest ranked entities.

Configuration of rank portlet.

Configuration of rank portlet.

Search results ranked.

Search results ranked.

In this way you should always have “at hand” what you’re really working on: you should be able to access your most relevant objects with one click.

References

Google’ page rank paper: The Anatomy of a Large-Scale Hypertextual Web Search Engine

A discussion on badges: http://stackoverflow.com/questions/135647/how-do-badges-work-in-stackoverflow

An introduction to full text search: http://www.javaworld.com/javaworld/jw-09-2006/jw-0925-lucene.html

Hibernate full-text search: http://www.hibernate.org/410.html

Our contribution to Hibernate full-text search: http://www.hibernate.org/432.html

See hit rank in action in the demo or by installing the web app.

Teamwork 4.0.8222: Portuguese translation and more

Task editor in Portuguese.

Task editor in Portuguese.

Here is a new translation and several minor improvements. Download the release here.

Features

- interface is now translated also in Portuguese
- added compatibility with a wider spectrum of localized Outlooks (and in general iCalendar clients)
- several improvements in project summary portlet
- more readable buddies menu

Bug fixes

- fixed bug on task tree editor too restrictive on statuses
- fixed bug on agenda search type list
- fixed bugs in updating news
- fixed security bug in list of person in activity
- fixed task type filter on list

Teamwork 4 Easter Egg

We’ll give a free single user Teamwork 4 license to the first who finds the Easter Egg in Teamwork. A screenshot and/or a way to make it appear is fine to get the prize.

:-)

Teamwork 4.0.8152 with Gmail service support

Rounded search.

Rounded search.

Now you can use a new Gmail (©Google Inc.) account as Teamwork’s, and send and receive e-mail to and from that account; see the user guide for instructions.

Technically, introduced support for pop3s and smtps and, in theory, for imap (experimental).

In this release we also have:

- prettier search and send message
- area managers have link to area and roles
- nicer forgot password

Download the update here.

Teamwork 4.0.8102 released

This release contains:

- a bug fix for data upgrade from 3 to 4
- a fix in getting Twitter logs in dashboards
- a fix in task PDF snapshot generation

    Teamwork 4.0.8063 released

    This is a functionally minor update. with some nice bug fixes. We’ve also updated the user guide.

    Features
    - Friendlier file storage editor
    - On shutdown HsqlDB files get optimized
    - Smarter full text search user “t:” shortcuts etc.
    - Check overwork runs only if estimation is >0.

    Bug fixes
    - Bug on full text search in case of “:”
    - Fix for schema evolution HsqlDB

    Upgrading from Teamwork 3 to 4: why and how

    If you are a user of Teamwork 3, you may now consider upgrading from 3 to 4.

    Why?

    Well, simply version 4 is Nicer – Faster – Friendlier – Wider..

    This does remind of the Daft hands video :-) . To get more in detail, probably the best way is to have a look at the user guide.

    P.S.: Faster? Yes, it is graphically richer, but still it is faster: given the extended Ajax usage, many pages no longer need “global reloading”; and there is also caching for all the graphical pages parts.

    How?

    First, you must buy the upgrade license here. The cost is 35 Euro per user (the buy page will show you also the price in dollars).

    The installer of version 4 contains an upgrade procedure from version 3 to 4. Upgrading means evolving the database schema, updating and inserting some data, and updating the web application. This is a complex process, which we tested extensively on different database, but it is not entirely fail-safe; there may be permissions lacking, differences of encoding, particular settings of your installation etc. .
    So before any upgrade attempt we STRONGLY advise doing a complete backup: these are the required operations to preserve all your data and your configurations settings:

    B1. Backup your database
    B2. Backup the entire web application: e.g. TEAMWORK_HOME/webapps/ROOT
    B3. Backup your repository, where files get uploaded: if you have not customized this folder you can find it in TEAMWORK_HOME/teamworkRepository.

    Consider that if you have Teamwork running in a non graphical environment, you cannot directly use the installer for upgrading, and this may be a problem, as several files must get updated.

    So the recommended procedure for upgrading is the following:

    1.    Backup as above B1, B2, B3
    2.    Create a copy of your database, accessible from a graphical environment
    3.    Install version 4 on such database with the graphical installer
    4.    If everything is fine, use the obtained web app as the new Teamwork

    This way there should be no danger of “ruining” your current version 3 installation.

    You can delegate us to do the upgrade procedure for you, if you are willing to give a temporary remote access to your web application. Before giving us access, you must have done backups B1, B2, B3, as our upgrade comes with no guarantees of data preservation in case of failure, and it is to you restoring the database and the web app in the previous state.  Buy the “remote setup” here:

    http://www.twproject.com/licensing.page

    In case the upgrade procedure fails, you will get a full refund of the remote setup.