Establishing the Foundation
The foundation of the house must be firmly in place before you start to build the main part of the house; in the same way, it's essential to get the technical and applications architecture of an IT system in place (not just designedit should be built and tested) before you start to build any code on top of it.
Everyone involved in the project must be fully aware of the "rules" of working on the project. When building a house, this might include applicable building standards; boundaries (exact placement) of floors, walls, and doors; shape, size, and style of bricks, glass panes, or other components; paint colors; etc. It's also important that everyone knows which tasks must be complete before other tasks can be started, so that a logical order of construction is established.
Similarly, in an IT system, everyone must know the rules of development and the boundaries of the system. For example, if the project is using the (highly recommended) Model-View-Controller (MVC) design pattern, each developer must know the following:
Which components form part of the ModelEnterprise Java Beans (EJBs), COM+ components, etc.
Which components form part of the ViewHTML, WML, Swing, XML, JSP, .aspx files, and so on
Which components form part of the Controllertypically controller JSP or .aspx.cs files
See this web forms design discussion for details on MVC.
It's also important that the designer and developer are well aware of which components (EJBs, COM+ components, stored procedures, JSPs, etc.) belong to which of the application services. Security, authentication, database connectivity/transactions, and so on are often handled by the application server itself, although sometimes custom code is needed to extend or replace some of these services.
The next level of application servicespersonalization, localization, chat, discussion forums, newsfeeds, alerts, and so onmay be partly provided by packages (for example, portal software packages such as BEA WebLogic portal, Plumtree Portal, or Yahoo!/TIBCO Portalbuilder). These days, even some of the highest level of application servicespresentation servicesare being provided for developers; for example, .NET provides form validation features and allows the developer to largely ignore the physical platform, as it automatically converts the interface into the appropriate view for the device on which it's being viewedWML for a cell phone, HTML for a web page, and so on.
The presentation services application layer is likely to require the most change, maintenance, and rework, because it's the layer with which the user interacts directly. The underlying architecturesecurity, database, application server, and so onis unlikely to be subject to frequent change. Just as in the house-building scenario, the things most likely to change most often are things like the curtains and wall paintnot the depth of the foundations or the size of rooms. Just as contractors need to know what size of bricks, doors, and windows to use, developers must know what "shape" of components should be used in each type of developmentwhen to use JSPs, when to use EJBs, and when to use stored procedures.
The contractor needs to know the exact color code of the paint to use on each wall, the exact stock code of each plumbing fixture, and the standard size of the windows in the house to meet the customer's requirements, and the developer who is responsible for the View code must be fully aware of the exact customer requirements with regard to the user interface. (In both situations, of course, the expert can provide a bit of guidance to the user who may not be aware of the implications of his or her expressed preference.)