And when you close your eyes, what do you see? Do you see ducktape? Do you see robust infrastructure? Do you see fragile systems? Do you see elegant architecture - Software engineering architectural patterns?
Part of the development includes a thought process - the software development life cycle(SLDC).
A point in time during which we remember that software development is more than just code; it involves more thinking.
The software development life cycle involves a series of steps engineering teams undergo to create, enhance and maintain sustainable software solutions.
As an overview:
Each step outlined above acts as an input to the next and so forth.
We focus, at least in this series, on Architecture, which gives room for development (the part all engineers love).
Take note, that the steps outlined in the development of sustainable systems (SDLC) may have more detailed steps in each. Do reach out, either in the comment section or directly, if you would like an elaboration of the same.
So what is Software architecture and what do Architectural patterns involve?
Software architecture is the definition of how components of a software system are organized and assembled and how these components communicate.
The output of the architectural design stage includes and is not limited to; prototypes, pseudocode, architecture reports, and diagrams for technical details. This is a key step. Miss this or mess it up, and development becomes a financial and technical nightmare.
Sidenote:
Understand that design patterns and architectural patterns are not the same.
When determining the software architecture you intend to use, you ask a number of questions; does the system need high performance? How adaptable should it be? How secure? How modular should it be? Do we start with large components that have smaller sections, much like layered systems, or do we start off with small sections that form larger components - similar to the use of microservices?
Herein, and in the shares that follow, we shall discuss the most known patterns. We shall aim to understand:
Monolithic patterns
Service-based patterns
Distributed systems
We shall break these down to know when and where to use layered systems, microservices, service-oriented patterns, space-based architecture, event-driven, and microkernel architecture.
Through this, we discuss the advantages of each against its cons; whiteboard software development.
Walk with me through this series, and let us talk about architecture.