Software Architecture for Non-Developers (Part 1)
- Software development and architecture
- December 6, 2023
- 5 min read
Table of Contents
Introduction
In this series of posts I am aiming to help bridge the gap between technical topics and non-technical professionals who often have to work or deal with such topics or technologies. The aim is to promote a better understanding so that they may be able to better make decisions and navigate their day to day work. In this post the topic of the back-end applications will be covered at an introductory level.
I would like to note that an assumption is being made that the reader has no technical knowledge whatsoever, so an attempt will be made to help the reader understand such topics even if they may seem trivial to someone who has some level of technical knowledge and understanding.
Languages
Programming languages are the backbone of the modern digital world. You can think of these languages as the concrete and foundation that builds the skyscrapers.
Programming languages are, simply put, a set of instructions used by programmers to tell the computer what to do.
To better understand this topic imagine yourself giving instructions to someone else to pour a bowl of soup for you at the dinner table. At the start you might say something along the line of
“pick up the ladle and pour a bowl of soup for me”
A few issues are caused with this instruction, to name a few:
- where will the soup be poured? On the ground?
- what would you do with the ladle after the soup is poured?
- where should the soup be poured from?
In the above example if the instructions were to be ran by a computer the soup would be poured on the ground and the ladle might be thrown back at you, this an example of a software bug. Thankfully, when a program is ran with a bug a ladle is not thrown at you.
A bug occurs due to the unclear or incorrect sequence of instructions. Where if the instructions were to be followed it would not provide the desired output.
Just like the soup example, programming languages come in many forms and flavors, such as Java, JavaScript, Python and many more. There even exists a programming language that only uses spaces instead of letters to write instructions.
These languages are then in turn used to write web applications using different frameworks such as ReactJS for front-end and Spring-boot for backend.
Backend vs Frontend
In most cases a web application, or even a mobile app, consist of a frontend and a backend application. You can think of the application as a shoe store where the front-end is the storefront with some items on display. Let’s say you decide that you wanted to try on a shoe, in this case the person working in the store would go in the store to fetch the shoe size that you would like.
The communication between the frontend application and the backend is similar to this as well. In the above application the individual working at the store is the request being sent and the storage room is the backend of the application.
This post will explain two of the backend application architectures. First is the monolithic architecture and the other is the microservice architecture.
Monolithic Architecture
The first type of backend architecture which we will be covering is the monolithic architecture. This type of architecture is like having all your eggs in one basket, meaning that all of the backend functionalities are written in a single application.
Benefits
- In systems where even a millisecond of delay is equivalent to a monetary loss a monolithic application is more beneficial due to its low latency.
- Lower maintainability cost compared to microservice architecture.
Microservice architecture
A microservice application is a much more complicated system. In a high level view it consists of many small application that satisfy a single requirement of the system. When all the microservices work together they enable the whole system to function with every microservice handling a small part of the operations.
It is worth noting that this architecture model is very complicated and consists of many different components to enable the system to function. Having said that this post will not be covering the topic in detail, but if a demand exists for such posts it can be incorporated in further iterations of this series.
Benefits
- Different language and technology stack can be used for each microservice that best fits its functionality.
- No single point of failure.
Database
The database in every application can be thought of as the library that contains all of the data that is required for the application to function.
The database stores the data used in the application, be it the user information or in some cases even the texts to be displayed on the website.
Two types of databases will be covered in this post, relational and document based databases
Relational Database
When most people think of databases it is a relational database that comes to mind, in this kind of databases there exists different tables, similar to an Excel file. The reason that these databases are called relational databases is due to the fact that different data points can be linked across tables.
These type of databases are best used for situations where a lot of linking is required between tables in order to retrieve data.
Document Based Databases
From the name itself these kind of databases are simple documents which contain the data that is being stored. You can think of this as a folder which contains many files and each file contains the data in a specific format.
This type of databases are based used in situations where the data format might change very often and there is a very limited need for linking different data points.
Ending Notes
I would be more than happy to hear about topics or different technologies that you would like to have a better understanding of as a non-developer person so that i can incorporate them into upcoming posts.