Software Engineering Evolution

Amalakanthan R
6 min readMay 16, 2021

Before analyzing about evolution of software engineering, Let’s understand what is the difference between software and engineering.

Before analyzing about evolution of software engineering, let’s understand what is the difference between software and engineering.

What is a software?

Software is more than just a set of instructions. A software is a piece of executable code that performs some kind of computation. The term “software” refers to a set of executable programming code, libraries, and documentation. When software is created to meet a particular need, it is referred to as a software product.

What is Engineering?

Engineering, on the other end , is concerned with the development of products that are based on well-defined scientific concepts and methods.

In the above paragraph, we did know about the difference between software and engineering but what is software engineering? below definition gives the idea of software engineering .

“ Software engineering is a branch of engineering concerned with the development of software products based on scientific concepts, processes, and procedures. Software engineering produces a product that is both effective and dependable.”

According to a German scientist called fritz Bauzer, Software engineering is the creation and application of sound engineering concepts to produce cost-effective software that is both accurate and functional on real machines.

when creating a software, it is important to follow a certain pattern in order to deliver the product with no bugs and most importantly the client should be satisfied with the product. as mentioned earlier in order to create a software product there should be a pattern followed, the pattern followed while creating a software is known as SDLC ( Software Development Life Cycle). Following SDLC helps in delivering a quality product. In order to build a software, the developers plays a huge role. To build a software, software engineers should have a proper architecture. if there is a proper architecture, then there is a proper product. Below paragraph defines what is a Software Architecture.

“A system’s software architecture represents the system’s organization and function, as well as an explanation of how it behaves. A device is a series of components that work together to perform a particular function or set of functions. To put it another way, software design offers a solid basis on which to construct software.”

There are types of software architecture while developing a software. some of them are monolithic architecture, layered architecture, Service Oriented architecture, Micro- Service architecture.

Monolithic Architecture

A monolithic architecture is a software program’s conventional unified design model. Monolithic refers to a composition that is made entirely of one piece. According to the Cambridge dictionary, monolithic often refers to anything that is both too big and immovable. Monolithic software is built to be self-contained; rather than being loosely coupled like modular software, the components are interconnected and interdependent. Each component and its related components must be present in order for code to be executed or compiled in a closely coupled architecture.

In addition, if any software feature has to be modified, the entire application must be rewritten, while in a modular application, any individual module (such as a microservice) may be changed without impacting other parts of the program. Since modules are relatively separate, modular architectures minimize the possibility that a change made in one element would cause unanticipated changes in other elements. Iterative systems are easier to implement with modular programs than with monolithic programs.

Layered Architecture

The most popular architectural design is layered architecture. Modules or components with similar functionalities are grouped into horizontal layers, and each layer serves a distinct purpose within the program. The number of layers in an application is not defined by the layered architecture style.When designing an application, architects, designers, and developers may have as many layers as they want. The layered architecture style abstracts the overall view of the structure while still providing enough information to consider the individual layers’ roles and obligations, as well as the relationships between them.

Example of layered architecture is the Gmail application. in order to develop the gmail application, google used different types of layers. some of them are:

• All of the processing is done by an internal layer.

• An external layer communicates with users in their native language.

• There is also a layer that communicates with a database that stores user email messages (millions or maybe billions).

the above-mentioned are the least layers that is used to develop the Gmail application.

Compared to monolith architecture, this architecture made construction easier because the layered approach makes it simple to find and address issues without impacting the layers above and below. This architecture also provided reusability.

Service- Oriented architecture

A service-oriented architecture (SOA) is a software design pattern in which application components provide services to other components through a communications protocol, usually over a network. Service-oriented values are independent of any product, vendor, or technology. SOA simply makes it easier for software components to communicate with one another through multiple networks.

Web services that are designed using the SOA architecture appear to be more self-contained. The web services themselves can share data with one another, and they don’t need any human intervention or code modifications due to the fundamental concepts on which they are built. It ensures that web services on a network are able to communicate with one another comfortably.

Some of the principles of SOA are:

• Standardized Service Contract — A business overview is followed by the services. A service must have a summary that explains what the service is all about. User applications may be able to grasp what the service does as a result of this.

• Loose Coupling- There is less reliance on one another. This is one of the key features of web services, and it simply states that the web services and the client invoking the web service should have as little dependency as possible. As a result, if the service functionality changes at some point in time, the client application should not be affected.

• Service abstraction — The rationale that services encapsulate is hidden from the outside world. The service does not reveal how it performs its functions; instead, it should inform the client application of what it does rather than how it does it.

• Service Reusability- With the aim of optimizing reuse, logic is divided into services. Reusability is a major subject in any software company because no one wants to waste time and money designing the same code over and over again for different applications that need it. As a result, once a web service’s code is written, it should be able to work with a variety of application types.

Micro- Service

Microservice architecture, or simply microservices, is a distinct approach to software development that focuses on creating single-function modules with well-defined interfaces and operations. As businesses seek to become more agile and shift toward DevOps and continuous testing, the trend has increased in popularity in recent years.

Netflix, eBay, Amazon, Twitter, PayPal, and other tech giants have all transitioned from monolithic to microservices architecture, as Martin Fowler points out. A monolith framework, unlike microservices, is created as a single, self-contained entity. This slows down program improvements because it affects the whole system. Through being as scalable as possible, microservices overcome the challenges of monolithic structures. In their most basic form, they aid in the development of an application as a set of small services, each of which runs in its own process and can be deployed independently. These services can be written in a variety of programming languages and employ a variety of data storage methods. Although this leads to the creation of scalable and modular structures, it requires a complex makeover. Many of the same tools and solutions that have evolved in the RESTful and web service ecosystem can be used to link microservices through APIs. The flow of data and information during your microservice implementation can be validated by testing these APIs.

--

--