From IT perspective, Infrastructure refers to all components, libraries, tools, etc that are connected to an actual physical infrastructure (hardware) or external service (software), through specific programs, drivers or other libraries which will enable such connection in order to operate or manage services or environments.
With that in mind, infrastructure is considered to be our storage systems of preference such as Databases or Cache, also Logging systems or Message brokers that are supporting our software applications, even external services to your application like Email messaging, external logging services or external reporting tools are considered infrastructure.
It is crucial to realize that also your favorite application framework is also part or considered to be infrastructure.
Software engineers that take architectural design principles into account when developing their systems, tend to guarantee, among others, these software characteristics:
- Flexibility
- Extensibility
- Reliability
- Maintainability
- Reusability
- Testability
And these features are very important for systems to last a long time and to require less resources to keep them up to date with latest technologies and keep them solid (secure, testable) and open for integrability and/or portability against new business requirements.
In order to achieve this objectives we need solid Software Architecture and Design principles, be conscious of when to apply Software Architecture Design Patterns available, as well as Software Architecture Patterns for Common Problems and proven industry techniques that help us keep our Software Domain decoupled from Infrastructure, solid and extensible allowing as to fulfill above mentioned software characteristics.
Top comments (0)