<?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 Blogfolio Najib</title>
		<link>https://najib.id/en/tags/architecture/</link>
		<description>Recent content in Architecture on Blogfolio Najib</description>
		<generator>Hugo</generator>
		<language>en-US</language>
		
		
		
			<copyright>This work is licensed under a Creative Commons Attribution-NonCommercial 4.0 International License.</copyright>
		
		
			<lastBuildDate>Thu, 04 Jun 2026 13:12:35 +0700</lastBuildDate>
		
			<atom:link href="https://najib.id/en/tags/architecture/index.xml" rel="self" type="application/rss+xml" />
			<item>
				<title>Best Practices for Building APIs in Laravel and Go: Notes from a Real Project</title>
				<link>https://najib.id/en/writing/2026/laravel-go-api-best-practice/</link>
				<pubDate>Thu, 07 May 2026 10:28:00 +0700</pubDate>
				<guid>https://najib.id/en/writing/2026/laravel-go-api-best-practice/</guid>
				<description>&lt;p&gt;In the PHP-to-Go migration project I worked on, there was a phase where I had to audit every existing route and controller. The goal was simple: before migrating, understand which patterns are solid and which need to go. The result? Well, it was&amp;hellip; &lt;em&gt;enlightening&lt;/em&gt; hahaha.&lt;/p&gt;&#xA;&lt;p&gt;The project profile looked like this:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;strong&gt;460+ routes&lt;/strong&gt; in &lt;code&gt;api.php&lt;/code&gt;&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;58 controllers&lt;/strong&gt; of various sizes and patterns&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;5 auth guards&lt;/strong&gt;: &lt;code&gt;user-api&lt;/code&gt;, &lt;code&gt;partner-api&lt;/code&gt;, &lt;code&gt;open-api&lt;/code&gt;, &lt;code&gt;open-api-limited&lt;/code&gt;, &lt;code&gt;tms-api&lt;/code&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Varied rate limiting&lt;/strong&gt;: from 3/minute up to 100/minute&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;This article isn&amp;rsquo;t a &lt;em&gt;&amp;ldquo;how to build an API&amp;rdquo;&lt;/em&gt; tutorial. These are notes on patterns and anti-patterns I found, plus how the same patterns map to Go. So if you&amp;rsquo;re migrating or starting a new project, &lt;em&gt;hopefully&lt;/em&gt; you can skip some of the mistakes I already discovered hehe~&lt;/p&gt;</description>
			</item>
			<item>
				<title>Choosing a Tech Stack: Between Ego and Business</title>
				<link>https://najib.id/en/writing/2026/tech-stack-ego-vs-business/</link>
				<pubDate>Sat, 18 Apr 2026 00:00:00 +0000</pubDate>
				<guid>https://najib.id/en/writing/2026/tech-stack-ego-vs-business/</guid>
				<description>&lt;p&gt;&lt;em&gt;So anyway&lt;/em&gt;, a while back I was sitting in an internal meeting, Zoom or Google Meet, I honestly can&amp;rsquo;t remember, when a colleague suddenly lit up with enthusiasm:&lt;/p&gt;&#xA;&lt;blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;&amp;ldquo;What if we migrate to microservices while we&amp;rsquo;re at it? To be modern, to be scalable, to be-&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;&lt;em&gt;To be what, exactly?&lt;/em&gt; Our system at the time had two main features, a team of four people, and traffic that barely hit a thousand requests a day on its busiest day. The case for microservices? Zero. The enthusiasm for it? A hundred hahaha.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Clean Architecture: From Spaghetti Code to Readable Code</title>
				<link>https://najib.id/en/writing/2026/clean-architecture-intro/</link>
				<pubDate>Wed, 15 Apr 2026 00:00:00 +0000</pubDate>
				<guid>https://najib.id/en/writing/2026/clean-architecture-intro/</guid>
				<description>&lt;p&gt;I once wrote code that made perfect sense at the time. The logic was clear, the flow was neat, the variables were descriptive. Three months later, I opened the same file, &lt;em&gt;&amp;ldquo;what was this even supposed to do?&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;If you&amp;rsquo;ve ever felt the same way, welcome. You&amp;rsquo;re not alone hehe.&lt;/p&gt;&#xA;&lt;p&gt;This article isn&amp;rsquo;t a formal lecture on software architecture. It&amp;rsquo;s my notes on &lt;strong&gt;Clean Architecture&lt;/strong&gt;, explained in a way I wish someone had told me when I was still in university, not with jargon that makes your head spin.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Decision Journal: When It&#39;s Time to Migrate Your Tech Stack</title>
				<link>https://najib.id/en/writing/2026/tech-stack-migration-decision/</link>
				<pubDate>Fri, 10 Apr 2026 00:00:00 +0000</pubDate>
				<guid>https://najib.id/en/writing/2026/tech-stack-migration-decision/</guid>
				<description>&lt;p&gt;There was a moment where I stopped typing, leaned back in my chair, and realized: &lt;em&gt;&amp;ldquo;This isn&amp;rsquo;t about refactoring anymore.&amp;rdquo;&lt;/em&gt;&lt;/p&gt;&#xA;&lt;p&gt;I was debugging a bug in a GPS tracker system that had been running for years&lt;sup id=&#34;fnref:1&#34;&gt;&lt;a href=&#34;#fn:1&#34; class=&#34;footnote-ref&#34; role=&#34;doc-noteref&#34;&gt;1&lt;/a&gt;&lt;/sup&gt;. The bug was simple, vehicle position reports weren&amp;rsquo;t updating on the dashboard. But to fix it, I had to trace through four different files, two business logic layers tangled together, and one query written without an index. An hour later, the fix was two lines. Two lines.&lt;/p&gt;</description>
			</item>
			<item>
				<title>Migrating Legacy PHP to Go: Why, How, and Lessons Learned</title>
				<link>https://najib.id/en/writing/2026/legacy-php-to-go-migration/</link>
				<pubDate>Sat, 04 Apr 2026 00:00:00 +0000</pubDate>
				<guid>https://najib.id/en/writing/2026/legacy-php-to-go-migration/</guid>
				<description>&lt;p&gt;I&amp;rsquo;ve been in a position where a PHP codebase had grown beyond its limits, new features were harder to add, bugs appeared more frequently, and every deployment felt like flipping a coin. Not because PHP is bad, but because a system built over years without clear architecture eventually becomes its own worst enemy. I remember one day having to rollback three times in a single afternoon because of a &amp;ldquo;simple&amp;rdquo; deploy. My stress level that day&amp;hellip; yeah, let&amp;rsquo;s not go there hahaha.&lt;/p&gt;</description>
			</item>
	</channel>
</rss>
