DEV Community

Cover image for Software Architecture as I know [always a WIP ;)]
snehaup1997
snehaup1997

Posted on • Updated on

Software Architecture as I know [always a WIP ;)]

Software architecture serves as a blueprint for a system. It is the organization of a system which includes all components - their interaction, operation with each other, environment, design principles used and the decisions made.

Why is it important?
Software architecture is the foundation of a software system which has a profound effect on the quality of what is built on top of it. A proper foundation yields number of benefits whereas sub-optimal decisions may later cause development, security, performance, scalability & maintenance concerns.

Different types of architecture patterns
Some common examples of architecture styles include Monolithic application, Layer based, Client-server pattern, Event-driven, Microservices etc.

Each pattern pertains to specific characteristics and behavior - some contribute to scalability whereas others are more agile. Knowing these strengths & weaknesses of each architecture pattern is necessary to choose the one that meets your use case.

Layered Architecture
Image description
Layered architecture (also known as the N-tier architecture) is the de-facto standard for designing majority of software. Here the codebase is separated into layers - each with a specific role & independent of the other.

Challenges/Limitations:

  • Defending boundaries.
  • Tight coupling leading to complex interdependencies.
  • Without proper coordination between team members, source code can turn into a mess.

Microkernel Architecture

Image description
Microkernel pattern has two major components - a core system and plug-in modules. The core handles fundamental and minimal operations whereas the plug-in modules handle the extended functionalities. IDEs are the best example for this pattern.

Challenges/Limitations:

  • not highly scalable.
  • changes to core system will result in changes to plug-ins.

Event-driven Architecture

Image description
EDA enables an application to detect “events” like mouse hovers, button clicks and act on them. This asynchronous communication replaces the request/response architecture where services would have to wait for a reply before moving onto the next.

Challenges/Limitations:

  • Complexity of implementation
  • Anticipation of the unknown
  • Error-Handling

Microservices Architecture

Image description
In microservices architecture the application is developed as a collection of services which are loosely-coupled, fine-grained & communicate via lightweight protocols. This makes additions of features and modification of existing ones independent of others.

Challenges/Limitations:

  • Increased development time
  • Limited reuse of code

Pattern Analysis

A good software architecture should facilitate scalability, agility, addition of new features, integration with external APIs & easily maintainable.

Attached below is a table enlisting key attributes of each of the architecture pattern discussed that can help you determine which pattern to select based on your use case.

Image description

Top comments (4)

Collapse
 
harsh321 profile image
Harsh321

Very well written! Keep it up

Collapse
 
snehaup1997 profile image
snehaup1997

Thanks :)

Collapse
 
vaibhavkedia968 profile image
vaibhavkedia968

+1 on the title! :D

Collapse
 
snehaup1997 profile image
snehaup1997

:D