If you search for a free project management tool, most likely you will find Redmine. This is an open source Ruby on Rails web application. It can be considered to be the de facto flagship of project management solutions in the open source world. It supports all that you need for effective project management: scheduling, calendars, Gantt charts, roadmaps, version management, document management, news, files, directories, activity views, member roles, permission management based on roles, and so on. With its third-party plugins, you can also get invoice management, Scrum backlogs, Kanban boards, burn down charts, and much more. But it's not just a matter of project management.
It's hard to conclude whether Redmine is more of a project management tool or an issue tracker. Ideally, a good issue tracker must come with some project management features. And in Redmine, these two components are combined flawlessly. However, what makes it a perfect issue tracking application is the fully configurable workflow, which lets you set permissions to change issue statuses and field values for each role-tracker pair individually (here, tracker is an issue type in Redmine terms). As an issue tracker, Redmine also supports essential issue tracking features such as priorities, subtasks, subscribing, commenting, custom fields, filters, and more.
Anyone who has worked in a team will understand the importance of project documentation. For this purpose, many teams even establish dedicated Wiki sites and Redmine ships with its own per-project Wiki system. This system supports a special markup language and source code syntax highlighting. However, the staggering thing is that the same Wiki syntax is supported throughout Redmine—in issue descriptions, comments, news, and so on. Additionally, this syntax allows us to create cross links to other issues and projects.
Redmine can also serve as a support system. Thus, it comes with a simple bulletin board module, which allows you to have as many forums in a project as you need. Then, each forum can have any number of threads. And finally, forums and threads can be watched.
To host your projects, in addition to the aforementioned features, you would probably want Redmine to be able to integrate with version control systems. Such a feature is also available. Thus, the special module allows Redmine to be used as a source code browser. But, this module also integrates flawlessly into other Redmine components such as the issue tracker and Wiki. For example, an issue can be associated with code revisions, a Wiki page can link to a revision, a commit, a source file, and so on. With some additional plugins, Redmine can even be turned into a repository manager. The list of supported version control systems is also impressive: Subversion (SVN), Git, CVS, Mercurial, Bazaar, and Darcs.
All of these allow Redmine to be used as a project hosting platform by many individuals and organizations. And by the way, it's not limited to a single project—it is multiproject, and each project can have any number of subprojects to any nesting level. Many companies also utilize Redmine's collaborative capabilities for forge or labs sites. Moreover, its usage is not limited to software development. Other companies use Redmine for customer support, order fulfillment, task management, document management, and more.
I cannot describe Redmine without mentioning the people who created this fabulous software. As soon as you open Redmine, at the bottom of each page (near the copyright section), you can see the name of its primary author – Jean-Philippe Lang. A huge contribution to Redmine was also made by Toshi Maruyama and Eric Davis.
The previous section might have created the impression that Redmine is an all-in-one software application. To some extent, it is. It was the evolution of Redmine that made it look like this. It is extremely popular these days, and that's why it constantly gets new features. But what makes it so popular?
Having first seen Redmine, I got the impression that it was a very easy-to-use and friendly application. It is not overloaded with design and UI elements and everything seems to be in its place. This helps users get used to Redmine and like it at first sight. The very first time I saw Redmine, I also thought that perhaps it was too limited for my needs, mainly because it looked too simple. Eventually, it appeared that both of my assumptions were wrong: it's not easy-to-use software and it's not limited. The ease of the look and feel, however, does its job. So, if you need only the basic features, you are ready to use Redmine right after you have seen it for the first time. But when you need more advanced features, you need to spend some time to learn them. That's the main thing that makes Redmine so popular, I believe.
The right tools are built with the right technologies. What makes Redmine so "right" is Ruby and Rails. Ruby is known as, perhaps, the most modern metaprogramming and truly object-oriented language. This programming language is very flexible and is considered to allow building powerful applications fast and easily. The same can be said about Redmine. The same can be said about Ruby on Rails (or just Rails) as well. Rails is a web framework like Symfony and Zend Framework, but unlike others, it is the de facto standard for Ruby, the language it is written in. The names Ruby and Rails are so closely associated that many people believe they are the same language. You can treat Rails as a construction set for building web services such as Redmine. Also, Ruby on Rails became the source of inspiration for many other frameworks and libraries, such as CakePHP and Grails. Redmine is built on this technology and this is what makes it so good.
But what exactly is in Ruby on Rails that makes it good? Ruby (and therefore Ruby on Rails) supports metaprogramming. It's a technique that allows an application to modify its own code (that is, itself) at runtime. This means that there is almost nothing in Redmine that cannot be altered programmatically. Usually, the API of an application is limited to some functionality, but there are no such limitations in Ruby, thanks to metaprogramming. This makes the Redmine plugin API extremely flexible.
Thereby, we come to the next thing that makes Redmine so popular—its plugins. If you are familiar with Ruby and Ruby on Rails, you only need to learn little to start developing Redmine plugins. Taking into account the fact that Ruby on Rails is very popular nowadays, Redmine has a huge number of potential developers. Therefore, it has a large variety of plugins. Thus, with its plugins, you can even turn Redmine into a CRM or helpdesk. By the way, some of its plugins will be reviewed in Chapter 10, Plugins and Themes.
Note
There is a recognized issue of incompatibility between some Redmine versions and some plugins. The Redmine plugin API and Rails API used to change from version to version without good backwards compatibility. This is especially critical as many plugins use metaprogramming to alter non-API (core) functionality (and, in fact, it's impossible to preserve full backwards compatibility in such cases). Thus, this issue can be seen in Redmine 3.0, which switches from Rails 3 to Rails 4. Hence, when selecting a plugin, you should always check whether it is compatible with the Redmine version you are using.
The last but not least important benefits are that Redmine is cross-platform, open source, and freely available. Open source code and the GPL license make any modification possible. Nothing limits you from making Redmine better fit your needs.