📄️ Software Architecture
When diving into software design, you'll often hear about Clean Architecture. It's almost become the de facto blueprint for designing maintainable systems. However, in my current work environment, Hexagonal Architecture has emerged as a compelling alternative. Let’s take a closer look at both, their nuances, and why Hexagonal might soon become even more popular.
📄️ Application Architecture
There are several ways to build applications, and each approach has its own style, benefits, and challenges.
📄️ Is Full Stack Even a Thing?
I'd like to start this document with a comment I found in a YouTube video that stuck with me:
📄️ Server and Serverless
Our applications ultimately need to run somewhere. That "somewhere" typically comes down to two options: traditional servers (where you play the house owner) or serverless environments (where you're a cloud nomad). Both approaches keep your code running in the clouds, but one gives you keys to the server room while the other hands you an Uber-like bill. Let's break down these options.
📄️ Communication Between Systems
When systems need to talk, they have two fundamental ways to communicate: synchronously (waiting for immediate replies) or asynchronously (fire-and-forget). Understanding this split will help you debug issues, choose technologies, and explain architectural decisions to your team.
📄️ IDE
Technically, you could write Spring Boot apps in Notepad and compile them manually via the command line—but that’s like building a house with a screwdriver.
📄️ Version Control
You wouldn't build a house without a safety harness. Don't code without version control.
📄️ Formatters
A formatter automatically styles your code (indentation, spacing, line breaks) to enforce consistency. No more debates about tabs vs. spaces
📄️ Java Build Tools
Your build tool is like a dishwasher—you just want clean dishes, not a PhD in appliance engineering. Let's cut through the XML/Groovy noise.
📄️ Interfaces and Implementations
Let’s split this into two parts: the interface (the "what") and the implementation (the "how").