Software architecture is the set of principal design decisions about a software system. It includes decisions about the system's structure, behavior, and interactions. Principal design decisions are those that have a significant impact on the system and are important to stakeholders. A software system's architecture can change over time as design decisions are made and remade throughout the system's lifetime.