1. Requirements gathering
- System customers (stakeholders)
- they are not obliged to know what they want
- they cannot necessarily explain what they want
- Functional, non-functional, and derived requirements
- Infrastructure (deployment environment)
- Architectural candidates. General algorithm:
- everything together (three layers, one deployment stage)
- move out the DB and the front end
- optimize the DB (vertical scaling)
- do replication and sharding
- add caching
- add load balancing
- move away from the three-tier design
- this lets the project (and the architect) live for 3 years, or even longer
- Architectural elements (responsibilities, constraints, interfaces)
- The "pick 2 of 3" rule: "fast, good, cheap"
- Antipatterns (keeping everything in your head, not maintaining documentation, insufficient or, conversely, excessive detail, copying, imitating the greats, an incomplete process)
2. Principles of building projects in the early stages
- What does architecture have to do with it (isn't architecture just arrows and boxes?)
- Conway's law
- Main approaches: separation of concerns, managing complexity, simplifying communication
- Main problems: fragmentation, design errors, inconsistency, over-functionality
- Simple ways of documenting
- Openness to change and to bringing in new developers
- Establishing rules and conventions
- Iterative development, waterfalls, cycles
- Short steps
- Why KISS, SOLID, GRASP, etc. do not help
3. Common architectural approaches
- pipes and filters
- Client/Server
- Peer-to-peer
- Layers and Tiers
- Publisher/Subscriber
Comments