Writing applications that simply work is for the most part pretty easy. However writing software that is well designed, scalable and also readable takes a bit more work. Using and understanding design patterns can help you write better software. Here is a few links I found related to the topic. I was going to write all about this but found someone that did almost exactly what I would have done so just going to post a link to the topic.