When designing a complex software-intensive system it is unavoidable to make some a-priori basic assumptions about its architecture. We introduce so-called basic architectural alternatives as a means to guide these decisions and to understand their effects. These alternatives are classified according to five fundamental dimensions (enactment time, location, granularity, control, and automation and task distribution). For each dimension we describe some six typical, real examples of such an alternative. For each example we indicate fundamental properties of that alternative: elasticity with respect to later compromises, reversability of the choice (with resonable effort), uniformity requirements with respect to the different elements of in the system, and applicability of the chosen method accross the dimension. Finally, we discuss synergistic or contradictive effects of alternatives with respect to others. We hope that this analysis, together with the specific examples and their key properties, provide some insight for novices and seasoned designers and guides them during the early phases of system design.