Search This Blog

Thursday, October 2, 2008

Radrace impressions

On the 26th and 27th of September our company (QNH Application Development & Solutions) held the second internal Rapid Application Development race. There were 15 teams each consisting of 2 people competing against each other. As you already have read, a variety of technologies were used. The technology of our choice was Grails and the IDE we used was IntelliJ. Here are my impressions.

25th of September
23:30: The final preparations for the game tomorrow were made. I double checked the setup on my laptop, from Subversion to IntelliJ and all possible documentation we might need. I also did a final check on our pre-build application to see if everything still worked as expected.

26th of September, the first day
09:00: There was a briefing of the application that had to be build. The application was about the registration of driver licences which contain points. Points are subtracted when a driver makes an offence, like speeding or drinking while driving. Points are added when the driver shows good behaviour like taking a practical exam.
The functionality that was needed consisted of the following:

  • Login functionality for John Europe. John Europe must be able to see his driver licences and for each driver license the details. Details consist of his points left and the offences he made. He could also go into appeal for some of the offences. When a civilian goes into appeal, an amount of 100 Euro should be paid. A payment module with credit card check should be build.

  • Login functionality for the judge which treat appeals and determine if an appeal is valid or not. An e-mail is sent to the applicant of the appeal to inform him/her about the decision of the judge.

  • Login functionality for police officers which see an overview of all civilians which should have returned his/her driver license to the police.

  • Login functionality for insurance companies to determine the price of car insurance policies for civilians.

  • Business rules which state how and when points are subtracted and added to the points on a driver license.

  • Make use of the existing database which is a Microsoft access database. The number of records in this database was close to 40.000 and consisted of multiple tables with relationships between those tables.

  • A couple of reports which display the civilians who needed to take practical exams and eye tests.



10:00: Let the games begin! We used the first 15 minutes to determine our strategy and made sure that we understood the functionality. After that we started working. I used the Mysql migration wizard to migrate the Access database to Mysql. We created a separate database for the original data and a new database for the application. Paul started working on the domain model and database and I started working on the authentication/authorization functionality. Whenever Paul had created a domain object and migrated the corresponding data, I started working on the controller and view for that functionality.

12:00: Lunch. We already had the login functionality, the eye test report and the data model for the rules working. For the report functionality we used straight sql with Spring’s JDBC template. There was not anything that had yet gone wrong.

13:00: We started coding again. I began working on the driver license information and the functionality for the judge and Paul continued to migrate the data. I used some Ajax to display the driver license details. We made sure we used the unique ids from the original data to maintain the relationships. Groovy scripts were used to migrate the data.

19:00: We completed the functionality for John Europe and the Judge. Both reports were finished. There were some improvements left to be made which we did the next day. We decided not to do anything with the rules yet because there were no real deliverables regarding those rules. Our expectation was that the changes, which were issued the next day, were regarding those rules.

20:00: We had a nice dinner with all of teams in a restaurant a talked a lot about this day. We tried to figure out what the rest of the teams were doing to measure our competition.

27th of September, the second day
08:00: We started with the optimizations of the use cases we finished the day before and made sure all functionality was working correctly. A total of three changes were issued. One of the changes was implementing the rules regarding speeding and parking in restricted areas. The rules were developed by me and Paul concentrated on completing the judge and police functionality. Some changes to the css were made to make the application a little more attractive than it already did.

11:45: We made sure everything was checked in and did a final test to make sure everything worked as expected.

12:00: Development time is over. We were pretty confident that we completed a lot of the functionality and scored a lot of points. However, we were not exactly sure if this would be enough to win the first prize. The jury began examining each application. Because of the huge amount of teams, the jury was divided in two so two teams could be judged at the same time to speed up the process.

15:00: When the first jury round was over, the best three teams had to demonstrate their application for the grand jury. We were one of the three best teams! We passed the test script and almost all of the functionality worked as expected.

16:00: Finally the awards. There were a couple of awards like the “best dressed award” which we did not win:). We already knew we were among the best three teams. When we heard we had not won the third prize we fell relieved. We could only be number one or two. The tension raised and eventually we heard that we came out first out of the total of 15 teams and both won a brand new Xbox 360 Elite console! All the preparations weren’t for nothing.

17:00: It was a great day and had a lot of fun with everybody. Till next year!

To see a video impression of the rad race check You Tube
Paul Bakker also wrote an impression which you can find here

No comments: