# Software Architecture
Quote
If you think good architecture is expensive, try bad architecture © Brian Foote
# Buzzwords
Design Patterns Microservices Monolithic application Business Logic Model-View-Controller Test plan SRE SLI, SLO, SLI NALSD UML ATAM ACDM QAS# Quality Attributes
Famous ilities. Used to formalized qualities of a system that are important for us. Here are some of the quality attributes:
- Debuggability
- Availability
- Performance
- Modifiability
- Testability
- Scalability
To properly describe quality attributes there is a method called Quality Attribute Scenarios. Here (opens new window) you can read more about the method
# System Design
# ADCM
Architecture Centric Design Method
An approach where the product development moves from an architecture review to an architecture review instead of moving from a prototype to a prototype:
- Define Architectural Drivers
- Define current iteration scope
- Design/Update current Architecture based on the previous steps
- Design experiments and hypotheses to test
- Develop
- Release
# ATAM
Architecture Tradeoff Analysis Method
Helps to evaluate the current architecture
- Present current architecture state and business context
- Investigate used design patterns and tactics
- Build Quality Attributes Utility Tree
- Analyse market, risks and propose trade-offs
- Select the most critical scenarios with the help of stakeholders
- Conclude with trade-offs, risks and decisions to make
# Design Patterns
There are many repeating problems in system design. So, people have collected solutions to them and called those solutions Design Patterns
# Distributed Systems
Modern systems are mostly distributed, so it is good to know the practices of distributed systems design
# Documentation
Decisions should be properly documented to remove questions like "Why have we used this library instead of that one?"
# System views
There are multiple prisms through which we can look at a system. To name a few:
- Module View
- Component View
- Deployment View
- Allocation View
# Diagram tools
Here are several tools that can help you with documentation
- PlantumUML (opens new window)
- D3JS (opens new window)
- Diagrams (opens new window)
- Gliffy (opens new window)