In developing any software application, it's important to keep things as simple as possible and add complexity only when needed. (I spoke about this in a previous post, Planning for vs. Reacting to Change .) On the flip-side, a certain amount of architecture may be assumed at the start of a project...