Software Architecture in Golang: Extensibility

Welcome to another Software Architecture in Go/Golang video, in this video I cover Extensibility with a practical example using Golang build constraints, Docker Compose args and extends directive. ■ What is "Extensibility"? According to the book "Software Architecture: The Hard Parts", Extensibility is "the ability to add additional functionality as the service context grows". In other words, Extensibility means adding or updating features without significant changes in the existing codebase. A typical example of Extensibility is a payment service that supports multiple payment methods. This means the service supports credit cards, gift cards, and PayPal transactions, and because of a well implemented codebase, it can be updated to add support for other payment services, such as ApplePay or SamsungPay, without too much effort. ■ Blog post: https://mariocarrion.com/2025/02/07/g... == Source Code ■ Step 1: Refactor to multi-broker using Kafka: https://github.com/MarioCarrion/todo-... ■ Step 2: Add RabbitMQ: https://github.com/MarioCarrion/todo-... ■ Step 3: Final version, defaulting to Redis: https://github.com/MarioCarrion/todo-... == Related Videos ■ Software Architecture in Golang: Measuring Instability as Software Package Metrics:    • Software Architecture in Golang: Measuring...   ■ Learning Golang: Interface Types - Part 1:    • Learning Golang: Interface Types - Part 1   ■ Learning Golang: Interface Types - Part 2 (empty interface, type assertion and type switches):    • Learning Golang: Interface Types - Part 2 ...   ■ Golang Microservices: Repository Pattern, Dependency Injection and Services.:    • Golang Microservices: Repository Pattern, ...   == All Golang Playlists ■ Software Architecture in Golang:    • Software Architecture and System Design in...   ■ Building Microservices in Golang:    • Building Microservices in Golang/Go   ■ Golang Tools and Packages:    • Golang/Go Tools and Packages   ■ Learning Concurrency Patterns in Golang:    • Learning Go/Golang Concurrency Patterns   ■ Learning Golang :    • Learning Go/Golang   ■ Learning Relational Databases in Golang:    • Learning Go/Golang: Relational Databases   ■ Testing in Golang:    • Testing in Golang/Go   == Socials ■ https://x.com/MarioCarrion ■   / mario.carrion   ■   / mariocarrion   00:00 - Start 00:06 - What is Extensibility in Software Architecture? 00:42 - Software Architecture: Extensibility - Checklist 01:02 - Software Architecture: Extensibility - Hands On Golang Steps 01:29 - Extensibility Practical example - Asynchronous Search Microservice 01:44 - Planning Extensibility in Golang for Search Microservice 02:02 - Refactoring Golang Search Microservice project to become multi-broker 05:09 - Building images using docker compose and testing using SwaggerUI 06:33 - RabbitMQ support for Golang Search Microservice using tags and docker compose args 08:48 - Conclusion about Extensibility Software Architecture non-functional requirement === Who am I? Hello 👋🏼! My name is Mario, and I am a Hands-on Software Architect and Lead Backend Engineer with decades of professional experience building all kinds of software, such as on-premise Automation Systems, Linux Accessibility Desktop Applications, Cloud Governance and Compliance Systems, Media Streaming Services, and Highly Scalable Distributed Cloud-based Advertising Systems. The content I produce includes what I've learned while working for small startups and large companies and the processes I've followed for successfully delivering complex enterprise systems from start to end. Subscribe if you like Software Development, Software Architecture, and Systems Design, and of course, Go! Keep it up. Don't give up! #golang #tutorial #softwarearchitecture