Primal Force:

                                         Forces are the issues that exist within a decision-making context In a

design solution, forces that are successfully addressed (or resolved) lead to benefits, and forces that are unresolved lead to consequences. For any given software problem, there are a number of forces that can influence a given solution. The application of a design pattern leads to a solution that resolves the forces in a particular way. In the solution, some forces are resolved more completely than others. The choice of a design solution establishes a priority on the forces, to the extent that the highest−priority forces are resolved the most completely.

Vertical Forces:

                                    Domain−specific forces are unique to a particular situation due to the domain or problem addressed. Since vertical forces are unique (or local) to one software situation, resolution of vertical forces usually results in unique solutions for each software problem.

Horizontal Forces:

                                 horizontal forces, are applicable across multiple domains or problems. Horizontal forces are those that influence design choices across several software modules or components. With horizontal forces, design choices made elsewhere may have a direct or indirect impact on design choices made locally. For example, if the horizontal force is “design consistency,” it is necessary to coordinate software designs across multiple  software modules to ensure such consistency.

 Components of primal forces:

                                                              Each primal force is horizontally applicable across many domains of software architecture and development. The primal forces represent the common−sense basic considerations, which are necessary for successful software architecture and development. Primal forces comprise a fundamental value system for software architects and developers that are independent of particular situational forces. The primal forces include:

Management Of Functionality:

                                                      Managing functionality is making sure that software meets end−user requirements. Software provides a mapping from the world of end−user objects to the world of computer technology objects. The functionality of the software provides the mechanism for this mapping and for of the operations performed on technology objects.Interoperability is an important part of management of   all functionality, comprising the exchange of information and services between software modules. interoperability enables multiple software modules to collaborate to provide functionality.

Management Of Performance:

The second primal force, and the one sometimes overlooked by software architects, is the management of performance. It is not sufficient for software to meet only its functionality requirements; the system must also meet performance needs. End users have changing perceptions throughout the lifetime of a system, which can impact these needs. A system is implicitly required to perform at least as fast as comparable systems developed using other technologies.

Managing performance also involves application software optimizations. Application implementations control the details of processing, which is where the greatest amount of flexibility is available to tune the performance of the application. The majority of performance issues involve compute−bound application bottlenecks, not I/O−bound or network−bound performance. Specifically, an application developer controls the application’s data structure selection, algorithms, and often, language implementation. Performance optimization is an expensive and time−consuming activity, and few projects are willing to incur the additional, often considerable, costs associated with application speed−up.

Management Of Complexity:

                                                 In developing systems, it is important not to lose sight of the value of good software abstractions. Abstraction leads to simpler interfaces, uniform architectures, and improved object models. It is the lack of effective abstractions that results in excessive system complexity. Commonality between components is often not recognized and sufficiently exploited. Without proper design abstraction, needless component differences are created, resulting in redundant software and multiple points of maintenance for fundamentally similar code.

Managing complexity is a matter of analyzing a design and properly identifying the hot spots and problem areas that may be most affected by future changes; for example, the anticipation of changes that have the potential for a performance bottleneck in an implementation. Once hot spots have been correctly identified, a recursive process of redesign revision is appropriate, to provide simplicity and robustness. Developing abstractions that simplify individual interfaces provides cost savings across the overall system design. This can result in savings in the internal implementation of a software component, and in each of the clients that access the component services.

Management Of Change:

                                         Adaptability is a highly desired but elusive software characteristic. Most organizations would prefer to have adaptable systems, but few realize the full implications of what it means to  develop a flexible system. When developing a distributed system, it is not sufficient to simply include adaptability as a goal; rather, the system architect must consider the evolution of the system and decide how and where the system needs to be adaptable. When the system architect designs interface specifications, he or she is making decisions about where the areas of greatest adaptability exist and which are the areas of greatest stability. IDL(Interactive Data Language) can be used to define the software boundaries. If properly specified, it is the set of interfaces that provide decoupling between components in the system. A good set of IDL interfaces specifies the exposed functionality of a software component in order to make multiple implementations capable of satisfying the constraints of the interfaces. It is in the software interfaces where system stability and adaptability are realized. A system that can support component implementation changes and still maintain stability is much more adaptable than one whose interfaces must constantly be modified to support new component implementations.

                             Portability is an important aspect of management of change, for it is the ability to migrate application software from one product or platform to another. Many standards reduce risk by facilitating portability. Unfortunately, the portability provided by COTS products is imperfect, as vendors increase and decrease other COTS and platform support.

Management Of It Resources:

                                                  Management of information technology (IT) resources concerns the ability to manage the assets of the enterprise on a large scale. A typical large−scale enterprise would have many  different kinds of hardware (hardware heterogeneity), many different software products (software heterogeneity), and multiple releases of each technology. Managing the large volume of machines and software in a changing organization becomes a major issue in its own right. The management of IT resources involves many aspects, such as hardware/software acquisition, inventory, training, maintenance, upgrade, and support.The majority of end users are incapable of providing their own technical support, so this support burden falls on the enterprise. If the support burden is unresolved, significant costs are associated with lost time and productivity, estimated by Information Week to be $40,000 per end−user PC per year.

Security is an important aspect of management of IT resources. The secure control of  information and services is becoming more important as systems become increasingly networked and interoperable.

Management Of Technology Transfer:

                                               Management of technology transfer comprises some of the key forces at the external boundary of the enterprise. It includes the formal and informal relationships established by the use and transfer of software and other technologies. Management of technology transfer is also an issue impacting many software developers because of the popularity and the availability of the Internet. It is relatively easy to disseminate technology information globally across enterprise boundaries through e−mail, the World Wide Web, and other services.These information exchanges impact the control of intellectual