Preview will arrive soon
CustomerCare is a system for maintaining the relationship between salespeople (the company using the system) and their contacts in different companies. Among the features the system can create Google Calendar events automizing as much as possible, label printing, mass mailing and keeping track of prospect customers.
Before development MarkOn A/S had a very simple customer system using spreadsheets. There was no way to use the stored data in efficient ways for printing labels, checking for data errors and such.
Before developing the system I converted the data from the spreadsheet into a proper database. After that I ran a load of commands on the data to extract the information from multiple different ways of writing the same basic information into one heterogenous data structure.
MarkOn A/S uses both Mac OS X and Windows on their computers. This gives the additional challenge that the system must not be too platform specific. Platforms such as GTK# (GTK+ in .NET) and SWT are platform independent (add foodnote here) was considered, but was discarded in favor of a web based AJAX solution. This is primarily because it heavily simplifies deployment and makes it easier to keep up to date.
The application uses the following technologies:
- Java 1.5 (for compatibility reasons)
- Google Web Toolkit (GWT) 2.1.0
- ExtJS GWT (GXT) 2.2.1
- PostgreSQL 9
- Javamail 1.4.3
- Various Apache Commons libraries
- gwt-maps-ext 1.0.0
The other technologies used for this project (hosting, etc.) are:
- Tomcat 6
- git and github
- Google Calendar
As a big fan of agile I took in some of the principles of agile. Since I am a lone developer some did not make sense though. In this project my development style is mostly inspired by eXtreme Programming (XP).
Most notably I kept the iterations at one week each (except for the first two weeks, where I had to get the project up and running). And the use of user stories. On the 7 weeks I implemented around 70 user stories.
I also made sure to keep the system as simple as possible (without over simplifying of course) and made sure to refactor when it was appropriate. I have also sought technical excellence where it was possible (there are some things I need to research though, it would have taken too much time during the project).
The most notable thing I have chosen to skip is Test Driven Development (TDD). I have two main reasons for that. First off GUI is hard to test, even though it looks like GWT have some toolkits for that I did not feel I had the time. Secondly at JAOO/gotocon 2010 Dan North questioned the rigid testing done in a lot of agile development. Usually it is said that everything needs a test meaning that people for instance test getters and setter, which is completely insane. I had to agree completely with Dan that only non trivial stuff should be tested.
Does that mean I did not do any testing then? No the lack of a unit testing framework is more a sign of it being the wrong way of testing for me. In the development I have worked with two kinds of tests. First being GUI features, which I have tested visually. Most of them relates to ensuring that the GUI is properly updated according to the model. Secondly is testing that the database statements are working. Mostly this is done through logging and running the same statements using pgAdmin3, to see if the results correspond and to detect SQL mistakes.