The Beginners Guide to designing secure and scalable software systems.
Software architeture is the blueprint of a system, it can also be defined as a high level structure of a software system which defines how underlying system components interact, data flows, how business logics and technical requirements are implemented or met.
Why System Design Architecture
- To design software systems that are scalable and mantainable.
- To craft system software components that work together.
- This is a guiding tool for developers which helps them to make consistent decisions when it comes to the coding and implementation phase of the system.
Elements of System Architecture
- Structure:- This element defines how databases, system software componets and services communicate
- Behaviour:- This element defines how system responds to the inputs, and how different modules communicate.
- Quality attributes:- This element defines the scalability, reliability, security and mantainability.
- Trade offs:- Every design has its pros and cons (Flexibility and Scalability)
Software Architect
This is an individual who is a chief engineer of the entire software system project.
Roles
- Defines the software system structure components.
- Makes sure the system meets business and technical requirements.
- Gives critical system design decisions which determines how the system will scale up, flexibility and mantainability.
- Advises on the best practices and trade offs.
- Manages non functional requirements of the system.
- Acts as a bridge between the technical team and other stakeholders.
Architectural Thinking
This is the ability to design software system which goes beyond just writing codes, more of thinking in components, interractions and long term scalability.
Core Principles
- Concern seperations:- This deals with embracing the indipendency in system components
- Encapsulation:- Ability to hide complexities and expose necessary functionalities when needed.
- Loose coupling and High cohestion: Focusses on components being highly independed yet focussed.
- Scalability and mantainability:- The ability to think long term and not short term quick fixes.
- Trade off analysis:- Every system design decision has its pros and cons, the ability to sieve through these pros and cons and choose the best strategy which aligns well with the software system requirements and business logics without having a scope creep.
Architectural Design is all about designing software system that scales up, lasts and adapts to the constantly evolvong user needs.