Software engineers mostly agree that one of the best ways to write quality software is to start with something simple and than improve it through several iterations, based on the feedback you get from the users. The result of the each iteration is an operating version of the software. As people use the software, its strengths and weaknesses are revealed so developers can use gathered information to build the next version. Then this cycle is repeated.
One feature that was created as a result of such approach is Invoicing module. We shipped a public beta a couple of days ago and here’s how the story goes so far.

Invoicing module has started as one of our learning modules. When we hire a new programmer, we give him a module to develop so he can get familiar with activeCollab platform and to produce something that our customers are asking for. The original idea was just to get the model right (how module works internally), and then to build the interface on top of it later.
The initial list of the features included just a support for unlimited number of invoices that can be issued in multiple currencies. Each invoice could have an unlimited number of items and the support for specifying different tax rates. Here in Serbia, for example, we have two different VAT rates - 8% and 18% - if you sell a computer to a customer, CPU, mother board, etc. then your VAT would go at 8% rate, but for monitor and printer it's 18%.
The idea to work on a model separately and to build interface later didn't work quite well, so the interface was built together with the model.
At the same time Goran suggested that we should add the support for generating PDF-s instead of HTML invoices. Even though I was originally against the idea because it would delay the module release, he convinced me that it’s not a big deal and developed a PDF generator in just a couple of days.

Soon after that, we started to use the module internally. One of the first remarks we got was from our accountant - why the invoice has been issued in English language to a Serbian company? It was fine for billing foreign customers, but not for local companies. She insisted that future invoices to local companies should be in Serbian. That's how we added the support to select the language of each invoice, so now you can bill your clients from France or Germany and have the invoice generated in their native language, even if it isn't the default language of your activeCollab setup.
At that point, we were ready for private beta - first (and probably the last) beta that we did with isolated group of users. The users did great, but having private beta is just too much work for us. The worst thing is that, at some point, you have to start rejecting requests from honest customers who just want to help.
The feedback received from beta testers was great! Here are just a couple of things that people suggested and that eventually ended up in the module:
Goran has also added a page where you can configure invoice colors. He worked on Unicode support, polished the invoice form, improved the performance in cases when there are a lot of items on the page, and much more.

The Invoicing module is now available as public beta. Anyone with valid license and Support and Upgrade plan can download activeCollab 2.2 beta from their profile and take Invoicing and Subversion modules for a spin. Because it went through private beta, both modules are already pretty stable and we hope that we’ll have a final 2.2 shipped very soon.
Thanks everyone who helped to shape Invoicing module into what it is now. activeCollab is finally a project collaboration tool that has well integrated system for preparing and issuing invoices. Now you can use activeCollab alone to have all things covered, instead of using multiple services (at additional monthly fees!).
All suggestions, comments and questions are welcome, as always!
If you have something important to say about the issues discussed in this post please write at hi@a51dev.com.