Software Architecture:  What, Why & How
Tags: softwarearchitecture, softwareengineering, computerscience, tips
Published: 2019-03-10 11:00:12

---
title: Software Architecture:  What, Why & How
published: true
description: My Opinion about Software Architecture, why you should care and how to become a software architect.
tags: Software Architecture, Software Engineering, computerscience, tips
---

![Alt text of image](https://thepracticaldev.s3.amazonaws.com/i/0dg7f5mnx73xr0gy6cbc.jpg)

It's a known fact that anyone can build a product that can last a week, a month or even a year, but if you want to build a product that can last years, or if it's gonna be the basis of other people work or contribution over a long period of time then you need to have software architecture in mind. which will lead us to the question... *what is software architecture*.

## What is Software architecture?

It's important when working on a software development project not to jump right into code to solve the problem. instead, making the right product involves understanding the full requirements of your product and using good design. The design step falls between understanding your requirements and building the product. and here's where software architecture comes in.

Software architecture is about designing your code with goals in mind to be flexible, reusable and maintainable. Plus, code design should present and describe concepts in a way that users and developers both understand, so they may discuss using common terms. and build the right thing.

In simple terms, Software architecture is the things you do to build the right thing, the right way. while building itself is Software development.

Now as we reach this far, Software engineering says that you need to have software architecture before having software development. this will lead us to *why hiring a software architect is important*.

## Why you need to apply Software architecture?

In order to answer this question, I have three facts that clarify the importance of Software architecture and architects.

### Fact #1:

Engineering means to build the right thing, the right way with the least possible amount of resources and during the shortest time, in an Ideal world this could happen, but for now, as we don't live in the perfect world, tradeoffs are on the table and decisions should be made.

### Fact #2:

UML is a very interesting and famous technique that helps with code design, the problem is that Software engineers always tend to think that software architecture is about drawing UML Diagrams, but the fact is that Software architecture includes UML but not limited to it, and believe me, there's a lot to do along with UML in order to design the right code.

### Fact #3:

Design is such an important step to follow in software engineering in a way that many approaches have been developed over time to help make the process easier and clearer.

and the answer for the previous questions is that Software architect importance comes from the need to have someone who has the relevant expertise to choose the right approach to be applied according to the tradeoffs that are on the table for a specific project. In my opinion, software architect is the one responsible for making sure that decisions are made for the long run, not just for the current problem that a project is facing.

Now as we answered two questions, let me introduce you yo my mini roadmap that I'm following in order to become a good Software architect

## How to be a software architect:

Please note that the following books and courses are not the official thing of Software Architecture, It's just what I'm following to be a good software architect.

1. **Software architure volume 1 & 2** [#link](https://leanpub.com/b/software-architecture): these books are comprehensive but It won't give everything you need to become a good Software architure, I say: these books will introduce you to the things that you need to have to be a good software architecture.

2. **Coursera Specializations**: Coursera which is one of my favorite things in the world, has three specializations that I say you should take in order to be a good software architect:
    1. Software Design and Architecture Specialization [#link](https://www.coursera.org/specializations/software-design-architecture)
    2. Secure Software Design Specialization [#link](https://www.coursera.org/specializations/secure-software-design)
    3. Software Development Lifecycle [#link](https://www.coursera.org/specializations/software-development-lifecycle)
    
3. **Patterns of Enterprise Application Architecture Book** [#link](https://www.amazon.com/Patterns-Enterprise-Application-Architecture-Martin-dp-0321127420/dp/0321127420/ref=mt_hardcover?_encoding=UTF8&me=&qid=): The book is relatively old, but it has some pillars in it, and I think it's required reading for software architect.
    
4. **Read about different Software Patterns**: like microservices and DDD for exmaple.

Please Note that those books will give the knowledge required to become a software architect but you still need the experience that you'll get it over time. Until then **Happy Learning**.