Skip to content

Architecture & System Design - Basics

homepage-banner

Introduction

Architecture design is an essential aspect when it comes to developing software. It refers to the process of designing a software system’s components and their relationship with each other. The design phase of software development is crucial as it determines the software’s quality, reliability, scalability, and maintainability. In this blog post, we will discuss the importance of architecture design in software development and the various types of software architectures.

Importance of Architecture Design

The architecture design process has several benefits for software development. One of the main advantages is that it helps developers to visualize the software system’s structure and how its components interact. This enables them to identify potential issues and make necessary changes before the development process begins. Additionally, architecture design promotes scalability, as it enables developers to add new features and functionalities to the system without affecting its overall structure. Finally, good architecture design leads to better software quality and reliability, which ultimately results in a better user experience.

arch-demo.png

Systems Design in real world

Types of Software Architecture

There are several types of software architectures, each with its own advantages and disadvantages. The most common types include:

Monolithic Architecture

Monolithic architecture is a traditional software architecture that involves building a software system as a single unit. All the components of the system are tightly coupled, making it difficult to modify or scale individual components. However, monolithic architecture is easy to develop and deploy.

Microservices Architecture

Microservices architecture involves building a software system as a collection of small, independent services that communicate with each other through APIs. This architecture promotes scalability and flexibility, as individual services can be modified or replaced without affecting the overall system.

Microservices-architecture-example

Event-Driven Architecture

Event-driven architecture involves building a software system that responds to events generated by other components or external systems. This architecture promotes scalability and flexibility, as it allows developers to add new features and functionalities to the system without affecting its overall structure.

Production-Grade Infrastructure Checklist

Distributed Systems - what should be considered

infrastructure-checklist-1.png

infrastructure-checklist-2.png

How long it takes to build production-grade infrastructure from scratch

time2build-production-grade-infrastructure.png

Architecture Board

Every cloud service provides a documented Cloud Adoption Framework. It’s essential for architecture board members to fully understand this framework, and redefine their roles and responsibilities accordingly, to ensure a smooth adoption process.

  1. Landing Zone Design: This involves creating a design that clearly illustrates the network and security stance of an organization’s cloud, and how different teams will operate within this zone.
  2. Baseline Policies: Various leaders should collaborate to establish organizational policies in the form of controls, such as virtual machine image management, patching policies, network policies, and more. Existing policies should be referenced, and templates like Azure Blueprints, AWS Guardrail, etc., can be used for setting up new ones.
  3. Sharing and Updating Artifacts: This crucial step involves architects consistently updating the baseline based on new services, policy updates, and sharing documentation with project teams. This routine will enhance existing templates for capturing cloud provisioning requirements, ensuring team adherence to organizational policies and rules.
  4. Roles for Business Team: In the cloud environment, business teams should be granted additional controls as they will be using Infrastructure as a Service (IaaS) or managed services. Clear roles for each service, such as Virtual Machine Operator, Storage Admin, etc., should be defined.
  5. Project Architecture Review: The role of this team includes reviewing project architecture regarding provisioning or design, identifying gaps, and promoting best practices. Initially, this may increase review time, but it will eventually decrease as business teams become familiar with controls like Role-Based Access Control, endpoint security, and benchmarking documents. The team can also develop automation to validate controls.
  6. Governance Model Setup: This team is responsible for establishing a governance model, detailing how system operations and monitoring teams will escalate incidents and address gaps. The model must ensure adherence to organizational policies. Regular policy reviews and root cause analysis (RCAs) of incidents are crucial, followed by updating and communicating benchmarking and policies.

Conclusion

In conclusion, architecture design is a critical aspect of software development. It enables developers to visualize the software system’s structure, identify potential issues, and promote scalability and maintainability. There are several types of software architectures, each with its own advantages and disadvantages. Understanding these architectures is essential for developers to choose the right design for their software systems.

Reference

  1. The Architecture of Open Source Applications: This website has a collection of books that describe the architecture of various open-source software projects. Each book explains the design decisions, trade-offs, and lessons learned from building the software.
  2. The Clean Architecture: A popular book by Robert C. Martin (aka Uncle Bob) that presents a set of design principles and patterns for creating maintainable and scalable software architectures.
  3. Software Architecture Patterns: A book by Mark Richards and Neal Ford that covers several popular architectural patterns such as Layered Architecture, Event-Driven Architecture, and Microservices Architecture.
  4. Martin Fowler’s website: Martin Fowler is a well-known software architect who has written several books and articles on software design. His website has a lot of valuable resources on software architecture, including articles, videos, and books.
  5. Designing Data-Intensive Applications: A book by Martin Kleppmann that focuses on the challenges of building large-scale data-driven systems and how to design architectures that can handle the complexities of data processing, storage, and retrieval.
  6. Microsoft’s Architecture Center: Microsoft’s Architecture Center has a lot of resources on designing software architectures using Microsoft technologies, including articles, case studies, and design patterns.
  7. IBM’s Architecture Center: IBM’s Architecture Center provides guidance on how to design and implement software architectures using IBM technologies. The website includes articles, case studies, and best practices.
  8. The Software Engineering Institute (SEI) at Carnegie Mellon University: The SEI is a leading research center that focuses on software engineering and software architecture. Their website has a lot of resources on software architecture, including books, articles, and training courses.
  9. Terraform: Up & Running, SECOND EDITION, Writing Infrastructure as Code (Yevgeniy Brikman)
  10. System Design Blueprint
  11. https://github.com/ByteByteGoHq/system-design-101
  12. Understanding Microservices
  13. The Architecture of Open Source Applications https://aosabook.org/en/index.html
  14. https://github.com/practical-tutorials/project-based-learning
Leave a message