1. A method for designing a software architecture for utilizing software components in building N-tier software applications, the method comprising: a. specifying a set of software component rules for creating software components; b. specifying a set of tier rules for creating an extensible set of tiers, the tier rules further comprising: i. a set of association rules by which at least one software component created using the software component rules may be associated with or disassociated from at least one tier created with the set of tier rules; ii. a set of tier framework rules to provide an architected context for software components associated with a tier; and iii. a set of package rules to provide for logical grouping of interfaces within a framework defined by the tier framework rules to provide a set of specific behaviors for the tier; and c. specifying a set of assembly rules, the assembly rules comprising association rules by which each tier may be associated with at least one other tier and linkage rules by which each tier may be linked to at least one other tier.