The big picture
Before we start any coding at all, we need to have a good understanding of what our application is all about, what the requirements are, and what possible functional pieces are needed to satisfy our requirements.
While in the beginning of an application's design phase, we try to answer as many questions as possible regarding our application's requirements, we should always try not to get too tied down by the details.
The idea is to get the big picture right, understand what it is that we want to deliver, the timelines involved, and the resources available. Based on such analyses, we can start creating a scalable, flexible, and extensible architectural design for our application.
I'd like to draw your attention to a very important word that I used here, extensible. The ability of an application to be easily extended is very important in a proper design. Keep in mind that no matter how much we try to finalize all of the requirements for an application ahead of...