Software Architecture
What is Software Architecture?
Software Architecture is the structure of a software system, it's fundamental properties, and the principles of its design and evolution.
Structure: It is about identifying the architecturally significant pieces of a system and defining the relationship between them.
Properties: It is about the functional properties of a system and its quality properties like performance, scalability, security etc.
Principles: It is about understanding the principles behind it's design. An understanding that allows the system to evolve in a consistent and logical way without introducing unnecessary complexity.
What is the importance of Software Architecture?
The need for Software Architecture is best summarized in the following statement:
"Software architecture represents a system's earliest set of design decisions. These early decisions are the most difficult to get correct and the hardest to change later in the development process, and they have the most far-reaching effects."
Early design decisions: Software architecture manifests the earliest design decisions about a system, that far outweighs any other decisions made later with respect to the system's remaining development, its deployment, and its maintenance life.
Transferable abstraction of a system: Software architecture constitutes a relatively small logical model of a system that is transferable across different software systems. It promotes re-use by applying it to other systems that are similar in functional and quality attributes.
Communication among stakeholders: Software architecture represents a common abstraction of a system that system's stakeholders can use as a basis for mutual understanding, negotiation, consensus, and communication.
What do I need to learn?
A Software Architect creates an Architecture and plays a leading role in realization of the architecture into a physical product or system. A Software Architect needs to have a good understanding of
System Viewpoint - The ability to see a software system as a whole
Identifying architecturally significant elements of a system.
Design principles for building and extending systems.
Technology - Tools, platforms and techniques available to reliably build functionality and meet system quality requirements.
Processes - Methods to construct, deploy, operate and maintain systems that are available 24X7 with very high uptimes.
System Requirements - Techniques to achieve system requirements such as:
- Concurrency
- Scalability
- Performance
- Availability
- Reliability
- Security
- Interoperability
How can NewTechWays help?
Our Software Architecture course covers all the important aspects of Software Architecture and connects them with Software Engineering aspects. At the heart of our approach lies the fact that we do not see Software Architecture just as an abstract view of a system and its properties. While abstraction is an important aspect of Software Architecture, it also must connect well with the underlying implementaion by considering all critical engineering aspects and challenges. For instance, an online transaction processing system must recognize the fact that beyond a certain scale a monolithic RDBMS can be the biggest inhibitor to scalability. It should identify such challenges upfront and address them right at the architecture stage itself. This is the key differentiator of our course. We take Architecture development process one level down and make sure it fits well with the underlying implementaion.