TMate – new look at the good old CVS

Alexander Kitaev

Alexander Kitaev/ Founder and CEO / TMate Software

Formerly a project manager and team leader with TogetherSoft and Borland, Alexander now runs his own company, TMate Software, and works on creating intelligent developer tools that help make teamwork efficient and productive.
You can contact Alexander at: alex at

Last moment note on TMate:

When this article was already sent to the "onBoard" magazine, TMate 1.5 was released and this new release features not only CVS support, but also support for Subversion version control – new and becoming more and more popular VCS. Latest TMate version will unlock Subversion repositories for you as well as CVS ones. You are welcome to TMate Web Site where you may find more details on this new release.

Preface - role of version control system in the development.

There was a moment in time when Intel just introduced their 80386 processor that, comparing with the previous 8086 one, was enriched with protected mode, new addressing modes, 32-bit registers and new commands to operate on those longer registers and address space. However, most system programmers (ones who used assembler language) only used new long registers to compute greater numbers and more memory to store more data. It took a lot of time for some of the programmers to understand, that with the new addressing modes they could make their subroutines faster and more effective, and even implement more complex algorithms using less bytes of code.

The same behavior pattern could be seen in the version control system (VCS) usage. It is hard to imagine now that not a very long time ago there were a lot of software development companies that didn't use VCS at all. Instead, there was a shared hard drive or FTP server with application source code, manual conflict solving, and weekly backups. The stone age of software development process is far away now and it is hard to imagine development infrastructure without a VCS. However modern VCSs are frequently perceived as one-way storage systems that resolve conflicts automatically (that is not always true) and make a backup instantly, but in general are still just slightly modified versions of the old code sharing system. Compared with Intel 80386 processor's fate, it is a quantitative, not a qualitative difference between the way people use modern systems and the old time ones. Of course, VCSs themselves have made a huge step forward and continue to progress fast, but we, users of these systems, still underestimate power and value of a VCS in the modern software development process.

Sometimes it is just a question of right tools that help to use VCS smarter. This article introduces TMate – an IntelliJ IDEA plug-in that helps developers to get most of the CVS – the most popular version control system.

Team Leader's role in software development. How VCS may help.

Modern software development companies consist of different people that play different roles in the product development process. There is a distinct definition of the “product” for each role.

A project manager defines product as a feature matrix or feature tree, Microsoft Project Gantt chart and release schedule. A quality assurance engineer defines product as a complex of functional tests and their actual state. A developer's product is a subsystem source code, and assigned open and closed issues in the bug tracking system. The role for which product is mainly a source code is a team leader – the person who serves as a communication channel between developers and project manager, as a translator from the language of source code to the high level language of project management.

As in virtually any area in software development, it is very dangerous to let the high level project state become disconnected from the actual state of the project. That is why the team leader needs exact and up-to-date information about source code state as a whole at any moment, not relying on the daily or weekly developers' reports. Of course, this information should be easily accessible, and accessible with different levels of detail. It is exactly where VCS should play its role of the important information source, not merely a one-way storage system.

In practice, when using CVS version control system, it is not an easy task to get information out of the CVS. What the user may get is a lot of data which always needs postprocessing to get the source code state and history overview. This inconvenience, plus an understanding of team leader needs, inspired me to write a TMate – a plug-in that allows me as a team leader to be always in touch with the source code, tracking real project development easily.

During development TMate evolved into something more than just a source code tracking tool and as an IDEA plug-in it additionally provides lot of small but nice features that make work with CVS more convenient. Both team leaders and developers will benefit from using TMate – below I will describe the idea of TMate, the most important features and how they help.

How TMate may help?

To become popular, software has to be usable. When talking about usability, I mean not only UI slimness, but also (and mainly) the way software behaves. Obviously to be usable, an application should be transparent for the user. It should not require additional information to work, should not intervene into the workflow and at the same time be always close, ready to provide necessary information.

When developing TMate my highest priority was to make it exactly this kind of application, otherwise all the additional value provided by the VCS would not worth the effort of retrieving it. That means that TMate shouldn't require any additional information to provide benefits. This is true both on the large process scale where users do not need to change the way they work with VCS, and on the personal workflow level – the TMate plug-in widely uses modeless feedback, standard IDEA controls and keyboard shortcuts, makes collected information easily accessible.

The name of the product – "TMate" is an acronym for "team mate" – ideal team member that doesn't require any attention but does useful work. Now, when first version of TMate is ready I'm glad to say that TMate justifies its name.

To introduce TMate I will first describe its structure and then demonstrate what kind of information TMate may provide for the certain project, and how.

TMate is a combination of a web application and IntelliJ IDEA plug-in:

Figure 1.
Figure 1.

The Web application running in an application server (Tomcat 4.0 is included), instantly tracks changes in the CVS repository and represents them as a set of change sets – a concept not supported by CVS, but proved useful in other VCSs. When TMate Server connects to the repository for the first time it indexes all the information that is already there. This may be history for several years of development – TMate indexes it fast, thanks to the smart algorithms implemented in TMate Server.

The TMate web application needs just a read-only access to the CVS repository, which makes it very safe to use and also demonstrates how TMate tries to be transparent, adaptive to the existing environment and thus usable.

The IntelliJ IDEA plug-in contacts TMate Server and displays collected changes. While the web application converts raw data fetched from the CVS repository into meaningful information represented as change sets, TMate plug-in enables you to work with the collected information – browse, search, group, filter, build charts.

page 1 of 3