The entire work product to this point has centered on what the system should do. What are the behaviors and requirements that the system should meet? The design phase is where we answer the questions as to how the system will meet those requirements. This particular phase is important in understanding the building blocks and construction elements that are needed to solve the task. It is important to understand that this phase should not be entered until requirements have been gathered and understood. Software developers are prone to enter the design phase prematurely. This is often thought necessary because of the practices within many organizations to get product out the door as rapidly as possible. While it may appear that doing design and development without the analysis may produce product faster, the final product will most probably be harder to maintain and not live up to expectations. But just as analysis is important, so is proper design. Developers who have crafted software for a while can often produce good code right out of their heads without much design work. While it is possible to produce good quality code this way, the problem is that it won't be documented and will most likely not meet all expectations. A good design will be easier to develop because all of the constructs and their interactions will be documented. This will also make it easier to maintain and upgrade in the future.