I just completed another project contract on Friday. After decompressing over the weekend I wanted to write a few thoughts out about some of the successes and failures I've learned during this project.
This project was a pretty good one. Even though we put the application into production, the customer didn't have enough money to keep me on long enough to finish the project in a state I would have been more happier with. There were a few reasons for this I think: 1) the customer did not have a clear enough spec, in his mind, before I started, 2) the customer was too busy with other projects to give me enough attention and direction with the design, 3) the customer was too busy to help me get the application into a User Acceptance test site earlier than two days before the contract expired. If we had a little more time, maybe one more month I think we could have turned the application into something excellent, and I could have seen it in use long enough to know if my design assumptions were good ones.
That said, I did spend a lot of time with one of the Users who was a database modelling expert. I did learn a lot from him, and he really helped me understand more about what they were expecting as a customer. Unfortunately he worked in another building, so access to him was severely limited too.
Another success was that this was my first ASP.NET MVC project to be deployed. It was also my first use of NHibernate, which I also thought was very successful. I also used jQuery and jQuery UI extensively for Web 2.0 stuff like dialogs (death to window.open!) and AJAX. Those things were a lot of fun.
I also got to use a of new architectural planning and design (Domain Driven Design) pattern that I learned from a talk given by Donald Belcham (aka The Igloo Coder). I've been reading the book by Eric Evans as well. This definitely seems like the new way to go. DDD is about modelling your application and also about understanding the client's needs. I'm really impressed and eager to use it in future projects and products as well.