Software isn't built from Lego blocks

Component-based reuse is seen by many software engineers and managers as a promising approach to reduce high costs of building complex sohare. Lego blocks often serve as a metaphor for component-based reuse. Different kinds of blocks from standard block sets can be used for constructing endless variety of structures. Why cannot software be constructed as easily using ready-made, well-designed, carefully implemented, thoroughly tested, and clearly documented components? As far as experience goes reusing non-trivial software components even in a homogenous environment is very hard. 1 believe the main reason for this is that complex software is not built from simple components, like Lego blocks. Complex components depend on other components providing specific functionality; they need to observe system-wide policies for security, flowcontrol, overload control, fault detection and handling; they must rely on infrastructure for communication, coordination, state maintenance, execution tracing, etc. For a project to develop reusable components the context of use must be well understood. The context of use for software components is determined by software architecture. Therefor component-based reuse is only possible as a consequence of architecture-based reuse. If we intend to reuse architectures we need to improve our understanding regarding what it is, how it is created, and how it can be reused. This understanding must be shared by software engineers, product and project managers forming a conceptual framework for understanding complex software a culture in a community