Understand the basics Flashcards
What is the core idea of software architecture?
Software architecture is about capturing decisions, not just describing structure. It’s a dynamic, evolving process driven by empirical testing of hypotheses to meet quality attributes.
Why is ‘Architect’ as a formal role problematic in agile teams?
‘Architect’ is a skill, not a role. Agile teams embody architectural decisions collectively, focusing on quality attributes and continuous exploration.
What is the key activity of architecting in software?
Forming hypotheses about how the system meets quality goals, testing them empirically, and iterating until goals are achieved.
Why is the building architecture metaphor flawed for software?
Buildings are static; software is dynamic. Software architecture requires continuous adaptation, and decisions are compromises between alternatives.
What critical skills do effective software architects need?
Focus on quality attributes (scalability, security, etc.).
System-wide thinking.
Lifecycle experience (development to maintenance).
Balancing trade-offs.
Leadership and experimentation.
How should architectural decisions be documented?
Capture:
Why a decision was made (rationale).
Rejected alternatives.
Assumptions/constraints.
Technical debt incurred.
Links to tests proving QARs.
What’s wrong with traditional ‘Software Architect’ titles?
They imply architecture is a top-down role, not a shared skill. Developers make architectural decisions daily (e.g., modular design, performance fixes).
How does technical debt relate to architecture?
Architectural decisions intentionally incur debt (e.g., Y2K date shortcuts). Documenting debt helps future teams manage trade-offs.
What’s the solution to improving software architecture practices?
Put architecture in the hands of developers, not disconnected committees. Emphasize continuous exploration, empiricism, and team ownership.
What is software architecture?
The high-level structure of a software system and the discipline of creating it. It involves:
- Significant decisions about system organization.
- Selection of structural elements and their interactions.
- Focus on external properties (not implementation details).
Why is software architecture important?
Handles complexity in design/development.
- Ensures quality attributes (performance, scalability, etc.).
- Guides collective engineering activities.
- Provides an abstract view for stakeholder communication.
What are the key aspects of software architecture?
- Abstraction: Hides unimportant details.
- Decomposition: Separates concerns.
- Composition: Coordinates elements.
- Trade-offs: Balances competing quality attributes.
What is the purpose of architecture documentation?
- Provides a common understanding for stakeholders.
- Captures design decisions, components, and patterns.
- Guides implementation and future evolution.
- Avoids reliance on reverse engineering (which often diverges from intent).
What are architectural views? Give examples.
Representations of the system from different perspectives:
- Logical view: Components and relationships.
- Development view: Module organization.
- Process view: Runtime behavior.
- Physical view: Deployment.
Name common architectural styles/patterns.
- Layered pattern (e.g., OSI model).
- Pipe-and-filter (e.g., data pipelines).
- MVC (Model-View-Controller).
- Client-server.
What is an architecture framework? Give examples.
Standardized methods for describing architectures:
- DoDAF (Department of Defense).
- TOGAF (The Open Group).
- Zachman Framework.
What is enterprise architecture?
The architecture of an entire organization’s IT systems, aligning IT strategy with business objectives. It guides integration, standardization, and evolution.
What are key considerations in architectural design?
- Functional requirements.
- Quality attributes (performance, security).
- Business drivers.
- Technology constraints.
- Trade-offs (e.g., performance vs. security).
How is architecture evaluated?
- Metrics: Coupling, cohesion, defect density.
- Techniques: Prototyping, simulations, expert reviews.
- Questions: Does it meet requirements? Is it flexible?
- Benchmarking: Compare against similar systems.
What is Software Architect?
An expert developer who design software solutions from the ground up, making high-level decisions about each stage of the process including technical standards, tools, design principles, platforms to be used, etc., leading a team of engineers to create the final product.
What are the primary responsibilities of a Software Architect?
Provide technical leadership & direction.
Own the full software development lifecycle (problem definition → design → release).
Balance 50% technical leadership and 50% hands-on development.
What are the hard skills required for a Software Architect?
UML (Unified Modeling Language) for diagramming architectures.
Deep knowledge of programming languages (e.g., Java, Python, Go).
DevOps practices (CI/CD, automation, collaboration).
What soft skills are critical for a Software Architect?
Leadership (guiding teams).
Problem-solving & conflict resolution.
Communication (clear expectations).
Negotiation (timelines, trade-offs).
Why is negotiation an undervalued skill for Software Architects?
They negotiate:
Timelines with developers.
Trade-offs (features vs. cost vs. deadlines) with stakeholders.