<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
	<channel>
		<title>Architecture on dplabs — Software Engineering &amp; Technology Consultancy</title>
		<link>https://dplabs.tech/tags/architecture/</link>
		<description>Recent content in Architecture on dplabs — Software Engineering &amp; Technology Consultancy</description>
		<generator>Hugo</generator>
		<language>en-us</language>
		
		
		
		
			<lastBuildDate>Mon, 04 May 2026 00:00:00 +0000</lastBuildDate>
		
			<atom:link href="https://dplabs.tech/tags/architecture/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>How to Evaluate Architecture Without Falling in Love With Solutions</title>
				<link>https://dplabs.tech/blog/how-to-evaluate-architecture/</link>
				<pubDate>Mon, 04 May 2026 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/how-to-evaluate-architecture/</guid>
				<description>&lt;p&gt;Every engineer who has spent significant time in architecture discussions has seen the same dynamic: a proposed solution is presented, its proponents defend it, critics pick at details, and the group gravitates toward whichever solution has the most enthusiastic advocate rather than the best trade-off profile.&lt;/p&gt;&#xA;&lt;p&gt;This is not evaluation. It&amp;rsquo;s preference arbitration.&lt;/p&gt;&#xA;&lt;p&gt;Effective architecture review requires a framework that separates the emotional investment from the analysis — that forces explicit engagement with dimensions like cost, risk, and reversibility that advocates tend to minimize and critics tend to ignore.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Building AI Features Without Losing Control of Your Architecture</title>
				<link>https://dplabs.tech/blog/ai-features-architecture/</link>
				<pubDate>Mon, 06 Apr 2026 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/ai-features-architecture/</guid>
				<description>&lt;p&gt;AI features are getting added to production systems quickly — often quickly enough that the usual architectural discipline gets skipped. The integration is direct: OpenAI SDK in the service, API calls scattered through business logic, prompts hardcoded in the calling code.&lt;/p&gt;&#xA;&lt;p&gt;This works for a proof of concept. At production scale, with real operational requirements, it creates a class of problems that are expensive to fix after the fact.&lt;/p&gt;&#xA;&lt;h2 id=&#34;the-vendor-lock-in-problem&#34;&gt;The Vendor Lock-in Problem&lt;/h2&gt;&#xA;&lt;p&gt;Directly using the OpenAI SDK, the Anthropic SDK, or any provider&amp;rsquo;s client library throughout your codebase creates tight coupling to that provider&amp;rsquo;s interface. When you want to:&lt;/p&gt;</description>
			</item>
			<item>
				<title>Spring Boot Dependency Injection Without Losing Your Architecture</title>
				<link>https://dplabs.tech/blog/spring-boot-dependency-injection/</link>
				<pubDate>Mon, 21 Jul 2025 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/spring-boot-dependency-injection/</guid>
				<description>&lt;p&gt;Spring&amp;rsquo;s dependency injection container is one of the most mature and capable DI frameworks available. It&amp;rsquo;s also capable of enabling architectures that are deeply coupled to Spring internals, impossible to test without a full Spring context, and opaque about their dependencies.&lt;/p&gt;&#xA;&lt;p&gt;The patterns that produce good Spring Boot architectures are not complicated. They require deliberate choices about when to use Spring and when to step back from it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;constructor-injection-is-non-negotiable&#34;&gt;Constructor Injection Is Non-Negotiable&lt;/h2&gt;&#xA;&lt;p&gt;Spring supports three injection mechanisms: constructor, setter, and field injection. Field injection (&lt;code&gt;@Autowired&lt;/code&gt; on a field) is the most common and the worst.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Security Is an Architecture Concern</title>
				<link>https://dplabs.tech/blog/security-is-architecture-concern/</link>
				<pubDate>Mon, 26 May 2025 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/security-is-architecture-concern/</guid>
				<description>&lt;p&gt;Security gets treated as a feature set: authentication, authorization, input validation, encryption. Implement those features and the system is secure. This framing is wrong and produces systems that are secure in obvious ways while vulnerable in non-obvious ones.&lt;/p&gt;&#xA;&lt;p&gt;Security is an emergent property of architectural decisions: where trust boundaries are placed, how data flows between components, what permissions components have, how failures are handled. These decisions are made during design, not during a security review at the end.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Technical Debt: Not All Debt Is Bad</title>
				<link>https://dplabs.tech/blog/technical-debt-not-all-bad/</link>
				<pubDate>Mon, 03 Mar 2025 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/technical-debt-not-all-bad/</guid>
				<description>&lt;p&gt;Ward Cunningham introduced the technical debt metaphor to explain to non-technical stakeholders why code needed to be refactored. The analogy to financial debt was deliberate: sometimes you borrow money to move faster, and the interest compounds over time until the debt needs to be paid.&lt;/p&gt;&#xA;&lt;p&gt;Over time, the metaphor has been stretched to cover every imperfect thing in a codebase. This is not useful. Not all debt is the same. Not all debt should be paid down.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Monolith vs Microservices: Starting With the Right Question</title>
				<link>https://dplabs.tech/blog/monolith-vs-microservices/</link>
				<pubDate>Mon, 06 Jan 2025 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/monolith-vs-microservices/</guid>
				<description>&lt;p&gt;The monolith vs microservices debate has produced more heat than light over the past decade. Both sides have oversimplified. &amp;ldquo;Monoliths don&amp;rsquo;t scale&amp;rdquo; is demonstrably false — StackOverflow ran a monolith for years serving massive traffic. &amp;ldquo;Microservices are only for large teams&amp;rdquo; ignores the many small teams that have shipped them successfully.&lt;/p&gt;&#xA;&lt;p&gt;The real question is not which architecture is better in the abstract. It&amp;rsquo;s which architecture fits your current constraints: your team size, your organizational structure, your operational maturity, and your actual scaling requirements.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Event-Driven Architecture: When Events Help and When They Hurt</title>
				<link>https://dplabs.tech/blog/event-driven-architecture/</link>
				<pubDate>Mon, 23 Dec 2024 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/event-driven-architecture/</guid>
				<description>&lt;p&gt;Event-driven architecture has become fashionable, which means it&amp;rsquo;s being applied in situations where it doesn&amp;rsquo;t fit. Events are a powerful architectural tool for specific problems. They&amp;rsquo;re a significant operational burden when applied indiscriminately.&lt;/p&gt;&#xA;&lt;p&gt;Understanding when events help and when they hurt requires understanding what problems they actually solve.&lt;/p&gt;&#xA;&lt;h2 id=&#34;events-vs-commands&#34;&gt;Events vs Commands&lt;/h2&gt;&#xA;&lt;p&gt;The distinction matters more than most tutorials acknowledge.&lt;/p&gt;&#xA;&lt;p&gt;A &lt;strong&gt;command&lt;/strong&gt; expresses intent: &amp;ldquo;place this order,&amp;rdquo; &amp;ldquo;cancel this payment,&amp;rdquo; &amp;ldquo;reserve this inventory item.&amp;rdquo; It&amp;rsquo;s addressed to a specific recipient and implies that recipient is responsible for handling it. Commands can be rejected. They have an expected response.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Modern Spring Boot Architecture: Beyond the Three-Layer Application</title>
				<link>https://dplabs.tech/blog/modern-spring-boot-architecture/</link>
				<pubDate>Mon, 02 Dec 2024 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/modern-spring-boot-architecture/</guid>
				<description>&lt;p&gt;The three-layer architecture — controllers, services, repositories — is how most Spring Boot tutorials present application structure. It&amp;rsquo;s a reasonable starting point. It&amp;rsquo;s also a pattern that breaks down as applications grow.&lt;/p&gt;&#xA;&lt;p&gt;The problems are predictable: services become God classes with hundreds of methods, repository calls leak into controllers, domain logic spreads across multiple layers, and changing anything requires understanding the entire application at once. The layered architecture doesn&amp;rsquo;t enforce boundaries — it suggests them. Suggestions decay under deadline pressure.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Architecture Decision Records: Making Technical Decisions Explicit</title>
				<link>https://dplabs.tech/blog/architecture-decision-records/</link>
				<pubDate>Mon, 11 Nov 2024 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/architecture-decision-records/</guid>
				<description>&lt;p&gt;Every significant technical decision your team makes will be questioned later. When the original authors have left. When the context has changed. When someone proposes replacing the system. When a new engineer asks &amp;ldquo;why does this work like this?&amp;rdquo;&lt;/p&gt;&#xA;&lt;p&gt;Most teams have no good answer to these questions. The reasons behind decisions live in people&amp;rsquo;s heads, in Slack threads that are impossible to find, or nowhere at all.&lt;/p&gt;&#xA;&lt;p&gt;Architecture Decision Records are a lightweight practice that fixes this. They capture not just what was decided, but why — including what was considered and rejected. The investment is small. The return compounds over time.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Distributed Systems: The Problems You Get for Free</title>
				<link>https://dplabs.tech/blog/distributed-systems-problems/</link>
				<pubDate>Mon, 28 Oct 2024 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/distributed-systems-problems/</guid>
				<description>&lt;p&gt;Every system that communicates over a network is a distributed system, and distributed systems fail in ways that single-process applications don&amp;rsquo;t. This is not opinion — it&amp;rsquo;s physics. Networks drop packets. Clocks drift. Services restart. Disks fail. These things happen regardless of how carefully you write your application code.&lt;/p&gt;&#xA;&lt;p&gt;The teams that get distributed systems right don&amp;rsquo;t eliminate these failures. They design so that their systems remain correct despite them.&lt;/p&gt;</description>
			</item>
			<item>
				<title>The Modular Monolith: An Architecture Pattern That Deserves More Attention</title>
				<link>https://dplabs.tech/blog/modular-monolith-architecture/</link>
				<pubDate>Mon, 14 Oct 2024 00:00:00 +0000</pubDate>
				<guid>https://dplabs.tech/blog/modular-monolith-architecture/</guid>
				<description>&lt;p&gt;The software industry has a microservices fixation. Over the last decade, &amp;ldquo;monolith&amp;rdquo; became almost a pejorative, and teams moved to distributed architectures before they had the scale, team size, or operational maturity to justify them.&lt;/p&gt;&#xA;&lt;p&gt;The result has been widespread over-engineering: systems that are harder to understand, harder to debug, harder to change, and more expensive to operate — not because distributed systems are inherently bad, but because the problems they solve weren&amp;rsquo;t actually present.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
