Hermann Matthes is a System and Software Architect at Siemens in Germany, working in the PLM domain (Product Lifecycle Management). His application area is a typical project business with various customers and workplaces.
In this interview, Hermann talks about a project management application called TimeKeeper, which he's been working on for some years (click to enlarge this screenshot):
(See the Appendix at the end of this interview for more cool application screenshots!)
You've created a TimeKeeper application. Aren't there enough of these already? How is it unique?
Yes, for sure, there are a lot of time keeping applications available all over the place, but I didn't find one suitable for the needs of all the roles typically involved in a project—project management, project members, accounting...
- Project members want to have one single application that they can use to record their working and travel time independent on billability or project dependency. They don't want to record efforts for Project A in an Excel Sheet on drive X and for Project B on Web Site Y and for Education in a private notebook. They want to have one single application where they can enter any work and travel time at any time and in any place, independent of their current network environment. And, very important, they don't want to care about project accounts and reporting.
- A project manager needs a tool which supports any project structure with an unlimited depth and with complex customer supplier relationships. In big projects the project manager needs to delegate responsibilities to subproject leads, without losing control. And the project manager needs sophisticated reporting functions to keep track on the overall project effort and schedule.
- A subproject lead needs to arrange task to team members. If necessary, the subproject lead must be able to define budgets and timeline for each task. And the subproject lead also needs reporting functions for the status of the subproject.
- The commercial guys need a bridge from the project management system to their ERP system. They must be able to set up any kind of accounting structure for the project and, in cooperation with project management, they have to map this accounting structure to the (very different) project structure. For the billing they define accounting periods which are the basis for the reporting of the project members.
TimeKeeper fulfills all these requirements. So you see—it's much more than a time tracking database.
And why isn't it a web application? Isn't the desktop obsolete at this point?
Well, that was also my first impression. But a system architecture shouldn't be driven by the hypes of the IT business. It should be the result of an analysis of the scenarios the application has to support. And the consultant business I'm working in has some special constraints:
- We're working on different projects simultaneously, with different teams in different locations.
- Intranet access via VPN tunnels is difficult to set up, as well as being expensive.
- Sometimes (at some customer locations or during travel) we don't have network access.
- The only resource which is always guaranteed to be available is our laptop.
So I decided to create a rich client desktop application, which uses a database on my local machine for all project-dependent or project-independent data.
For each project, a database can be set up anywhere, which is the synchronization point for all project data of all members of one project. A sophisticated, role based synchronization mechanism is implemented, performing a two-way synchronization between my local machine and a project database... with just one mouse click.
As a result, only those data are downloaded to my machine for which I have "read" permission. Even if I were to know the password TimeKeeper uses for my local database, I would not be able to read or manipulate data owned by other team members.
The only constraint for the location of a project database is that at some point in time the project members need access to that machine. The big advantage of this approach is that they only need a database connection during synchronization. Most of the time they can work with their application without having database or even network access.
Why did you use the NetBeans Platform as the basis of this application?
That is a funny story. TimeKeeper is a one man show, which I started about three years ago. The original reason for it was—learning Java programming. I'm convinced that you cannot learn a programming language by reading books or by writing "Hello World" examples. If you really want to become a good programmer, designer, or architect, you need real world requirements to solve.
So I searched the web for IDEs which could help me on this long and difficult road. NetBeans IDE seemed to be a good choice for me, because of its NetBeans Platform basis, the large community, and the support from the Java vendor. My decision wasn't really driven by fact—because I didn't know enough about the quality of the different Java IDEs. But I was lucky. I've never had regrets choosing NetBeans. It's a very good IDE and platform, with a great community.
But doesn't the NetBeans Platform make your application very large and unwieldy?
No, on the contrary! TimeKeeper currently has more than 100,000 lines of code and I use many external libraries, such as for writing Excel Sheets, generating PDF Reports, bar charts, or gantt diagrams, sending e-mails, and so on. These libraries also extend the application size, but they would do so just as much if I were to write them myself. And it would take a lot of time to implement all these features.
It's the same thing with the NetBeans Platform modules—I use a lot of NetBeans Platform modules for features which I otherwise would have to write myself. And I'm not sure if I would be able to implement them with the same level of quality as I get (and for free!) from the NetBeans Platform.
And, so, here's a screenshot of my modular application, showing all its custom modules, in the IDE's Projects window:
Which NetBeans APIs did you use?
I'm using a lot of modules from the "platform" cluster, namely:
- Actions API's
- Auto Update Services & Auto Update UI
- Core, Core - UI & Core - Windows
- Datasystems API
- Dialogs API
- ETable & Outline
- Execution API
- Explorer & Property Sheet API
- File System API
- General Queries API
- I/O APIs & I/O UI
- Java Help Integration
- Keymap Options
- Look & Feel Customization Library
- Master Filesystem
- MIME Lookup API & MIME Lookup On SystemFS
- Module System API
- Nodes API
- Options Dialog and SPI
- Output Window
- Progress API & Progress UI
- Quick Search API
- Settings API & Settings Options API
- Swing Layout Extensions Integration
- Tab Control
- Text API
- UI Utilities API
- Utilities API and
- Window System API
Two explanatory notes:
- Java Help Integration module: Needed for the context sensitive help system of TimeKeeper. It consists of about 100 help pages with about 180 screenshots. Unfortunately the online help is only available in German, because I don't have enough time to translate everything to English.
- Auto Update Services & Auto Update UI modules: Needed to implement the TimeKeeper online update via http://hermannmatthes.de.
So you're using the Update Center and Plugin Manager in your application?
Yes. The main reason for the update center is to provide patches to my users. In fact, I use it for all the modules, if an update is required. It's very important not just for the users but also for me because otherwise I would have to deploy a completely new release, which would cause a lot of work.
I also use the update center for myself. For license management, I have an additional module which isn't part of the distribution. It's only installed on my local machine and this is the only place where licenses are generated & maintained.
That means you're using this application in a production environment?
Yes. We use it in some projects in my department and currently it is being rolled out to a second department. Feedback from users is that they really love it. And they're propagating it to colleagues as a standard tool for their department.
Anything that could be improved about the NetBeans Platform?
For my needs, the NetBeans Platform is relatively complete. Sometimes I would like to have some more documentation, e.g., about customizing the contents of "nbprojects". A background build, like in Eclipse, would also be nice—even though I know that there are other possibilities in NetBeans that speed up turnaround cycles.
To my mind, the focus of the NetBeans Platform development team, or probably the community, should change a little bit from IDE requirements—to business requirements. Every serious multi user application has a similar set of basic requirements. It doesn't matter if you implement a CMS System, a Document Management System, an ERP System, a Requirements or Project Management System or whatever—you always have a set of common business requirements that you have to implement from scratch:
- Object based Access Control Management
- File Management, including versioning
- Workflow Management
Probably the existence of those modules would speed up application development much more than any other optimization you can implement in the IDE.
Can I use your application? How do I get started?
At this point, the TimeKeeper homepage is only available in German, sorry for that! Just go to the Download tab on http://hermannmatthes.de/timekeeper/index.html. There you can download TimeKeeper for free, if you press the link "Kostenloser Download von TimeKeeper":
You will get a ZIP file (currently 72MB), which you just need to extract to a directory of your choice.
TimeKeeper itself needs a Java Runtime Environment 1.6, is currently only tested on Windows XP, and is available in English and German. Because of Java and the NetBeans environment, most of the features should also be available on other systems, but I have no possibility to test that. If you try TimeKeeper on other systems, please give me feedback about your test results!
During the first start of TimeKeeper, the database server is automatically installed and your local database is automatically set up. No installation is required.
There is one (probably for some users important) restriction—during the first 30 days, you must register yourself by e-mail using a built-in function... because I want to know if it's worth my while to spend all the time I currently need for TimeKeeper development. After registration, you will receive a reply which contains an XML file with your (free!) license. I don't have a problem if you call yourself "Donald Duck" on the registration dialog and it's also okay if you use a temporary e-mail account which you throw away afterwards. I only want to know how many people are actually using the software.
The (German) helpset is also available online. Just go to the link "Online Hilfe" on the same web page:
What's the future of this application?
Currently I'm developing a project communication system which will be able to deal with links to TimeKeeper objects. The other feature planned for release 3.6 is a BlueTooth interface to mobile phones, as well as a MIDP application for these phones, which will allow someone to enter working hours via their phone.
If some features are missing—the Help menu includes an item that you can use to send me criticisms, commendations, or a feature request!
Thanks Hermann and keep us updated on ongoing developments with this really cool TimeKeeper application!
Appendix: TimeKeeper Screenshots
Click the screenshots below to enlarge them.Team View. The window where you define the organizations and users involved in a project. On the left side you see the project explorer, which is used to maintain the project structure:
Commercial View. Here accounting and project management together set up the hourly rates and accounting structure and link the accounts to the project structure:
Accounting View. Here accounting defines the accounting periods and the users generate their work reports for these periods:
Calendar View. This view displays your private calendar which also shows your holidays and your vacation. By now TimeKeeper knows the holidays from USA, Germany and Austria. If someone needs a holiday calendar for different countries—it’s just a matter of configuration (using layer.xml):
Work time View. This view displays the work times entered into the system. You can configure the visible columns, you can define & set filters for the visible rows and you can define & set sorters for the row order. An Excel export and a cross table of the visible rows is also available:
Cross Table Report. This dialog example displays a cross table for the time records visible in the work time view.