- Programming paradigms - Object oriented, Functional
- Programming design patterns - [Gang of Four](https://en.wikipedia.org/wiki/Gang_of_Four_(band))
- Code organisation
- Frameworks
- Dependencies
- Design principles
- Components
- [Functional](https://en.wikipedia.org/wiki/Functional_requirement) vs. [Non-functional requirements](https://en.wikipedia.org/wiki/Non-functional_requirement)
- N-tier Layering
- Microservices
- Messaging
- Caching
- Load balancing
- Performance
- Relational and NoSQL databases
- [Database design](https://en.wikipedia.org/wiki/Database_design)
- [Data model design](https://en.wikipedia.org/wiki/Data_modeling)
- API design
- Polling and Sockets
- User interface design
- Networking and Proxies
- Scaling! Both [horizontal and vertical](https://www.section.io/blog/scaling-horizontally-vs-vertically/#:~:text=Horizontal%20scaling%20means%20scaling%20by,as%20%E2%80%9Cscaling%20up%E2%80%9D)
- Capacity and demand estimations
- Storage
- Fault tolerance
- Maintainability
- Extensibility
- Accessibility - [WCAG 2.1](https://www.w3.org/TR/WCAG21/)
- Security - [OWASP Top Ten](https://owasp.org/www-project-top-ten/#)
- Analytics and Machine Learning
- Communication
- Authentication - [OIDC](https://en.wikipedia.org/wiki/OpenID), [WsFederation](https://en.wikipedia.org/wiki/WS-Federation), [JWT](https://jwt.io/)
[[Big-O]]
## Sources
[# Five ways to improve your system design and software architecture skills](https://www.shedloadofcode.com/blog/five-ways-to-improve-your-system-design-and-software-architecture-skills#know-the-core-concepts-of-system-design)