How do business requirements dictate architectural decisions? Lets understand this through a quick and small example. Assume that a software company, Takshila Inc., has recently bagged the contract for building a new inventory management system for a local cosmetics manufacturing firm. After the initial talks with the stakeholders, the business analyst from Takshila comes up with high-level specifications, which are:
The system should be accessible from any online location
The system should be able to process multiple orders at the same time
The system should be able to interact and process information from different locations having different databases
The system should interact with other software packages (such as financial software) already in use by the company
The system should be easy to customize later by the internal development team
With these requirements in mind, and after detailed discussions with team members, the software architect has come up with the following architectural specifications for the proposed inventory management software:
The system should be web based, using a thin-client architecture.
The system should have built-in multithreading capabilities.
The system should be database-independent, which means that the system should be able to work with multiple types of databases without changing the code—probable use of dependency injection.
The system should expose a set of functions as an API, and should also be able to import data from other sources and process this data in its own tables.
The system should have loosely-coupled tiers, so that each individual tier has no dependency on the other and can be used with any other tier.
Note how the business requirements have been translated into architectural specifications, and still there is not a word about a programming or development platform! So the architecture has nothing to do with development platforms, programming languages, design and so on. We can create a system satisfying the above requirements in many ways, using different designs and probably using different platforms too (for example, one could either use ASP.NET or JSP/J2EE). In short, the architecture does not care whether you use LINQ, AJAX, or Ruby on Rails. As long as you are meeting the architectural specifications, you are free to choose your own technology and tools.