<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Notes of SoftwareArchitect.ID]]></title><description><![CDATA[Software Architect's Diary: Up and Downs, Ins and Outs of a Software Architect's life story.]]></description><link>https://notes.softwarearchitect.id</link><image><url>https://substackcdn.com/image/fetch/$s_!kywx!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F17ca0f39-fc04-4fee-8a2c-fb9cf72b23b0_512x512.png</url><title>Notes of SoftwareArchitect.ID</title><link>https://notes.softwarearchitect.id</link></image><generator>Substack</generator><lastBuildDate>Thu, 09 Apr 2026 06:18:02 GMT</lastBuildDate><atom:link href="https://notes.softwarearchitect.id/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Iman Tumorang]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[iman@softwarearchitect.id]]></webMaster><itunes:owner><itunes:email><![CDATA[iman@softwarearchitect.id]]></itunes:email><itunes:name><![CDATA[Iman Tumorang]]></itunes:name></itunes:owner><itunes:author><![CDATA[Iman Tumorang]]></itunes:author><googleplay:owner><![CDATA[iman@softwarearchitect.id]]></googleplay:owner><googleplay:email><![CDATA[iman@softwarearchitect.id]]></googleplay:email><googleplay:author><![CDATA[Iman Tumorang]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Combining Modular Monolith and Hexagonal Architecture while Maintaining Domain Driven Design Principles (part 1)]]></title><description><![CDATA[A short and quick story about how to design a Modular Monolith and Hexagonal Architecture, combined by keeping the Domain Driven Design principle]]></description><link>https://notes.softwarearchitect.id/p/combining-modular-monolith-and-hexagonal</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/combining-modular-monolith-and-hexagonal</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Thu, 13 Nov 2025 17:25:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!MhRt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Today&#8217;s story originates from a recent client case at SoftwareArchitect.ID. It began when a team lead from the client company contacted me via email (iman[at]softwarearchitect.id &#8212; feel free to email me for technical advice, especially on software architecture, transitioning from monolith to microservices, or migrating to cloud from on-premises). The discussion continued through a few discovery calls, leading us to an agreement in which I will offer consulting services to help them plan for scalability and the shift from a monolith to microservices.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe to get the latest story of our client use case anytime in the future.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Although the monolith performed well for many years, moving to microservices became necessary due to the current process and scalability challenges they encountered, such as:</p><ul><li><p>The desire for an isolated fault or loose coupling between domains.</p></li><li><p>Most importantly, <strong>per their customer request</strong>, they need to scale certain parts of their systems differently: some features require more resources due to high throughput, while others, like back-office services, handle low traffic.</p></li></ul><p>However, the transition to microservices was carried out quite aggressively. As a result, costs have risen roughly 8 to 10 times compared to the previous monolithic setup. And that shocked management when they saw the cost growing 8-10 times more than expected.</p><p>After a few weeks of discussion, I learned about their pain points and expectations from management, engineering, and the business needs. Along with many tradeoffs and capabilities that the system must have, such as scalability, loose coupling, isolated faults, and predictive costs, I proposed some options. However, the most suitable option for them at that time was to revert to a monolith, but in a modular way. But also decouple some components into separate microservices. What I told them is, &#8220;Modular monolith, decouple as needed.&#8221;</p><p>Aside from the modular monolith, I also introduced them to Hexagonal architecture and how we can combine it with the modular monolith to create a powerful solution for their current system.</p><p>In this article, I will briefly walk through how to design a modular monolith pragmatically. I know there are many examples already available on the internet. But here, I will use Golang. I&#8217;m not sure if I can do it entirely in Golang, but I&#8217;ll try to make it as close as possible to the Hexagonal architecture combined with the modular monolith approach.</p><h3>Layered Architecture</h3><p>I started my journey when the Model-View-Controller (MVC) pattern was a thing. I started web development with Yii Framework and Laravel back then, when I was still in college. And after I graduated, I landed in real adult life, and I met new things. And back then, layered architecture was still a thing, similar to MVC &#8212; kinda, but it&#8217;s mainly for the backend, consisting of Repository (data layer), Service, and Controller.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TNQV!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TNQV!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 424w, https://substackcdn.com/image/fetch/$s_!TNQV!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 848w, https://substackcdn.com/image/fetch/$s_!TNQV!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 1272w, https://substackcdn.com/image/fetch/$s_!TNQV!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TNQV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png" width="1456" height="887" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:887,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168414,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!TNQV!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 424w, https://substackcdn.com/image/fetch/$s_!TNQV!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 848w, https://substackcdn.com/image/fetch/$s_!TNQV!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 1272w, https://substackcdn.com/image/fetch/$s_!TNQV!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d71612-437e-4ad6-8cd1-2f8d0c9d357e_2524x1538.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">layered architecture</figcaption></figure></div><p>In this layered architecture, there are usually about three main layers or sometimes more, with a DTO layer. This practice typically divides the application horizontally, with many services in the service layer, many controllers in the controller package, and so on.</p><p>The disadvantage of this approach is that, although it is layered, changes to any layer (repository, service, controller) can affect the entire stack from top to bottom. Moreover, people are beginning to realize that having everything connected in this way is not truly scalable.</p><h3>The Rise of Hexagonal Architecture</h3><p>Then, some experts, such as <a href="https://alistair.cockburn.us/hexagonal-architecture">Alistair Cockburn</a> (the inventor of the Hexagonal architecture), began evangelizing it. The principle is similar to applying the classic adapter pattern in a more structured way.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SmJU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SmJU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 424w, https://substackcdn.com/image/fetch/$s_!SmJU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 848w, https://substackcdn.com/image/fetch/$s_!SmJU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!SmJU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SmJU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png" width="1456" height="1098" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1098,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;BlueZone: Hexagonal Application Figure&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="BlueZone: Hexagonal Application Figure" title="BlueZone: Hexagonal Application Figure" srcset="https://substackcdn.com/image/fetch/$s_!SmJU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 424w, https://substackcdn.com/image/fetch/$s_!SmJU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 848w, https://substackcdn.com/image/fetch/$s_!SmJU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 1272w, https://substackcdn.com/image/fetch/$s_!SmJU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a783f69-68ff-47bb-9375-c36cac18a73e_1645x1240.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">hexagonal architecture</figcaption></figure></div><blockquote><p>Diagram referenced from: https://github.com/jmgarridopaz/bluezone</p></blockquote><p>The domain contains the system&#8217;s business logic and language. It provides ports for both inbound and outbound external connections. These ports are connected to, consumed by, or implemented by adapters.</p><p>For example, an inbound port might be used by a REST API controller to receive requests and send the request context to the domain layer through a port or interface. Similarly, in outbound communication, the domain layer uses outbound ports to perform tasks such as querying data or calling external services.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8mnR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8mnR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 424w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 848w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1272w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8mnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png" width="979" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:979,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187891,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8mnR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 424w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 848w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1272w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">hexagonal architecture interface</figcaption></figure></div><p>The same idea can be used to develop a &#8220;super app&#8221; that might include a CLI interface, a queue interface, REST, and more, as shown in the earlier diagram. This approach also eliminates the need to separate the API from the repository of Cron job scripts. </p><p>Similarly, Kafka consumers and RabbitMQ consumers do not need to be stored in different repositories. All these components should reside in a single repository because, under the hexagonal architecture, they serve as adapters, while the core logic resides in the domain layer.</p><p>However, if we focus closely on the details and use the concept of &#8220;layered architecture,&#8221; which involves three layers within an application: repository (data), service, and controller&#8212;along with hexagonal architecture, it will resemble the diagram below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hWD5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hWD5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 424w, https://substackcdn.com/image/fetch/$s_!hWD5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 848w, https://substackcdn.com/image/fetch/$s_!hWD5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 1272w, https://substackcdn.com/image/fetch/$s_!hWD5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hWD5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png" width="1456" height="1112" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1112,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:618038,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hWD5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 424w, https://substackcdn.com/image/fetch/$s_!hWD5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 848w, https://substackcdn.com/image/fetch/$s_!hWD5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 1272w, https://substackcdn.com/image/fetch/$s_!hWD5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc809720a-9105-4690-90ae-b92d1585ca43_3110x2375.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">hexagonal architecture in code abstraction</figcaption></figure></div><p>If you compare the first layered architecture mentioned earlier to this hexagonal architecture, both are similar. However, in this hexagonal architecture, we use the term <code>ports</code> which are essentially interface contracts. An interface, as in Java, C#, or Go, consists only of function definitions without any implementation.</p><p>Several years ago, I made a blog post and a GitHub repository about &#8220;Go Clean Architecture&#8221; that actually follows this pattern here (https://github.com/bxcodec/go-clean-arch).  In a way, it&#8217;s similar in that everything is connected through an interface (ports).  </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5N8x!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5N8x!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 424w, https://substackcdn.com/image/fetch/$s_!5N8x!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 848w, https://substackcdn.com/image/fetch/$s_!5N8x!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 1272w, https://substackcdn.com/image/fetch/$s_!5N8x!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5N8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png" width="991" height="431" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:431,&quot;width&quot;:991,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;golang clean architecture&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="golang clean architecture" title="golang clean architecture" srcset="https://substackcdn.com/image/fetch/$s_!5N8x!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 424w, https://substackcdn.com/image/fetch/$s_!5N8x!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 848w, https://substackcdn.com/image/fetch/$s_!5N8x!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 1272w, https://substackcdn.com/image/fetch/$s_!5N8x!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1e558496-63c6-4f09-b9ae-86da17bea478_991x431.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">clean architecture</figcaption></figure></div><blockquote><p>Diagram reference from https://github.com/bxcodec/go-clean-arch</p></blockquote><p>From Uncle Bob, who inspired me to write the <a href="https://github.com/bxcodec/go-clean-arch">Go Clean Architecture</a>, I learned that the deeper a layer is, the more it should be abstracted. </p><p>And quoting the <a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">blog post</a> from Uncle Bob:</p><blockquote><p>No, the circles are schematic. You may find that you need more than just these four. There&#8217;s no rule that says you must always have just these four. However, <em>The Dependency Rule</em> always applies. Source code dependencies always point inwards. As you move inwards the level of abstraction increases. The outermost circle is low level concrete detail. As you move inwards the software grows more abstract, and encapsulates higher level policies. The inner most circle is the most general.</p></blockquote><p>In a way similar to Hexagonal, the deeper layer (the domain) will be agnostic to any concrete implementation/technology; the domain layer shouldn&#8217;t talk about &#8220;SQL&#8221;, it shouldn&#8217;t talk about &#8220;connection pooling&#8221;, etc. In fact, it only focuses on the business domain logic.</p><p><strong>Problem with this approach?</strong></p><p>At least, based on my experience, even with this kind of separation, the structure can get somewhat messier. Since slicing occurs across horizontal layers (repository, service, and controller), and additional files, such as interfaces (ports), are introduced, there are times when certain services import from other repositories. This approach increases complexity and steepens the learning curve, as components tend to import from each other and reside in the same directory.</p><h3><strong>Vertical Slicing with Domain Drive Design</strong></h3><p>Actually, the problem I mentioned earlier is quite common. Martin Fowler supports this in his article, where he also encourages vertical slicing alongside horizontal slicing to reduce the complexity of an extensive application with many domains.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5h7g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5h7g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 424w, https://substackcdn.com/image/fetch/$s_!5h7g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 848w, https://substackcdn.com/image/fetch/$s_!5h7g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 1272w, https://substackcdn.com/image/fetch/$s_!5h7g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5h7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png" width="541" height="501" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:501,&quot;width&quot;:541,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5h7g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 424w, https://substackcdn.com/image/fetch/$s_!5h7g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 848w, https://substackcdn.com/image/fetch/$s_!5h7g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 1272w, https://substackcdn.com/image/fetch/$s_!5h7g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F13377406-aa14-4393-a23b-d92ca5ba5759_541x501.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Martin Fowler Domain data separation</figcaption></figure></div><p>Quoting from Martin Fowler's <a href="https://martinfowler.com/bliki/PresentationDomainDataLayering.html">blog post</a></p><blockquote><p>Although presentation-domain-data separation is a common approach, it should only be applied at a relatively small granularity. As an application grows, each layer can get sufficiently complex on its own that you need to modularize further. When this happens it&#8217;s usually not best to use presentation-domain-data as the higher level of modules. Often frameworks encourage you to have something like view-model-data as the top level namespaces; that&#8217;s OK for smaller systems, but once any of these layers gets too big you should split your top level into domain oriented modules which are internally layered.</p></blockquote><p>As Martin Fowler stated, we also need to split the application vertically into module groups (domains), while maintaining the layered structure internally. So with the payment example previously, it will be evolved into a diagram like this below,</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YzNM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YzNM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 424w, https://substackcdn.com/image/fetch/$s_!YzNM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 848w, https://substackcdn.com/image/fetch/$s_!YzNM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 1272w, https://substackcdn.com/image/fetch/$s_!YzNM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YzNM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png" width="1456" height="1300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1300,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:623229,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!YzNM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 424w, https://substackcdn.com/image/fetch/$s_!YzNM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 848w, https://substackcdn.com/image/fetch/$s_!YzNM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 1272w, https://substackcdn.com/image/fetch/$s_!YzNM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa16cdbc2-1261-4d4c-a660-9731195e056d_2876x2567.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">vertical sliced layers (module)</figcaption></figure></div><p>There were a few times when I also began applying this pattern to some of my projects, organizing them vertically by domain. For example, the payment module includes all payment-related implementations, from the service layer to the data (repository) layer.</p><p>This project organization helps build complex systems. Even with the rise of microservices, this pattern can still manage complexity. We can move from a high-level distributed system to more detailed code grouped by domain within each microservice, with each sub-domain divided horizontally by roles such as controllers, services, repositories/data.</p><h3>Entering the Modular Monolith Era</h3><p>The previous design, vertically sliced (based on domain) with a Hexagonal architecture, looks really nice and neat. This becomes somewhat cargo-culted among people: &#8220;if you build an application, you must do it in hexagonal, and vertically sliced based on domain,&#8221; etc.</p><p>Nevertheless, it works effectively with microservices or with services that are already set up as such. Properly organizing each service with a similar pattern is very helpful. And since it&#8217;s already isolated in a microservice, the domain usually remains within the same bounded context. Therefore, a vertically sliced, hexagonal architecture is invaluable in this situation.</p><p>However, microservices are not a cure-all for every problem. They provide solutions but also introduce new challenges, such as high costs and debugging difficulties. As a result, some are returning to a monolithic structure in a modular form, often called a modular monolith. This approach has gained popularity because it is less expensive than microservices and can be split into microservices later if needed.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MhRt!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MhRt!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 424w, https://substackcdn.com/image/fetch/$s_!MhRt!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 848w, https://substackcdn.com/image/fetch/$s_!MhRt!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 1272w, https://substackcdn.com/image/fetch/$s_!MhRt!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MhRt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png" width="1352" height="1133" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1133,&quot;width&quot;:1352,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:78340,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MhRt!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 424w, https://substackcdn.com/image/fetch/$s_!MhRt!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 848w, https://substackcdn.com/image/fetch/$s_!MhRt!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 1272w, https://substackcdn.com/image/fetch/$s_!MhRt!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6a8d9dfb-8751-4c7d-b4f3-523352c0aed8_1352x1133.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">modular monolith</figcaption></figure></div><p>Rather than creating multiple microservices with associated costs, all functionality stays within a single monolithic service. Internally, however, it is organized into modules based on different domains.</p><p><strong>Implementation Challenges</strong></p><p>This is how the problem started. If we build a modular monolith with all domains separated into individual packages or directories, cross-boundary calls still pose issues. For example, PaymentService needs to query the PaymentSettings, which belong to a different module.</p><p>Typically, based on my observations and past experiences, PaymentService imports the PaymentSettingsRepository directly. This is feasible because all interface modifiers are usually public. Technically, crossing imports to access the repository port or layer between domains is always possible. This can confuse some people, especially when working with a modular monolith. And it only makes the code base messier.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UzOA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UzOA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 424w, https://substackcdn.com/image/fetch/$s_!UzOA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 848w, https://substackcdn.com/image/fetch/$s_!UzOA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 1272w, https://substackcdn.com/image/fetch/$s_!UzOA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UzOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png" width="1456" height="1300" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1300,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:650284,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!UzOA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 424w, https://substackcdn.com/image/fetch/$s_!UzOA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 848w, https://substackcdn.com/image/fetch/$s_!UzOA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 1272w, https://substackcdn.com/image/fetch/$s_!UzOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd36cdd04-98d9-4637-b6c6-f7c7740e07d5_2876x2567.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">anti-pattern in modular monolith, accessing another module's repository directly</figcaption></figure></div><p><strong>But what&#8217;s wrong with that approach?</strong></p><p>As I previously mentioned, this issue is not a concern if we view it merely as a simple Monolith. However, our goal is to develop a &#8220;modular monolith.&#8221; Such a structure should also facilitate easier decoupling into standalone microservices when necessary. </p><p>Building on that idea, I foresee a future where we may need to split the domain into a separate microservice. For instance, we could eventually decouple the payment settings domain into its own microservice. In a microservice architecture, it seems unsuitable for the Payment Service microservice to access the Setting data layer (repository) directly. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AqwI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AqwI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 424w, https://substackcdn.com/image/fetch/$s_!AqwI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 848w, https://substackcdn.com/image/fetch/$s_!AqwI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 1272w, https://substackcdn.com/image/fetch/$s_!AqwI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AqwI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png" width="1456" height="388" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:388,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:226577,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AqwI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 424w, https://substackcdn.com/image/fetch/$s_!AqwI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 848w, https://substackcdn.com/image/fetch/$s_!AqwI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 1272w, https://substackcdn.com/image/fetch/$s_!AqwI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1fc0fa53-1e89-4070-a63e-a6bd45de3616_4463x1190.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">microservice shouldn&#8217;t access another microservice's database</figcaption></figure></div><p>In microservices, direct database access between services is considered an anti-pattern. When constructing a Modular Monolith, we should adhere to this principle when organizing modules within a monolithic application.</p><p>For example, if the Payment Service in a microservice architecture communicates with PaymentSettings via a &#8220;public&#8221; API such as REST, gRPC, or GraphQL, then in a Modular Monolith, the Payment Domain Module should similarly interact with the Payment Settings Domain or Module through a similar &#8220;public&#8221; API, interface, or contract. The main difference is that microservice communication occurs over a network, whereas within a Modular Monolith, communication is direct within the same process.</p><p>So, based on the previous diagram, ideally, we should design them as shown in the following diagram.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!P2Qs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!P2Qs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 424w, https://substackcdn.com/image/fetch/$s_!P2Qs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 848w, https://substackcdn.com/image/fetch/$s_!P2Qs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 1272w, https://substackcdn.com/image/fetch/$s_!P2Qs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!P2Qs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png" width="1456" height="1269" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1269,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:728451,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!P2Qs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 424w, https://substackcdn.com/image/fetch/$s_!P2Qs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 848w, https://substackcdn.com/image/fetch/$s_!P2Qs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 1272w, https://substackcdn.com/image/fetch/$s_!P2Qs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0770ea98-6dab-459a-88e7-6df749431bfc_2936x2559.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">introducing a &#8220;public API&#8221; as the communication gateway between modules</figcaption></figure></div><p>Instead of importing the payment-settings repository, here, PaymentService imports the PaymentSettingService interface (public API). And Payment Settings only exports the public API (interface) on the service while keeping other interfaces isolated internally.</p><p>The same pattern can also be combined with the CQRS pattern. If combined, we can view it as shown in the diagram below &#8212; I&#8217;ve included two options: one for direct command and another for async command via a queue or message broker. But the concept should remain similar. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!MfVp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!MfVp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 424w, https://substackcdn.com/image/fetch/$s_!MfVp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 848w, https://substackcdn.com/image/fetch/$s_!MfVp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 1272w, https://substackcdn.com/image/fetch/$s_!MfVp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!MfVp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png" width="1456" height="908" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/caa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:908,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:991674,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!MfVp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 424w, https://substackcdn.com/image/fetch/$s_!MfVp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 848w, https://substackcdn.com/image/fetch/$s_!MfVp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 1272w, https://substackcdn.com/image/fetch/$s_!MfVp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcaa6e684-cd29-4510-907f-64577c4bad86_4105x2559.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">advanced implementation of public API with modular monolith</figcaption></figure></div><p>So even later, we decouple them into separate microservices, with everything already isolated. We only need to change the protocol from a direct method call to a network API call. If you are already using a queue, that&#8217;s even better because the messaging is already abstracted in a modular monolith.</p><h2>Final Words</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!teaT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!teaT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!teaT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!teaT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!teaT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!teaT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg" width="788" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:788,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!teaT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!teaT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!teaT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!teaT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fff2e6a4b-3d74-418d-bab4-9d77fe815ae7_788x500.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Okay, enough of the theory &#8212; I know you guys are really eager to see how to do it in practice. With Java, C#, or any programming language that fully supports OOP, this should be straightforward. Since the key to building the modular monolith is using the access modifiers (private, protected, public) at the package level, which are built-in features in those programming languages. The main factor is determining which interfaces or functions constitute the &#8220;public API&#8221; and which should not be exposed to other modules.</p><p>But since I haven&#8217;t seen any Golang implementation that satisfies what I know (at least), I will write the example in Golang.</p><p>For simplicity, I will use the Payment and Payment Settings example. It might be too simple as an example to showcase the modular monolith. But hey, we have to start somewhere before going further to a more complex example, right?</p><p>The step-by-step process for building the modular monolith in Golang will be explained in the 2nd article after this. Initially, I put all the content into one article, but due to the newsletter&#8217;s limitations, I had to split it into two articles.</p><ul><li><p>Combining Modular Monolith and Hexagonal Architecture while Maintaining Domain Driven Design Principles (part 1) &#8212; <strong>this article</strong></p></li><li><p><a href="https://notes.softwarearchitect.id/p/developing-modular-monolith-and-hexagonal">Developing Modular Monolith and Hexagonal Architecture in Golang while Maintaining Domain Driven Design Principles (part 2)</a> <strong>&#8212; subsequent article</strong></p></li></ul><div class="pullquote"><p>Since establishing SoftwareArchitect.ID as my brand, I&#8217;ve worked as a fractional technical leader, mainly as a fractional software architect, for several years. My experience spans from small startups to medium-sized companies, more recently, serving as an advisor and architect for an enterprise migrating to the cloud and transitioning from a large monolith to microservices. <em>Contact me at iman[at]softwarearchitect.id for consultation or a fractional role as an architect or tech lead related to building a scalable product and platform</em></p></div>]]></content:encoded></item><item><title><![CDATA[Developing Modular Monolith and Hexagonal Architecture in Golang while Maintaining Domain Driven Design Principles (part 2)]]></title><description><![CDATA[A short and quick story about how to develop a Modular Monolith and Hexagonal Architecture, combined by keeping the Domain Driven Design principle with Golang]]></description><link>https://notes.softwarearchitect.id/p/developing-modular-monolith-and-hexagonal</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/developing-modular-monolith-and-hexagonal</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Thu, 13 Nov 2025 17:22:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ysi5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>This article is a continuation of the previous one due to the newsletter&#8217;s limitations. I can&#8217;t send a 20-minute article in a single email to readers because it would degrade the experience (some text would be missing). Instead, I break it down into multiple articles.</p><ul><li><p><a href="https://notes.softwarearchitect.id/p/combining-modular-monolith-and-hexagonal">Combining Modular Monolith and Hexagonal Architecture while Maintaining Domain Driven Design Principles (part 1)</a> <strong>&#8212; previous article</strong></p></li><li><p><a href="https://notes.softwarearchitect.id/p/developing-modular-monolith-and-hexagonal">Developing Modular Monolith and Hexagonal Architecture in Golang while Maintaining Domain Driven Design Principles (part 2)</a> <strong>&#8212; this article</strong></p></li></ul><p>So, if you haven&#8217;t read the previous part, please do so before continuing. It&#8217;s required to read it first to understand my reasoning behind the implementation in this article.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe to get the latest story of our client use case anytime in the future.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p><div><hr></div><p>The code repository of this article can be seen here: <a href="https://github.com/bxcodec/golang-ddd-modular-monolith-with-hexagonal">github.com/bxcodec/golang-ddd-modular-monolith-with-hexagonal</a>. I will reference some code from the repository, and you might need to open it while reading this.</p><div><hr></div><h3>Step 1: Defining the Bounded Context</h3><p>The first step before developing a modular monolith is to draw the domain boundaries. It&#8217;s sometimes hard to do, but it will pay off in the long run.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ysi5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ysi5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 424w, https://substackcdn.com/image/fetch/$s_!ysi5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 848w, https://substackcdn.com/image/fetch/$s_!ysi5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 1272w, https://substackcdn.com/image/fetch/$s_!ysi5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ysi5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png" width="1456" height="572" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:572,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:484929,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ysi5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 424w, https://substackcdn.com/image/fetch/$s_!ysi5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 848w, https://substackcdn.com/image/fetch/$s_!ysi5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 1272w, https://substackcdn.com/image/fetch/$s_!ysi5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2b32838c-9864-43fb-b5fc-4e6a89037293_4490x1764.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">bounded context in DDD</figcaption></figure></div><p>In the example above, there are three bounded contexts: Sales, Inventory, and Shipping. Each context uses a different language or sometimes the same term with a different meaning. Grouping these into their respective domains isolates communication, simplifying understanding of the entire business process.</p><p>A good starting point to draw the domain boundaries is to follow Domain-Driven Design (DDD) technique, such as using </p><ul><li><p>Event Storming</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!down!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!down!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 424w, https://substackcdn.com/image/fetch/$s_!down!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 848w, https://substackcdn.com/image/fetch/$s_!down!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 1272w, https://substackcdn.com/image/fetch/$s_!down!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!down!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png" width="1456" height="610" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:610,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!down!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 424w, https://substackcdn.com/image/fetch/$s_!down!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 848w, https://substackcdn.com/image/fetch/$s_!down!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 1272w, https://substackcdn.com/image/fetch/$s_!down!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F9a4b75cf-6e63-41c4-b437-1946e9e0dc5c_1587x665.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">eventstorming</figcaption></figure></div><ul><li><p>Or, Domain Storytelling for domain modeling.</p></li></ul><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l26v!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l26v!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 424w, https://substackcdn.com/image/fetch/$s_!l26v!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 848w, https://substackcdn.com/image/fetch/$s_!l26v!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 1272w, https://substackcdn.com/image/fetch/$s_!l26v!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l26v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png" width="1456" height="701" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:701,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!l26v!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 424w, https://substackcdn.com/image/fetch/$s_!l26v!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 848w, https://substackcdn.com/image/fetch/$s_!l26v!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 1272w, https://substackcdn.com/image/fetch/$s_!l26v!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F42f6b977-e118-4c0f-b8be-9444118eaa45_1600x770.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Domain storytelling </figcaption></figure></div><p>The goal is to define a bounded context within a sub-domain and group related elements so they continue to communicate using the same ubiquitous language. And later, within the same bounded context, we can group them into a single module.</p><p>So, back to our example of a payment service. We will group them into two domains &#8212; note that in DDD, the payment settings service and payment service are often still in the same bounded context. For simplicity, we can imagine building a payment gateway that supports multiple payment methods. We can also assume that payment settings can be extracted as a different bounded context.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YFjy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YFjy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YFjy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YFjy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YFjy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YFjy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png" width="346" height="577.042345276873" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1024,&quot;width&quot;:614,&quot;resizeWidth&quot;:346,&quot;bytes&quot;:72768,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!YFjy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 424w, https://substackcdn.com/image/fetch/$s_!YFjy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 848w, https://substackcdn.com/image/fetch/$s_!YFjy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!YFjy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8f03cae6-4318-42ce-aee2-cce6e5320475_614x1024.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Code structure of a modular monolith in Golang</figcaption></figure></div><p>This bounded context will isolate all modules within their respective packages. As you can see, I have two domains, payment and payment-settings. Both are separated into different modules.</p><p>Inside each module, we will see: at least four types: factory, internal, module.go (module definition), and public-api.go (or just payment.go|setting.go| etc)&#8212;basically the public API definition for that module.</p><h4><strong>Factory</strong></h4><p>The factory essentially acts as the builder, the wiring manager, and the dependency injection manager. Basically, it helps us connect the module that will be exposed and assembled in the main.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ZqAd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ZqAd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 424w, https://substackcdn.com/image/fetch/$s_!ZqAd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 848w, https://substackcdn.com/image/fetch/$s_!ZqAd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 1272w, https://substackcdn.com/image/fetch/$s_!ZqAd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ZqAd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png" width="1456" height="1481" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1481,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:398142,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!ZqAd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 424w, https://substackcdn.com/image/fetch/$s_!ZqAd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 848w, https://substackcdn.com/image/fetch/$s_!ZqAd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 1272w, https://substackcdn.com/image/fetch/$s_!ZqAd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffb42ff6b-36af-4335-aadb-6cc4a76cf1e9_1738x1768.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">factory example</figcaption></figure></div><h4>Internal</h4><p>In Golang, there is no granular access level / package-level modifier like private, protected, or public. Instead, Golang typically uses two levels of visibility:</p><ul><li><p>Exported (Public): functions, structs, or variables that start with a capital letter can be accessed from outside the package.</p></li><li><p>Unexported (Private): those beginning with a lowercase letter are only accessible within their own package.</p></li></ul><p>In Golang, there is also a concept of an &#8220;internal&#8221; package. Any code placed inside the internal directory won&#8217;t be accessible from external packages. Because of Golang&#8217;s limited features, I use the &#8220;internal&#8221; package to organize my code. I place all non-public APIs within internal, as illustrated in the screenshot below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PGMZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PGMZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 424w, https://substackcdn.com/image/fetch/$s_!PGMZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 848w, https://substackcdn.com/image/fetch/$s_!PGMZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 1272w, https://substackcdn.com/image/fetch/$s_!PGMZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PGMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png" width="590" height="442" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:442,&quot;width&quot;:590,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:31361,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!PGMZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 424w, https://substackcdn.com/image/fetch/$s_!PGMZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 848w, https://substackcdn.com/image/fetch/$s_!PGMZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 1272w, https://substackcdn.com/image/fetch/$s_!PGMZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff37ceb9b-113c-418f-beb4-fd5bf358f556_590x442.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">internal package in Golang</figcaption></figure></div><p>There are at least three packages: adapter, ports, and service. The adapter contains additional components that implement the technical details for the ports. The service can be considered the &#8220;domain&#8221; from a Hexagonal architecture perspective. However, since we are also implementing a Modular Monolith in which the public API must be accessible externally, I refer to it simply as &#8220;service.&#8221;</p><h4>Module Definition (module.go)</h4><p>This file will be a simple wrapper struct that holds information about the module itself. While it can be imported into other modules if needed, I strongly advise against this in Go to avoid circular dependencies. Instead, I use it here to organize components related to the module, such as controllers, services, and others.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!qNn_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!qNn_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 424w, https://substackcdn.com/image/fetch/$s_!qNn_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 848w, https://substackcdn.com/image/fetch/$s_!qNn_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 1272w, https://substackcdn.com/image/fetch/$s_!qNn_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!qNn_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png" width="1456" height="956" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:956,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:256971,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!qNn_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 424w, https://substackcdn.com/image/fetch/$s_!qNn_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 848w, https://substackcdn.com/image/fetch/$s_!qNn_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 1272w, https://substackcdn.com/image/fetch/$s_!qNn_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe587b542-4562-4ff4-90c0-f84720d088dc_1536x1008.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">module definition</figcaption></figure></div><h4>Public API Definition</h4><p><em>payment.go | setting.go | etc</em></p><p>Other than the module.go in the <strong>modules/&lt;module-name&gt;</strong> package, the rest serves as the &#8220;public API,&#8221; which defines the module itself. This public API will serve as the reference point for other modules that are interested in or depend on it.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JFTg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JFTg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 424w, https://substackcdn.com/image/fetch/$s_!JFTg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 848w, https://substackcdn.com/image/fetch/$s_!JFTg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 1272w, https://substackcdn.com/image/fetch/$s_!JFTg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JFTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png" width="1456" height="887" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:887,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:327118,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!JFTg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 424w, https://substackcdn.com/image/fetch/$s_!JFTg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 848w, https://substackcdn.com/image/fetch/$s_!JFTg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 1272w, https://substackcdn.com/image/fetch/$s_!JFTg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe361c587-25a2-49ae-a846-e48ea5bd098c_1908x1162.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">public API in a module</figcaption></figure></div><p>As we can see, we define the public API of the payment module here</p><ul><li><p>The Schema (Payment struct)</p></li><li><p>The API contract ( IPaymentService interface)</p></li></ul><p>Other modules can access this public API. They can import it directly or create a local copy in their own module, using this definition as a reference, as I explain further below.</p><h3>Step 2: Accessing Other Modules&#8217; Public API (Interface)</h3><p>Golang differs from Java, C#, and other programming languages. In Golang, there is a principle that most Golang engineers are already aware of: interfaces are usually defined as domain abstractions for external dependencies. </p><p>In our previous diagram, </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Cx-f!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Cx-f!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 424w, https://substackcdn.com/image/fetch/$s_!Cx-f!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 848w, https://substackcdn.com/image/fetch/$s_!Cx-f!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 1272w, https://substackcdn.com/image/fetch/$s_!Cx-f!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Cx-f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png" width="1456" height="969" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:969,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:446090,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!Cx-f!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 424w, https://substackcdn.com/image/fetch/$s_!Cx-f!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 848w, https://substackcdn.com/image/fetch/$s_!Cx-f!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 1272w, https://substackcdn.com/image/fetch/$s_!Cx-f!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a82adf0-b0da-413b-80bb-0f13d904967b_2162x1439.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">public API interface between modules</figcaption></figure></div><p>I show that PaymentService is likely &#8220;importing&#8221; the interface definition from PaymentSettings. This shows a simulation of how the module communicates with other modules via the public API.</p><p>In Golang, instead of importing the PaymentSettingService interface from the PaymentSetting module, the Payment module should define the interfaces it needs from the PaymentSettings module or any other modules. </p><p>This can also be viewed as specifying the necessary ports (hexagonal ports) for Payment while abstracting the different modules. This also illustrates Golang&#8217;s idiomatic practice. Even if PaymentSettingService has 10 methods, PaymentService only needs 1-2 methods, so it only defines a local interface with the methods it requires from PaymentSetting. This also isolates the domain module from the other domain modules if we apply the hexagonal architecture principle.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!UHWK!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!UHWK!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 424w, https://substackcdn.com/image/fetch/$s_!UHWK!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 848w, https://substackcdn.com/image/fetch/$s_!UHWK!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!UHWK!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!UHWK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png" width="1456" height="736" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/476edada-d829-4997-9263-e47947e94639_2800x1416.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:736,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:495922,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!UHWK!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 424w, https://substackcdn.com/image/fetch/$s_!UHWK!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 848w, https://substackcdn.com/image/fetch/$s_!UHWK!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 1272w, https://substackcdn.com/image/fetch/$s_!UHWK!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F476edada-d829-4997-9263-e47947e94639_2800x1416.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Create a local copy interface of the other modules&#8217; public API interface</figcaption></figure></div><p>The trade-off of this practice is that there will be a time when the contract between the module we import and the interface we define locally is inconsistent. But it introduces very loose coupling between modules. With this approach, each module can be developed independently.</p><h4><strong>But why not put them in ports?</strong></h4><p>You might ask why it can&#8217;t be in the ports package. &#8220;Since we are also following the Hexagonal Architecture, shouldn&#8217;t this be done alongside the other ports?&#8221;</p><p>The answer is about the modifier.</p><p>If you import the ports interface directly, eg, Go will throw a compilation error. You can&#8217;t import this interface because of &#8220;internal&#8221;. </p><p>For example, when I tried to import payment settings &#8220;internal&#8221; ports directly.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2UBy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2UBy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 424w, https://substackcdn.com/image/fetch/$s_!2UBy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 848w, https://substackcdn.com/image/fetch/$s_!2UBy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 1272w, https://substackcdn.com/image/fetch/$s_!2UBy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2UBy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png" width="1456" height="368" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:368,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:144530,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!2UBy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 424w, https://substackcdn.com/image/fetch/$s_!2UBy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 848w, https://substackcdn.com/image/fetch/$s_!2UBy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 1272w, https://substackcdn.com/image/fetch/$s_!2UBy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7d29a2d-d336-426c-9f53-61db7e0f8a0c_1882x476.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">trying to import other modules&#8217; &#8220;internal&#8221; package</figcaption></figure></div><p>And compile it:</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_w7X!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_w7X!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 424w, https://substackcdn.com/image/fetch/$s_!_w7X!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 848w, https://substackcdn.com/image/fetch/$s_!_w7X!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 1272w, https://substackcdn.com/image/fetch/$s_!_w7X!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_w7X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png" width="1456" height="134" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:134,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:156637,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!_w7X!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 424w, https://substackcdn.com/image/fetch/$s_!_w7X!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 848w, https://substackcdn.com/image/fetch/$s_!_w7X!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 1272w, https://substackcdn.com/image/fetch/$s_!_w7X!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb6d06175-2108-4d95-a76c-5ec5a8f0d7be_2738x252.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Compilation error because importing another module&#8217;s internal package</figcaption></figure></div><p>I got an error:</p><p><code>modules/payment/internal/service/service.go:6:2: use of internal package github.com/bxcodec/golang-ddd-modular-monolith-with-hexagonal/modules/payment-settings/internal/ports not allowed</code></p><p>And that&#8217;s expected; that&#8217;s what we want &#8212;why we introduce the &#8220;internal&#8221; package and put all internal implementation inside the module.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aNpY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aNpY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 424w, https://substackcdn.com/image/fetch/$s_!aNpY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 848w, https://substackcdn.com/image/fetch/$s_!aNpY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 1272w, https://substackcdn.com/image/fetch/$s_!aNpY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aNpY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png" width="1456" height="538" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:538,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1593180,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!aNpY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 424w, https://substackcdn.com/image/fetch/$s_!aNpY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 848w, https://substackcdn.com/image/fetch/$s_!aNpY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 1272w, https://substackcdn.com/image/fetch/$s_!aNpY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe7fdabe8-0988-4702-aa2b-3d2bda89af78_7305x2698.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Proper way to import another module&#8217;s interface</figcaption></figure></div><p>Think of each module as a microservice. Does it make sense for one microservice to access another service&#8217;s database directly? No, it doesn&#8217;t, as I mentioned earlier &#8212; that&#8217;s considered an anti-pattern. Instead, microservices should communicate through a public API. </p><p>Therefore, we adopted a similar approach to the modular monolith by separating the public API from other ports. Although it uses a hexagonal architecture, it is still considered a port; this distinction makes upgrades easier. When a module needs to be converted into an independent microservice in the future, it can be done smoothly because it interacts only through the public API, not with detailed implementations.</p><h3>Step 3: Database Schema</h3><p>Another key aspect in building the modular monolith is managing the database. Similar to an independent microservice, it should never access the database of another service. This is considered an anti-pattern.</p><p>In a modular monolith, even though it&#8217;s a single application with a single physical database, I advise against sharing tables across the repository or data layer. Instead, whenever data is required from another module&#8217;s table, always retrieve it via the &#8220;public API&#8221; interface that interacts with different modules.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fwGs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fwGs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 424w, https://substackcdn.com/image/fetch/$s_!fwGs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 848w, https://substackcdn.com/image/fetch/$s_!fwGs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 1272w, https://substackcdn.com/image/fetch/$s_!fwGs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fwGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png" width="1280" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1280,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:165465,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!fwGs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 424w, https://substackcdn.com/image/fetch/$s_!fwGs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 848w, https://substackcdn.com/image/fetch/$s_!fwGs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 1272w, https://substackcdn.com/image/fetch/$s_!fwGs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3af48d68-1293-4d33-9b4b-4c285ed23b00_1280x576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Isolate tables from different modules usingthe  database schema</figcaption></figure></div><p>I&#8217;m not sure about other database platforms, but in Postgres, there&#8217;s a concept called &#8220;Schema&#8221; that enables logical separation within the database. Even with just a single database, we can implement logical isolation at the module level.</p><p>If you look at the repository I have, you will see I have two schemas. </p><ul><li><p>payment_module</p></li><li><p>payment_settings_module</p></li></ul><p>Both are defined in the database and used during query execution. This setup provides flexibility, especially when planning to migrate a module to an independent microservice. It simplifies the process because there&#8217;s no direct database-level connection with other modules.</p><h3>Step 4: Assemble all of them</h3><p>Okay, we have finally isolated all of them into modules. We defined the bounded context. We grouped them into one module. The next step is to assemble them, and they will finally become an application.</p><p>Following the hexagonal principle again, we also apply it to how we organize the project, ensuring the application has its doors defined. Could be the REST, gRPC, CLI for cron, Queue consumer, etc.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!8mnR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8mnR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 424w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 848w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1272w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8mnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png" width="979" height="746" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:746,&quot;width&quot;:979,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:187891,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:&quot;&quot;,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!8mnR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 424w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 848w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1272w, https://substackcdn.com/image/fetch/$s_!8mnR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4405e7f8-b9ed-43eb-8cec-27c05ca32bef_979x746.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Hexagonal Interface</figcaption></figure></div><p>So with the same application, what we have will be like a super app that contains all the possible processes. In my code example, I define a cmd package that will assemble the application I want.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-Am_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Am_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 424w, https://substackcdn.com/image/fetch/$s_!-Am_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 848w, https://substackcdn.com/image/fetch/$s_!-Am_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 1272w, https://substackcdn.com/image/fetch/$s_!-Am_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Am_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png" width="628" height="392" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:392,&quot;width&quot;:628,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:32909,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!-Am_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 424w, https://substackcdn.com/image/fetch/$s_!-Am_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 848w, https://substackcdn.com/image/fetch/$s_!-Am_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 1272w, https://substackcdn.com/image/fetch/$s_!-Am_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a58483b-420d-4147-a3e3-de3d404c8118_628x392.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Application main.go and command entrypoint</figcaption></figure></div><p>As shown, I have cron and rest commands. When I compile the project into an executable binary later, I can run both of them using the command below.</p><div class="github-gist" data-attrs="{&quot;innerHTML&quot;:&quot;<div id=\&quot;gist142652997\&quot; class=\&quot;gist\&quot;>\n    <div class=\&quot;gist-file\&quot; translate=\&quot;no\&quot; data-color-mode=\&quot;light\&quot; data-light-theme=\&quot;light\&quot;>\n      <div class=\&quot;gist-data\&quot;>\n        <div class=\&quot;js-gist-file-update-container js-task-list-container\&quot;>\n  <div id=\&quot;file-example-md\&quot; class=\&quot;file my-2\&quot;>\n      <div id=\&quot;file-example-md-readme\&quot; class=\&quot;Box-body readme blob p-5 p-xl-6 \&quot;\n    style=\&quot;overflow: auto\&quot; tabindex=\&quot;0\&quot; role=\&quot;region\&quot;\n    aria-label=\&quot;example.md content, created by bxcodec on 04:35PM today.\&quot;\n  >\n    <article class=\&quot;markdown-body entry-content container-lg\&quot; itemprop=\&quot;text\&quot;><div class=\&quot;markdown-heading\&quot; dir=\&quot;auto\&quot;><h4 class=\&quot;heading-element\&quot; dir=\&quot;auto\&quot;>First, build,</h4><a id=\&quot;user-content-first-build\&quot; class=\&quot;anchor\&quot; aria-label=\&quot;Permalink: First, build,\&quot; href=\&quot;#first-build\&quot;><svg class=\&quot;octicon octicon-link\&quot; viewBox=\&quot;0 0 16 16\&quot; version=\&quot;1.1\&quot; width=\&quot;16\&quot; height=\&quot;16\&quot; aria-hidden=\&quot;true\&quot;><path d=\&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\&quot;></path></svg></a></div>\n<pre><code>$ go build -o ./engine application/main.go\n</code></pre>\n<div class=\&quot;markdown-heading\&quot; dir=\&quot;auto\&quot;><h4 class=\&quot;heading-element\&quot; dir=\&quot;auto\&quot;>Running the rest API server</h4><a id=\&quot;user-content-running-the-rest-api-server\&quot; class=\&quot;anchor\&quot; aria-label=\&quot;Permalink: Running the rest API server\&quot; href=\&quot;#running-the-rest-api-server\&quot;><svg class=\&quot;octicon octicon-link\&quot; viewBox=\&quot;0 0 16 16\&quot; version=\&quot;1.1\&quot; width=\&quot;16\&quot; height=\&quot;16\&quot; aria-hidden=\&quot;true\&quot;><path d=\&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\&quot;></path></svg></a></div>\n<div class=\&quot;highlight highlight-source-shell\&quot; dir=\&quot;auto\&quot;><pre>$ ./engine rest\n$ ./engine rest --config .env.production</pre></div>\n<div class=\&quot;markdown-heading\&quot; dir=\&quot;auto\&quot;><h4 class=\&quot;heading-element\&quot; dir=\&quot;auto\&quot;>Running the cron (invoked by Crontab/Cronjob)</h4><a id=\&quot;user-content-running-the-cron-invoked-by-crontabcronjob\&quot; class=\&quot;anchor\&quot; aria-label=\&quot;Permalink: Running the cron (invoked by Crontab/Cronjob)\&quot; href=\&quot;#running-the-cron-invoked-by-crontabcronjob\&quot;><svg class=\&quot;octicon octicon-link\&quot; viewBox=\&quot;0 0 16 16\&quot; version=\&quot;1.1\&quot; width=\&quot;16\&quot; height=\&quot;16\&quot; aria-hidden=\&quot;true\&quot;><path d=\&quot;m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\&quot;></path></svg></a></div>\n<div class=\&quot;highlight highlight-source-shell\&quot; dir=\&quot;auto\&quot;><pre>$ ./engine cron-update-payment\n$ ./engine cron-update-payment --dry-run\n$ ./engine cron-update-payment --batch-size 100</pre></div>\n</article>\n  </div>\n\n  </div>\n</div>\n\n      </div>\n      <div class=\&quot;gist-meta\&quot;>\n        <a href=\&quot;https://gist.github.com/bxcodec/828d1fd003f0834770d7b579fec1df47/raw/402f5734a83526a0a175189b795f000d4d5c8ad0/example.md\&quot; style=\&quot;float:right\&quot; class=\&quot;Link--inTextBlock\&quot;>view raw</a>\n        <a href=\&quot;https://gist.github.com/bxcodec/828d1fd003f0834770d7b579fec1df47#file-example-md\&quot; class=\&quot;Link--inTextBlock\&quot;>\n          example.md\n        </a>\n        hosted with &amp;#10084; by <a class=\&quot;Link--inTextBlock\&quot; href=\&quot;https://github.com\&quot;>GitHub</a>\n      </div>\n    </div>\n</div>\n&quot;,&quot;stylesheet&quot;:&quot;https://github.githubassets.com/assets/gist-embed-0ac919313390.css&quot;}" data-component-name="GitgistToDOM"><link rel="stylesheet" href="https://github.githubassets.com/assets/gist-embed-0ac919313390.css"><div id="gist142652997" class="gist">
    <div class="gist-file" data-color-mode="light" data-light-theme="light">
      <div class="gist-data">
        <div class="js-gist-file-update-container js-task-list-container">
  <div id="file-example-md" class="file my-2">
      <div id="file-example-md-readme" class="Box-body readme blob p-5 p-xl-6 " style="overflow:auto">
    <article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading"><h4 class="heading-element">First, build,</h4><a id="user-content-first-build" class="anchor" href="#first-build"></a></div>
<pre><code>$ go build -o ./engine application/main.go
</code></pre>
<div class="markdown-heading"><h4 class="heading-element">Running the rest API server</h4><a id="user-content-running-the-rest-api-server" class="anchor" href="#running-the-rest-api-server"></a></div>
<div class="highlight highlight-source-shell"><pre>$ ./engine rest
$ ./engine rest --config .env.production</pre></div>
<div class="markdown-heading"><h4 class="heading-element">Running the cron (invoked by Crontab/Cronjob)</h4><a id="user-content-running-the-cron-invoked-by-crontabcronjob" class="anchor" href="#running-the-cron-invoked-by-crontabcronjob"></a></div>
<div class="highlight highlight-source-shell"><pre>$ ./engine cron-update-payment
$ ./engine cron-update-payment --dry-run
$ ./engine cron-update-payment --batch-size 100</pre></div>
</article>
  </div>

  </div>
</div>

      </div>
      <div class="gist-meta">
        <a href="https://gist.github.com/bxcodec/828d1fd003f0834770d7b579fec1df47/raw/402f5734a83526a0a175189b795f000d4d5c8ad0/example.md" style="float:right" class="Link--inTextBlock">view raw</a>
        <a href="https://gist.github.com/bxcodec/828d1fd003f0834770d7b579fec1df47#file-example-md" class="Link--inTextBlock">
          example.md
        </a>
        hosted with &#10084; by <a class="Link--inTextBlock" href="https://github.com">GitHub</a>
      </div>
    </div>
</div>
</div><p>And since we already modularized the domain, adding them to the command should be straightforward. Can see the code example I have.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bySM!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bySM!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 424w, https://substackcdn.com/image/fetch/$s_!bySM!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 848w, https://substackcdn.com/image/fetch/$s_!bySM!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!bySM!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bySM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png" width="1456" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:211297,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/178347640?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!bySM!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 424w, https://substackcdn.com/image/fetch/$s_!bySM!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 848w, https://substackcdn.com/image/fetch/$s_!bySM!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!bySM!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc303c000-3813-4992-ba21-e446e787e4e5_1590x1002.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">cron command entrypoint</figcaption></figure></div><p>Refer to lines 58-69, where I use the factory to prepare the modules. This setup enables me to run the CLI command with all business logic encapsulated within its respective domain.</p><h2>Final Words</h2><p>Alright, I think that&#8217;s all the long explanation about applying DDD Modular monolith with Hexagonal architecture in Golang. It might be a bit different from other thoughts, but I applied this based on what I know and I have experienced.</p><p>Designing software is always interesting. Initially, I considered using C#.NET since my client from SoftwareArchitect.ID is using C#.NET, or another option, I am also considering writing it in Node.js. However, after reviewing some examples, I found that both languages are well-established, and I came across some good examples.</p><p>For C#.NET, I reviewed this repository: <a href="https://github.com/kgrzybek/modular-monolith-with-ddd">github.com/kgrzybek/modular-monolith-with-ddd</a>, although it differs from my current Golang version due to language limitations. I implemented the same principles while also aligning with idiomatic Golang practices. Additionally, I am also applying the Hexagonal architecture, so I need to find a good balance. This process is both interesting and enjoyable.</p><p>Let me know your thoughts. Maybe you have a better idea. We can probably discuss it here (in the comment section) or  in the GitHub repository (feel free to open a GitHub issue to start the conversation).</p><p>Alternatively, if you&#8217;ve identified additional use cases that don&#8217;t fit, we can discuss them and develop a better solution.</p><p>One thing is sure: although it&#8217;s a monolith, it&#8217;s not the usual kind but a modular monolith. Therefore, avoid crossing domain boundaries. If two domains communicate excessively, it likely makes sense to merge them into a single domain. This principle also applies to database access.</p><p>Always invest the time in domain separation, as defining the bounded context significantly benefits modular monolith development. It helps avoid hacks and common mistakes. </p><p>And finally, the code repository of this mini workshop can be seen here: <a href="https://github.com/bxcodec/golang-ddd-modular-monolith-with-hexagonal">github.com/bxcodec/golang-ddd-modular-monolith-with-hexagonal</a></p><p><strong>References and Learning</strong></p><ul><li><p><a href="https://martinfowler.com/bliki/PresentationDomainDataLayering.html">Presentation Domain Data Layer</a></p></li><li><p><a href="https://github.com/kgrzybek/modular-monolith-with-ddd">Modular Monolith DDD</a></p></li><li><p><a href="https://medium.com/@mail2mhossain/architecting-robust-net-dfa4f3725142">Architecting Robust .NET</a></p></li><li><p><a href="https://blog.cleancoder.com/uncle-bob/2012/08/13/the-clean-architecture.html">The Clean Architecture</a></p></li><li><p><a href="https://github.com/bxcodec/go-clean-arch">Go Clean Architecture</a></p></li></ul><div class="pullquote"><p>Since establishing SoftwareArchitect.ID as my brand, I&#8217;ve worked as a fractional technical leader, mainly as a fractional software architect, for several years. My experience spans from small startups to medium-sized companies, more recently, serving as an advisor and architect for an enterprise migrating to the cloud and transitioning from a large monolith to microservices. <em>Contact me at iman[at]softwarearchitect.id for consultation or a fractional role as an architect or tech lead related to building a scalable product and platform</em></p></div>]]></content:encoded></item><item><title><![CDATA[How would you describe your ideal team composition?]]></title><description><![CDATA[...cliche, but it's depend...]]></description><link>https://notes.softwarearchitect.id/p/how-would-you-describe-your-ideal</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/how-would-you-describe-your-ideal</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Thu, 17 Apr 2025 03:00:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>&#8220;How would you describe your ideal team composition?&#8221; This is a common question I encounter when I have a job interview. Until now, I still don't have a definitive answer. It depends on various factors, such as the hiring budget and the types of platforms involved- whether it's mobile, web, or both, the company's scale, and many more.</p><p>I have experienced many ups and downs in various roles and team setups across different companies. From the beginning of my career in the early stages of a startup and progressing through growth and unicorn phases has shaped my perspective on the entire process. While some may have different setups, the goal remains the same: to improve processes, reduce toil, and enhance overall effectiveness for everyone.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>I&#8217;m not an expert or a seasoned manager in this field. Speaking from my experience as an individual contributor in this industry. Though I may be a bit young, I believe I&#8217;ve gained enough knowledge to share my insights here.</p><p>In this article, I share how my response evolves over time when people ask me, &#8220;How would you describe your ideal team composition?&#8221;</p><h2>One Team For the Whole Organization</h2><p>After graduating from a local college in Indonesia in 2016, I secured a position at a small startup with just five engineers: three seniors, myself as a junior, and the CTO. We focus on having fun while learning. During this period, I learned countless lessons. As a team of five, we handle everything from backend and frontend to infrastructure. It's important to be able to learn quickly and take on various roles to ensure we can deliver a working product within the following week or days, allowing us to secure the deal by creating a demo for the customer. In these early startup days, swift execution is crucial, and we must be ready to pivot at any moment.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nWE6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nWE6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 424w, https://substackcdn.com/image/fetch/$s_!nWE6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 848w, https://substackcdn.com/image/fetch/$s_!nWE6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 1272w, https://substackcdn.com/image/fetch/$s_!nWE6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nWE6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png" width="1456" height="1393" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1393,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:102281,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/161388430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nWE6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 424w, https://substackcdn.com/image/fetch/$s_!nWE6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 848w, https://substackcdn.com/image/fetch/$s_!nWE6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 1272w, https://substackcdn.com/image/fetch/$s_!nWE6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F34e1cca5-b61c-4033-b50c-f5c319507389_1586x1517.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">one team engineering for all</figcaption></figure></div><p>One advantage of this is that we, as engineers, have a comprehensive understanding of the entire process. We can quickly identify any issues that arise. Frontend problem? It will be resolved by tomorrow. Backend issue? That will be fixed in two days, and so on.</p><p>For new joiners, the challenges can be overwhelming. Not only do they need to grasp new technologies, but they also have to understand the user journey and domain knowledge, as well as interpret customer needs. </p><p>There are also occasions when we, the engineers, are invited by the co-founder to participate directly in customer interviews at the customer&#8217;s office. We observe their problems directly and attempt to solve them. It is fundamentally straightforward and very hands-on to build the product at this stage.</p><p>But the takeaways that I can conclude with this approach:</p><ul><li><p>Engineers must be generalists who can adapt swiftly, focusing solely on delivery. Sometimes, we just listened to customer feedback in the morning and directly developed solutions by night!</p></li><li><p>It is easier to manage and can quickly adapt to changing product requirements.</p></li><li><p>Context switching also becomes a major challenge. In the morning, you might focus on front-end development, and in the afternoon, you need to address a database issue at the infrastructure level. You may discuss feature A today, but then an urgent request requires your attention on feature B. While it may seem productive, it can be quite draining at times.</p></li></ul><h4>Is this my ideal team composition?</h4><p>When people ask me about the ideal team composition, when I was in this situation, I said, Yes, that&#8217;s the ideal team composition. It&#8217;s a situation when you don&#8217;t have too many people, making too much communication overhead. But you also don&#8217;t have too few people, making it overwhelming. On the other side, as an engineer, I can learn the complete user and product journey, gaining extensive experience across various tech stacks. My resume boasts buzzwords that people don't expect. I&#8217;m evolving into a &#8220;Rockstar Developer&#8221; with Infrastructure, Backend, Web, and Mobile knowledge.</p><h2>Team based on the Role</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kCQq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kCQq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 424w, https://substackcdn.com/image/fetch/$s_!kCQq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 848w, https://substackcdn.com/image/fetch/$s_!kCQq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 1272w, https://substackcdn.com/image/fetch/$s_!kCQq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kCQq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png" width="1456" height="1122" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1122,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:174658,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/161388430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kCQq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 424w, https://substackcdn.com/image/fetch/$s_!kCQq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 848w, https://substackcdn.com/image/fetch/$s_!kCQq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 1272w, https://substackcdn.com/image/fetch/$s_!kCQq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12444bef-e65e-4676-90ec-32c826028ca9_2449x1888.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Team based on the role</figcaption></figure></div><p></p><p>In the following year, in 2017, I moved to another startup. This is a growing stage startup, where the people are big enough (20-30 engineers), so this company makes some groups instead.</p><ul><li><p>Backend Team</p></li><li><p>Mobile Team</p></li><li><p>Frontend Team</p></li><li><p>Machine Learning Team</p></li></ul><p>Every team member shares the same role, and although their experiences may vary, everyone on the same team  communicates on the same ground. For instance, the backend team discusses backend issues only, discussing the database performance issue, API refactoring, Backend best practices, etc. </p><p>However, roles like Designer and PM don't belong to this team; they have separate teams, which seems unusual. Engineers become a kind of squad or tribe, or more like a software house with different skill sets.</p><p>One benefit of this setup is that, as a new junior engineer,  I can quickly contribute to the team. The Seniors can onboard me easily; the knowledge is at the same level. I can ask anyone on the same team. Everyone supports each other because it&#8217;s a squad with the same skillset. Although some senior members might attend alignment meetings, junior and mid-level engineers primarily focus on project delivery. Unlike my first job, it&#8217;s much easier to begin contributing to the team since the focus is solely on backend tasks.</p><p>One of the major challenges that I foresaw back then is when developing a new feature that involves multiple teams. Establishing a clear alignment/contract from the project kick-off is crucial; for example, API contracts need to be defined and finalized so both the backend and mobile/frontend can work independently. Any mid-project changes should be communicated immediately to all teams so that everyone can adjust to the changes.</p><p>Whether we like it or not, placing blame on others will happen indirectly (or unconsciously). For example, one might say, &#8220;The Backend team has blocked us, so we cannot proceed with testing,&#8221; or &#8220;The Frontend team is blocking us because they are focused on Feature B,&#8221; or &#8220;The Mobile team is preventing us from moving forward; they haven't addressed our requests.&#8221;</p><p>If I encountered a blocker when I was still working  at my first company, I would resolve it directly, eg, apply changes to the web app, mobile, or the backend, and configure the infrastructure as needed. There was no excuse not to tackle the problem. However, in this second company, people often find excuses to avoid stepping out of their comfort zones, perhaps out of fear of &#8220;breaking&#8221; things. Also, because the team setup has been like that, it&#8217;s hard to contribute anyway.</p><p>At least, that<strong> </strong>was my personal feeling at the time. I'm not sure about the others. Gradually, I started thinking this way, repeatedly making excuses and saying things like,<strong> &#8220;Oh, I don&#8217;t know about mobile, I can&#8217;t handle it.</strong> <strong>Can you all take care of it?</strong> <strong>I've created the Jira ticket on your board." </strong>Or some ML engineer says, "<strong>Oh, we don&#8217;t know about Golang. We created the ticket on your Jira board. Please help fix it.&#8221;</strong></p><h4>Is this my ideal team composition?</h4><p>If I were in this condition/stage, if people asked me whether that&#8217;s my ideal team structure and composition, yes,  I would likely describe it as my preference. This is where I feel most comfortable. I focus primarily on backend development, where I believe significant improvements can be made. I concentrate on resolving backend technical issues without overthinking. I don&#8217;t dwell on the product's features or appearance on mobile devices, as that task falls to the mobile team. My responsibility is limited to ensuring the mobile team's API responses are correctly served.</p><p>Also, there is not too much bureaucracy because only the lead will gather and align the requirements if it&#8217;s related to another team.</p><p>But, one unique situation back then was that even though we&#8217;re the same team in the backend, we also have a small sub-team that handles domain-specific tasks. But in the end, it&#8217;s still one team. Everyone can easily support each other because the skill sets are the same.</p><h2>Team based on Product/Domain</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!s2xs!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!s2xs!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 424w, https://substackcdn.com/image/fetch/$s_!s2xs!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 848w, https://substackcdn.com/image/fetch/$s_!s2xs!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 1272w, https://substackcdn.com/image/fetch/$s_!s2xs!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!s2xs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png" width="1456" height="801" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:801,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:311086,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/161388430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!s2xs!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 424w, https://substackcdn.com/image/fetch/$s_!s2xs!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 848w, https://substackcdn.com/image/fetch/$s_!s2xs!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 1272w, https://substackcdn.com/image/fetch/$s_!s2xs!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd57ffb8c-11bf-484f-b2e2-c84bbbc09e1b_2728x1501.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Team based on Product/Domain</figcaption></figure></div><p>Later, in 2019, I moved again to one of the unicorn startups. This new company has more people. It&#8217;s a multi-national, globally spread organization. The team is divided based on product, where each product team consists of </p><ul><li><p>Frontend Engineer</p></li><li><p>Backend Engineer</p></li><li><p>Infra Engineer</p></li><li><p>QA</p></li><li><p>(some team) Also have an Android/iOS/Flutter engineer</p></li></ul><p>In this arrangement, the team concentrates on a single product. If frontend development is necessary, they will include a frontend developer. If mobile development is required, they will hire a mobile engineer.  So the team ensures they can support their roadmap, with the right investment (eg, hiring a new engineer with a new skillset)</p><p>While not common, some teams prefer their engineers to be polyglots, enabling them to work on various tasks as long as they stay within the same product scope. So instead of hiring a specialist engineer, the team have generalists, who can be a mobile engineer, a web engineer, a database engineer, an infrastructure engineer, or even a QA engineer who is setting up their automation test. However, the idea is still the same: the team is self-sufficient to do their product work.</p><p>This enables the team to focus and iterate more rapidly without blaming others, such as saying they are &#8220;blocked&#8221; by different departments/teams. Each member operates like a &#8220;mini startup&#8221; within the company. That can act freely and autonomously. The team possesses all the necessary skills to implement changes related to their product.</p><p>When I refer to a mini startup, I mean that the product team will create its own roadmap, develop the product it aims to sell, and so on. In this setup, the Product Manager (PM) functions as the CEO, while the Tech Lead takes on the role of CTO within this mini-startup. </p><h3>Domain / Area Level</h3><p>This arrangement extends up to the Domain area level, where a higher-level manager oversees the teams below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zUfI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zUfI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 424w, https://substackcdn.com/image/fetch/$s_!zUfI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 848w, https://substackcdn.com/image/fetch/$s_!zUfI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 1272w, https://substackcdn.com/image/fetch/$s_!zUfI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zUfI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png" width="1456" height="918" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:918,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:404598,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/161388430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!zUfI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 424w, https://substackcdn.com/image/fetch/$s_!zUfI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 848w, https://substackcdn.com/image/fetch/$s_!zUfI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 1272w, https://substackcdn.com/image/fetch/$s_!zUfI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F63953d8f-c1be-4abc-a7b5-f687b83f55e0_3375x2128.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Team based on Product/Domain on a higher-level view</figcaption></figure></div><p>The unique role that I experienced in this setup was the architect role, where I was positioned. I was one of the group architects who oversaw several product teams. The ideal situation is that every product should implicitly have an &#8220;Architect&#8221; role. So these architects will align with the group architect to ensure the integration within the domain/area is less friction. Architect and Techlead (on product level) or Architect and Engineering Manager (on Group /Domain /Area level), it&#8217;s like two brains in collaboration. The Engineering Manager/Techlead focuses on process and people management, and the Architect focuses on technical decisions, owning the architecture roadmap, etc.</p><p>However, the downside of this structure is that the bureaucracy can be overwhelming. Numerous layers must be navigated when proposing changes that impact the entire domain. Implementing changes is time-consuming because each product team has its own roadmap and priorities. As a result, it often feels like a competition to see whose roadmap wins support at the higher management levels.</p><p>However, it is relatively easy for higher priorities that come from the top level because everyone will make it their priority. And it&#8217;s easier to navigate because everyone will be autonomous, running independently. This is where you need an Architect to navigate the changes, by making a kind of &#8220;Architecture Northstar&#8221;, so that everyone will still align with the future, avoiding duct-tape solutions across the products when working on one priority altogether &#8212; read my blog post about <strong><a href="https://medium.easyread.co/writing-an-architecture-north-star-document-571585740027">Writing Architecture  Northstar Document</a>.</strong> </p><h3>The birth of Platform Domain</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!7m_P!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7m_P!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 424w, https://substackcdn.com/image/fetch/$s_!7m_P!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 848w, https://substackcdn.com/image/fetch/$s_!7m_P!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 1272w, https://substackcdn.com/image/fetch/$s_!7m_P!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7m_P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png" width="1456" height="987" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:987,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1440088,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://notes.softwarearchitect.id/i/161388430?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7m_P!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 424w, https://substackcdn.com/image/fetch/$s_!7m_P!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 848w, https://substackcdn.com/image/fetch/$s_!7m_P!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 1272w, https://substackcdn.com/image/fetch/$s_!7m_P!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fac4ffb75-f7e9-45c9-b2df-fea2a4407f60_7181x4869.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">The birth of Platform Domain</figcaption></figure></div><p>Another interesting concept I learned in this setup is the birth of the &#8220;Platform Team&#8221;. As every team now functions like a product. However, referring to something like the API Gateway as a product feels strange. Therefore, instead of using the term Product team, we designate it as a Platform team. This team doesn't serve the customer directly; instead, it supports the product teams within the organization. </p><p>For instance, the dashboard platform team created the Microfrontend. This setup allows any Frontend Engineer in the product team to contribute by integrating their Microfrontend with the platform's core. Similarly, the Public API Gateway team is working on a Gateway Platform, enabling any Backend Engineer in the product team to expose and register their APIs for public access. Likewise, the Mobile Platform aims to foster the Mobile ecosystem, creating libraries, modules, and more, so that mobile engineers across all teams can easily contribute and implement their changes. </p><p>When I refer to the Platform, I mean that the platform team focuses on building the platform itself, rather than developing product features or fulfilling requests from other product teams. So it&#8217;s not like, for example, Product Team Payment, asking Platform Team to implement some changes in Mobile or Web because the Payment Team doesn&#8217;t have any Mobile or Frontend engineers. Instead, the platform team creates a way for the Payment Team to implement it by themselves easily, without waiting for the Platform team to implement it.</p><p>This distinction can sometimes be challenging for people to grasp, as it requires a certain level of understanding to differentiate between the platform and the product.  For more insights, check out my previous blog here: &#8220;<strong><a href="https://notes.softwarearchitect.id/p/product-vs-platform-the-struggle?r=iy9ur">Product vs Platform: the Struggle to Make the Domain Boundaries</a>&#8221;</strong></p><h4>Is this my ideal team composition?</h4><p>At this stage, this is my preferred team structure. Considering the tradeoff involving considerable bureaucracy, it&#8217;s a necessity. As the company expands, alignment among individuals becomes increasingly essential. As long as team members are open-minded, ready for challenges, and willing to evaluate and question the status quo critically, I believe this represents the ideal team composition.</p><p>I remember how my team worked on expanding our product to one country to deliver new product payments. It was during the COVID pandemic time, and we could finish it in two months. We had a whole team: backend, frontend, database/infra engineers, designers, product managers, QA, and tech leads. There were no blockers; if something was blocked in the API gateway, we made changes, and if something was blocked with Mobile/Web, we made the changes directly to the repository &#8212; that later also became configurable and decentralized eventually when the Platform team made fixes.</p><p>However, the challenge with this setup primarily affects the platform team. Since it is utilized by several product teams, implementing versioning or breaking changes becomes difficult. Requesting product teams to upgrade their versions or transition to a new workflow will require time and alignment. Moreover, the product teams have their own priorities to consider. </p><p>For example, I remember rebuilding our new Auth Platform, and it takes a lot of alignment with the team, needs some hard push from management, so every product team complies with it, eg, consuming new headers returned from the API gateway after using the new Auth Platform, etc.</p><p>Another example, sometimes the platform team must be proactive and occasionally interact with other product repositories to facilitate library/client version upgrades. I can't recall how many times I've raised PRs while being on the platform team. People often recognize me from my GitHub contributions to their repositories  due to upgrading the client version of our platform API in their repositories, even before we meet in person. &#128517;</p><h1>My Ideal Team Composition?</h1><p>So, given all my experience, what is my ideal team's composition? It largely depends on the stage I find myself in. In the early stage of a startup, I believe that one team for all roles is effective. However, during the growth stage with 20-30 engineers, having one team focused on a single role seems optimal. This approach allows me to oversee all product features while ensuring high-quality engineering output. </p><p>When operating at a unicorn or enterprise level, working within specialized domains is advantageous. This structure enables me to zoom in and out of different contexts. Zoomed out, I can see the broader eg, Payment Domain, and when zoomed in, I notice various products within it, each managed by a dedicated team. This setup facilitates smooth context switching between high-level and low-level discussions.</p><p>As the company evolves, a different approach is required. What was effective three years ago may not work today. Back then, the company was smaller, with a limited user and customer base. The risks were manageable, and implementing changes was straightforward, requiring minimal discussions about potential risks or persuasion. A single team for all tasks seemed efficient. </p><p>However, as the company grows, this structure becomes burdensome, requiring specialized teams for each stack: backend, frontend, and mobile. As the company expands, complexity increases, demanding individual attention for each product. Therefore, a single team structure is insufficient. Instead, adopting a product or domain-based separation is the optimal solution, allowing each product to concentrate on its development.</p><p>Ultimately, it all depends on the situation. I may encounter more examples of team composition in the future. But if hiring budget is not the issue, I will definitely have one team with various skill sets, where in one team, I will have Backend, Frontend, Mobile, Designer, Infra, QA, and Product manager, &#8212; like a &#8220;mini startup&#8221; that focus on one domain that may have sub-domain (products/features). With this setup, I believe we can achieve many things as a team, unblock ourselves, and not depend on other teams.</p><div><hr></div><p><em>Have a different viewpoint? Please share your thoughts in the comments below. If you agree with my perspective, feel free to share this so others can see it.</em></p><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Product vs Platform: the Struggle to Make the Domain Boundaries]]></title><description><![CDATA[The importance of differentiating between what platform and what product to ensure the organization solving the right problem.]]></description><link>https://notes.softwarearchitect.id/p/product-vs-platform-the-struggle</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/product-vs-platform-the-struggle</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Thu, 09 Jan 2025 02:01:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!IUY3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hello &#128075;</p><p>It&#8217;s been a while since my last newsletter was posted. A lot of things happen in real life. 2024 is a crazy year. From the beginning of January 1st to the end of 2024, it&#8217;s a roller coaster life. It&#8217;s a good and bad year, good I learned so many life lessons. Bad year, I learned <strong>too many</strong> life lessons and didn&#8217;t have enough time to write new blog posts. Life update! I&#8217;m moving to a new company, and it&#8217;s been a few months now.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! You can subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>I want to share some thoughts on one of our many problems in this blog post. Please note that this is my personal opinion. I do not represent the company I work with or any group of people. But of course, I bring up this topic because of one of the problems we&#8217;re facing in my current job.</p><p>One of our most challenging problems right now is defining domain boundaries between the platform and the product in Software Architecture. Fortunately, our senior leadership is moving towards platformization. Simply, platformization means creating a configurable, well-structured system or process that will make it easy for any product team to integrate with each other and, possibly, build new products on top of the existing platforms.</p><p>From theory, it may seem easy to understand. A product is anything we sell, feature, or function&#8212;anything that solves the customer's problem. The platform is a tool we use to support our product.</p><p>Easy, right?</p><p>However, it is always difficult to establish clear boundaries between product and platform at the organizational level, where interests, collaborations, team capacity, and expertise will determine the domain boundaries.</p><h3>Intro</h3><p>I&#8217;m not a product expert, but I have more than four years of experience working on products and three to four years of experience establishing a platform to support company products. </p><p>From my point of view, a product is, in simple terms, something we sell to customers. It could be a service, an item, or anything else. </p><p>Let&#8217;s talk about Payment Gateway (PG). One of the PG products is, let&#8217;s say, payment with Direct Debit. In general, Direct Debit is a cashless payment method that will deduct or charge the customer&#8217;s bank account directly (<a href="https://stripe.com/resources/more/direct-debit">Stripe&#8217;s explanation</a>). The interface might be different; for example, outside Indonesia, it&#8217;s common to use Internet Banking, where the merchant will deduct the user's bank account directly through some validation (MFA, etc). In Indonesia, however, some banks allow Internet banking, and most only allow it through a debit card, which is also directly linked to a bank account (<a href="https://www.xendit.co/id/blog/direct-debit-inovasi-terkini-untuk-metode-pembayaran-yang-tepat/">Xendit&#8217;s explanation</a>).</p><p>From the explanation above, Direct Debit seems like a somewhat complicated product, depending on which country you&#8217;re referring to. It&#8217;s a customized feature that cannot be generalized globally, especially regarding how it works on the technical side.</p><p>Another example I can use is an identity verification service, like Veriff.com. I tried the product when I wanted to verify my document in Deel. Deel is a platform for freelancers that helps with HR and payroll. So, I used Deel for my fractional job. During my registration, I saw that they use Veriff for identity verification.</p><p>So, in general concept, Identity Verification works like as simple as:</p><ul><li><p>Ask the user to provide a document</p></li><li><p>Selfie</p></li><li><p>Selfie + Document</p></li><li><p>Verify to Government Registry (if possible)</p></li><li><p>Get Verified</p></li><li><p>Done</p></li></ul><p>Different countries may have various ways to validate the document &#8212; including different citizen registries. It&#8217;s something we can&#8217;t generalize globally.</p><p>However, the interesting fact is that, from Deel's point of view, Veriff is one of the platforms that helps them verify their customers to support their products. The same goes for Eccomerce or any business that uses a Payment gateway to accept payments from its customers. From Eccomerce's point of view, a Payment Gateway is just a platform. They can replace it with anything, e.g., self-build, change to another third party, etc. </p><p>From the words themselves, a Platform is a foundation&#8212;it&#8217;s the baseline. When we think of building a house, we can use the concrete base, wiring, etc., to compose and create rooms. At the same time, the rooms themselves are the product &#8212; which is the result of composing many platforms. It&#8217;s not our core product but a critical functionality to support our products.</p><h3>Platform vs Product in Platformization Vision</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IUY3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IUY3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IUY3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IUY3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IUY3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IUY3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg" width="640" height="459" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:459,&quot;width&quot;:640,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IUY3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 424w, https://substackcdn.com/image/fetch/$s_!IUY3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 848w, https://substackcdn.com/image/fetch/$s_!IUY3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!IUY3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff8ec030a-870c-4160-9814-ebd4f50f1697_640x459.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">product vs platform in platformization vision</figcaption></figure></div><p>Distinguishing between platform and product can sometimes be confusing. You could agree or challenge this, but for me, the simplest way to identify a platform and product in an organization (company/business) is to ask these questions.</p><h4>Is this a business value that your customers paid for?</h4><p>You are a business owner selling alcoholic drinks and shipping worldwide. Therefore, you need direct debit from any bank worldwide. Identity verification is also necessary for all people, and government documents and registries must be validated to determine whether the customer is of legal age.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!l7la!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!l7la!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 424w, https://substackcdn.com/image/fetch/$s_!l7la!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 848w, https://substackcdn.com/image/fetch/$s_!l7la!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 1272w, https://substackcdn.com/image/fetch/$s_!l7la!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!l7la!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png" width="1456" height="1165" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1165,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107546,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!l7la!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 424w, https://substackcdn.com/image/fetch/$s_!l7la!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 848w, https://substackcdn.com/image/fetch/$s_!l7la!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 1272w, https://substackcdn.com/image/fetch/$s_!l7la!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F436bf767-ce1b-4450-bce2-4c1e2d803f6f_1556x1245.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">E-commerce for Alcohol Beverage</figcaption></figure></div><p>So, from this, your customer pays for the alcoholic drinks you sell. They&#8217;re not paying for the Direct Debit feature or Identity Verification. They&#8217;re reaching out to you because you sell alcoholic beverages. So, the platforms in this example are the Payment Gateway and the Identity Verification. And your product is the e-commerce that sells alcoholic beverages.</p><div class="pullquote"><p>The product is what the customer pays us for. The platform is what we, as an organization, paid for or built to support our product.</p></div><h4>Can any products use this?</h4><p>The next question I usually ask myself when defining the domain boundaries between product and platform in an organization is to confirm whether any product can reuse the component (a service or module, etc.).</p><p>For example, Notification. In SaaS companies, eg Payment Gateway or Identity Verification. It must have a notification module to send the notification (email, SMS, or Webhook). Payment Gateway has multiple products, e.g., direct debit, card payment, e-wallet payment, etc. All these products will always send notifications, e.g., payment initiated, succeeded, failed, etc. Even though all those products may have different configurations, it is all just a notification. So, from this example, we can extract the notifications and make them a single platform inside the Payment Gateway. It&#8217;s not a product we sell to customers, but it supports the payment products the Payment Gateway sells to their customers.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!L5lb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!L5lb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 424w, https://substackcdn.com/image/fetch/$s_!L5lb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 848w, https://substackcdn.com/image/fetch/$s_!L5lb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 1272w, https://substackcdn.com/image/fetch/$s_!L5lb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!L5lb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png" width="966" height="938" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:938,&quot;width&quot;:966,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:64314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!L5lb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 424w, https://substackcdn.com/image/fetch/$s_!L5lb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 848w, https://substackcdn.com/image/fetch/$s_!L5lb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 1272w, https://substackcdn.com/image/fetch/$s_!L5lb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0fe59be2-eada-4860-9551-fc3ce301d7ba_966x938.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">platform is a reusable components</figcaption></figure></div><p>Here&#8217;s the catch: a Platform is not tightly bound to business logic but explicitly built to organizational needs. But if we want to be extreme idealists, a Platform could also be extracted like an external company. So imagine Twilio. It&#8217;s a Notification Platform, but it&#8217;s a big company. Not only one, but millions of companies are using it. But from the Payment Gateway organization's pov, the notification platform should be something that can be configured easily to all product needs, or worse, can be replaced easily when it&#8217;s not aligned with company policy, e.g., cost is too expensive, etc.</p><div class="pullquote"><p>The platform is a component that can be reused by any product inside the organization with minimal configuration or changes. </p></div><h3>Platformed Product</h3><h4>The Dreams</h4><p>Okay, we now clearly understand the difference between product and platform. But now, a question may come: Is a product of one SaaS company somehow just a platform for its users? Is it possible to make our product work like a platform?</p><p>This is the challenging part. I think this confuses many people and causes them to have different expectations when we say &#8220;platformization.&#8221; It&#8217;s a direction to make the product more configurable and serve all customers&#8217; needs. All business owners, leaders, investors, etc., dream of creating a product that can (magically) solve any problem and allow the organization to expand aggressively. When a product can do this, there&#8217;s no competition anymore. We can quickly solve everything in one day and expand aggressively.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bvVe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bvVe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 424w, https://substackcdn.com/image/fetch/$s_!bvVe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 848w, https://substackcdn.com/image/fetch/$s_!bvVe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 1272w, https://substackcdn.com/image/fetch/$s_!bvVe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bvVe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png" width="1456" height="1022" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1022,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204385,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bvVe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 424w, https://substackcdn.com/image/fetch/$s_!bvVe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 848w, https://substackcdn.com/image/fetch/$s_!bvVe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 1272w, https://substackcdn.com/image/fetch/$s_!bvVe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febb612aa-8ad7-42b0-b137-5ff47424dfba_2244x1575.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">direct debit product with many usecases</figcaption></figure></div><p>Let&#8217;s take Direct Debit as an example from the beginning. Direct Debit may take a different approach depending on the bank, country, regulations, etc. So when we say &#8220;platformed product,&#8221; we mean making Direct Debit a platform that can onboard any new direct debit type and somehow make it configurable. Imagine what would happen if we could do this: We could expand direct debit payments to any country with fewer changes.</p><p>Moving in this direction requires much effort, trial, and error. It must not be too abstract, causing the context to be missing, yet not too specific, making it too complicated.</p><p>It also requires a lot of discussion and negotiation, including changes to the existing business flow. </p><h4>It&#8217;s hard, but it should not be impossible &#8212; at least with fewer changes.</h4><p>Working in both product and platform areas surely gave me a lot of experience in thinking in a &#8220;platform mindset.&#8221; I used to think it was impossible to make a product really configurable and solve any new incoming problems because software eventually changed depending on market needs, regulations, etc. So, it&#8217;s impossible until I see a perfect example of how a platform works.</p><p>An example we can use is how Operating Systems work, both on Mobile and Desktop: Windows, MacOS, iOS, and Android. These are the peaks of the platform. They allow any product to run on top of them, yet they have core OS features. We can write software or plugins to serve our needs on top of them. But it might be possible because it only does a platform job: an Operating system. An OS cannot browse the internet; it needs an application to do that. Or it can&#8217;t make a presentation slide; it needs Ms Powerpoint to do that. It extracted all unnecessary functionalities from the core OS and made it possible for everyone to create an application running on top of it. This is a perfect example of what a Platform should look like.</p><p>Another example is that let&#8217;s see how Kong Gateway or any API Gateway Platform is in the market right now. What I like about them is that they allow everyone to make their own &#8220;plugins&#8221; on top of the Kong gateway. They also support a configuration-based system for the API registry. People only need to change the <code>kong.yaml</code> config and register a new API for the public API.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XTx7!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XTx7!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 424w, https://substackcdn.com/image/fetch/$s_!XTx7!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 848w, https://substackcdn.com/image/fetch/$s_!XTx7!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 1272w, https://substackcdn.com/image/fetch/$s_!XTx7!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XTx7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png" width="1456" height="630" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:630,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:233459,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XTx7!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 424w, https://substackcdn.com/image/fetch/$s_!XTx7!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 848w, https://substackcdn.com/image/fetch/$s_!XTx7!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 1272w, https://substackcdn.com/image/fetch/$s_!XTx7!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb1d96aa1-753b-4213-9239-195cdb13653c_3940x1706.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">kong gateway as an example of platformed product</figcaption></figure></div><p></p><p>The diagram above shows what a platformed product should look like. The product is an &#8220;API Gateway,&#8221; but it allows everyone to configure it, including adding a plugin to serve a specific use case. So with this, let&#8217;s say the company wants to add a new product payment method, e.g., Crypto Payment. Then, they won&#8217;t need to add new code to the API gateway;  instead, it will be just simple configuration changes, e.g., YAML file changes.</p><h4>The Challenges</h4><p>From the beginning of this article, I&#8217;ve discussed platforms, products, and platformed products. In my eight years of professional experience, I've encountered challenges, such as people who are confused about what they want versus what others understand. </p><p>Some people want the platform to be a support and just an extra tool, a baseline that works like an OS, support plugins, etc. Some say a platform is a configurable product that can solve customer problems with fewer changes. Some say the platform is like a buffet. When I want to build my product, I will pick the building blocks (platform) and compose my product based on customers&#8217; needs on top of all those building blocks.</p><p>In my opinion, there is nothing wrong with all those statements. Everyone has a glimpse of what a platform should be capable of, which is &#8220;configurable.&#8221; But again, we still need to ensure everyone has the exact expectations of how configurable they want in for the system itself.</p><p>Are they expecting a platform that works like a generic tool, such as an API Gateway, Authentication, or Notification that is not tightly coupled with the product&#8217;s logic? This will help them build new products quickly on top of the existing tools and platform. Or are they expecting their product to be configurable for their customers' needs? For example, when expanding to SEA, the product must be capable of X features, while when expanding to LATAM, the product must be capable of Y features. </p><p>So, these two expectations must be explicitly aligned. What does the leadership want? What does the organization direction? When everything is aligned, it will be easier to draw a line between the domain boundaries where the Product and Platform are located. It will also help to focus a group of teams on their domain.</p><div class="pullquote"><p>First, it&#8217;s essential to understand the difference between a Platform and a Product. Then, when we have clear expectations, we can start to make the product be platformed&#8212;here, I call it a Platformed Product.</p></div><h3>Platform vs Product vs Platformed Product Breakdown Examples</h3><h4>1. Direct Debit Payment</h4><p>If I want to make a diagram showing the location of the platform, product, and platformed product, it will look something like the one below. For example, let's use our previous example.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vKAU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vKAU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 424w, https://substackcdn.com/image/fetch/$s_!vKAU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 848w, https://substackcdn.com/image/fetch/$s_!vKAU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 1272w, https://substackcdn.com/image/fetch/$s_!vKAU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vKAU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png" width="1456" height="1023" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1023,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:205285,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vKAU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 424w, https://substackcdn.com/image/fetch/$s_!vKAU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 848w, https://substackcdn.com/image/fetch/$s_!vKAU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 1272w, https://substackcdn.com/image/fetch/$s_!vKAU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a23a3b4-c3d1-4d55-afe2-42dab43449ec_2244x1576.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">direct debit with many usecases</figcaption></figure></div><p>If we grouped them into three categories, they would look like these</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_6FP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_6FP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 424w, https://substackcdn.com/image/fetch/$s_!_6FP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 848w, https://substackcdn.com/image/fetch/$s_!_6FP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 1272w, https://substackcdn.com/image/fetch/$s_!_6FP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_6FP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png" width="1456" height="646" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:646,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:369326,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_6FP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 424w, https://substackcdn.com/image/fetch/$s_!_6FP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 848w, https://substackcdn.com/image/fetch/$s_!_6FP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 1272w, https://substackcdn.com/image/fetch/$s_!_6FP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F38c56ed6-191a-451b-b47b-a097ebf6a5a5_4506x1998.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">direct debit platform breakdown</figcaption></figure></div><p><strong>Platform</strong>:</p><ul><li><p>Gateway Platform</p></li><li><p>Auth Platform</p></li><li><p>Notification Platform</p></li></ul><p><strong>Products</strong>:</p><ul><li><p>They sell Direct debit with Debit Cards. In the early phases of the startup/company, they might have a dedicated microservice for this, which is totally fine. It&#8217;s a phase for validating the market, so there is no need to be idealistic.</p></li><li><p>Later, in a few months, they identified another way for Direct debit with Oauth+OTP, so they created another Direct debit service for Oauth + OTP with web interface login payment.</p></li><li><p>&#8230;and later with SmartID</p></li><li><p>&#8230;and later with Giro</p></li><li><p>&#8230;etc</p></li></ul><p>Of course, this is unhealthy, it only increases the complexity and cost of maintaining the products.</p><p><strong>Platformed Products:</strong></p><ul><li><p>One Direct Debit platform/service, but with a configurable service to add a new Direct Debit type. Or at least allow plugins to support new direct debit types that are onboarded.</p></li><li><p>The goal is to allow fewer changes when onboarding new product types for the direct debit.</p></li><li><p>It&#8217;s still a product. If a team owned this, I would still call them a Direct Debit product team even though they&#8217;re making their product become a platform.</p></li></ul><h4>2. Identity Verification</h4><p>To give more examples, let&#8217;s take Identity Verification products, like Veriff.com, which I mentioned above.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!wW6y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wW6y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 424w, https://substackcdn.com/image/fetch/$s_!wW6y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 848w, https://substackcdn.com/image/fetch/$s_!wW6y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 1272w, https://substackcdn.com/image/fetch/$s_!wW6y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wW6y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png" width="1456" height="657" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:657,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:151189,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!wW6y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 424w, https://substackcdn.com/image/fetch/$s_!wW6y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 848w, https://substackcdn.com/image/fetch/$s_!wW6y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 1272w, https://substackcdn.com/image/fetch/$s_!wW6y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd9d0201d-9439-4998-bdad-e747d54352d6_2136x964.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">veriff products</figcaption></figure></div><p>On their website, there are 4 top products</p><ul><li><p>Identity Verification</p></li><li><p>KYC</p></li><li><p>Biometric Verification</p></li><li><p>Fraud Mitigation</p></li></ul><p>Where each product also has sub-products. But the essence is still the same for each group.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gSwN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gSwN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 424w, https://substackcdn.com/image/fetch/$s_!gSwN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 848w, https://substackcdn.com/image/fetch/$s_!gSwN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 1272w, https://substackcdn.com/image/fetch/$s_!gSwN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gSwN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png" width="967" height="938" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cdfca558-4cf4-499e-a19d-4489709b6809_967x938.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:938,&quot;width&quot;:967,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65962,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gSwN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 424w, https://substackcdn.com/image/fetch/$s_!gSwN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 848w, https://substackcdn.com/image/fetch/$s_!gSwN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 1272w, https://substackcdn.com/image/fetch/$s_!gSwN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcdfca558-4cf4-499e-a19d-4489709b6809_967x938.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">identity verification products helicopter view</figcaption></figure></div><p>Based on that, I can imagine these are the structures of the product vs. platform inside Veriff.</p><p>But one thing to note is that all three actually have similar features. For example, ID verification requires verifying the document and a person's face. KYC also uses ID Verification and maybe some other validations with the fraud registry, etc. Biometric Verification focuses on facial recognition, eye recognition, and other related features. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hM4g!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hM4g!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 424w, https://substackcdn.com/image/fetch/$s_!hM4g!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 848w, https://substackcdn.com/image/fetch/$s_!hM4g!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 1272w, https://substackcdn.com/image/fetch/$s_!hM4g!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hM4g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png" width="993" height="1385" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1385,&quot;width&quot;:993,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119854,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hM4g!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 424w, https://substackcdn.com/image/fetch/$s_!hM4g!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 848w, https://substackcdn.com/image/fetch/$s_!hM4g!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 1272w, https://substackcdn.com/image/fetch/$s_!hM4g!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ef2d713-0f7c-44cc-bc45-91e5f4a1d562_993x1385.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">identity verification products </figcaption></figure></div><p>So, let&#8217;s imagine this company from the early stage. They obviously built the ID verification first&#8212; let&#8217;s assume it&#8217;s built-in one service. At the same time, maybe they got a new request for KYC that requires the user to also be validated for their government records, eg, AML (Anti Money Laundering) records, etc. Then, they also need to build it. For faster iteration, they build all independently &#8212; Again. This is just an assumption for a better example of how the transition from product to platformed product.</p><p>So, with this example, we can draft the three categories like the Direct Debit example above.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0PgS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0PgS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 424w, https://substackcdn.com/image/fetch/$s_!0PgS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 848w, https://substackcdn.com/image/fetch/$s_!0PgS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 1272w, https://substackcdn.com/image/fetch/$s_!0PgS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0PgS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png" width="728" height="303.5" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:607,&quot;width&quot;:1456,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:437007,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0PgS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 424w, https://substackcdn.com/image/fetch/$s_!0PgS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 848w, https://substackcdn.com/image/fetch/$s_!0PgS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 1272w, https://substackcdn.com/image/fetch/$s_!0PgS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3842f94a-f13d-4a85-b0e7-59a26dd5f752_4639x1935.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">identity verification products with platformed products</figcaption></figure></div><p>Platform:</p><ul><li><p>Gateway Platform</p></li><li><p>Authentication Platform</p></li><li><p>Notification Platform</p></li></ul><p>Products:</p><ul><li><p>ID Verification service that contains all the core functionalities, e.g. Document verification, government registries, Age Validation, Face Recognition, etc</p></li><li><p>KYC Service that contains core functionalities for KYC, Document Verification, government registry validation, etc</p></li><li><p>Biometric Verification Service</p></li></ul><p>Platformed Products:</p><ul><li><p>Now, we can extract all the reusable stuff and make it a platform, for example, Document Verification, Government Registry validation, Face Recognition, Age validation, etc.</p></li><li><p>All these platforms can be combined to create new products and support existing products that they sell to customers (KYC, ID Verification, Biometric verification, etc.).</p></li></ul><h3>Conclusion</h3><p>Alright, that&#8217;s all my thoughts about Platforms and Products. I wrote this based on my experiences. It is an opinionated topic, yet it&#8217;s an interesting one to discuss. It tests our craftsman skills to make configurable software that can adapt to most new use cases. It&#8217;s not 100% adaptable to new use cases, but at least we should aim to make fewer changes whenever a new use case comes up. </p><p>Some takeaways,</p><ul><li><p>It&#8217;s essential to understand how to differentiate between products and platforms. The platform is the foundation for composing or configuring customer-facing products. Moving forward, we should make our product work like a platform &#8212; easy to configure based on new markets or customer needs.</p></li><li><p>Investing in a platform movement has never been wrong, but expectations must be carefully aligned. Some people love to oversell the &#8220;platform&#8221; buzzword, but we engineers know the struggle to match expectations. I strongly advise aligning with all stakeholders when your team or organization starts overselling &#8220;platform&#8221; words in a meeting.</p></li><li><p>Having a clear line between platform and product helps us establish clear domain boundaries, which might affect the organization's structure. This is especially true in the microservices world, where we can group services based on domain, following a Domain-driven design approach. Unclear boundaries will create chaos and communication overhead and eventually affect productivity, issue resolutions, and feature developments.</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! You can subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p></p>]]></content:encoded></item><item><title><![CDATA[Menulis Dokumen Architecture North Star ]]></title><description><![CDATA[Sebagai pedoman teknis untuk penghubung bisnis, sistem dan team terlibat ketika membangun sistem yang kompleks.]]></description><link>https://notes.softwarearchitect.id/p/menulis-dokumen-architecture-north</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/menulis-dokumen-architecture-north</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Fri, 28 Apr 2023 04:23:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!0D2K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!0D2K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0D2K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0D2K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0D2K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0D2K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0D2K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg" width="800" height="533" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:533,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!0D2K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0D2K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0D2K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0D2K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2da6d7eb-4818-4f7d-b93f-f47f21f77680_800x533.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Photo by <a href="https://unsplash.com/@mikesetchell?utm_source=medium&amp;utm_medium=referral">Mike Setchell</a> on <a href="https://unsplash.com?utm_source=medium&amp;utm_medium=referral">Unsplash</a></figcaption></figure></div><p>Untuk orang-orang astronomi pasti sudah familiar dengan sebutan North Star (Bintang Utara). Saya sering dengar, bahwa orang pada zaman dahulu menggunakan rasi bintang sebagai penunjuk arah. Dan tidak jarang juga saya dengar, bahwa para pelaut dahulu kala, juga sering menggunakan bintang sebagai penunjuk arah. Salah satu bintang yang terkenal adalah Bintang Utara, atau disebut juga bintang Polaris.</p><p>Polaris posisinya tidak berubah, dan selalu menunjukkan posisi utara. Sehingga banyak orang pun menggunakan bintang Polaris sebagai pedoman ketika bernavigasi.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Dari sini, dapat kita ketahui beberapa kata kunci, yakni &#8220;pedoman&#8221;, &#8220;penunjuk arah&#8221;, dan &#8220;tidak berubah&#8221;. Dan karena inilah, banyak orang menyebut North Star, sama seperti tujuan ideal yang akan dicapai, baik personal ataupun organisasi.</p><p>Term ini jugalah yang kini banyak di adopsi oleh orang orang bisnis, seperti, North Star metric, yang menjelaskan parameter yang digunakan untuk memprediksi kesuksesan dari bisnis. Bisa di asumsikan, bisnis akan gemilang, jika perusahaan tersebut dapat mencapai &#8220;North Star metric&#8221;. </p><p>Agar lebih paham dengan konsep north star, buat kamu yang penggemar anime / manga One Piece, maka saya dapat analogikan menjadi lebih sederhana.</p><blockquote><p>Dalam cerita manga/anime One Piece, disebutkan tokoh utama, Luffy, Kapten Bajak Laut Topi Jerami, memiliki mimpi untuk menjadi Raja Bajak laut dengan menemukan One Piece, harta karun yang tak ternilai yang telah ditemukan oleh Raja Bajak laut sebelumnya.</p><p>Dalam perjalanannya, dia pun mengalami banyak situasi naik dan turun yang membuat dia menjadi lebih kuat dan penuh petualangan, dan seiring waktu dia juga me-rekrut nakama nya (atau crew bajak lautnya) untuk menemani perjalanannya menemukan harta karun One Piece.</p><p>Nah, semua crew ini, juga memiliki mimpi masing-masing. Sebut saja, Zoro si wakil kapten, bermimpi menjadi pendekar pedang nomor satu di dunia.  Nami, si navigator, ingin menggambar peta dunia. Sanji bermimpi ingin menemukan All Blue. Dan anggota beberapa anggota lainnya, juga memiliki mimpi yang berbeda-beda.</p><p>Jika dikaitkan pada satu titik, semua ini akan tercapai saat mereka menemukan One Piece. Karena One Piece tersebut berada di pulau terakhir yang ada di dunia One Piece. Jika disederhanakan, dalam One Piece universe, </p><ul><li><p>Zoro akan bisa mengakui dirinya jadi pendekar terbaik, jika dia telah melewati semua tantangan dan sampai di pulau terakhir. Perlu diketahui untuk mencapai hal tersebut sangatlah banyak rintangan, perkelahian, dan perang dimana-mana.</p></li><li><p>Nami akan dapat menggambar seluruh peta dunia One Piece universe, jika mereka telah menemukan pulau terakhir.</p></li><li><p>Sanji juga akan menemukan All Blue, yang hanya ada di pulau terakhir.</p></li><li><p>Begitu juga anggota lainnya, seperti Franky, yang ingin membuat kapal terbaik yang mampu melewati segala jenis laut dan badai, ya tentu saja ini hanya bisa divalidasi jika mereka telah mencapai pulau terakhir.</p></li></ul></blockquote><p>Dari cerita One Piece diatas, dapat kita petakan pada struktur perusahaan. Harta karun One Piece  yang ada pada pulau terakhir, merupakan tujuan akhir dari Bajak Laut Topi Jerami pada cerita diatas, dalam konteks perusahaan ini merupakan visi perusahaan. Visi perusahaan bisa apa saja, seperti eccomerce terbaik di dunia, atau one stop solutions for payments,  atau ekspansi ke berbagai negara, dan sebagainya. Ini merupakan contoh dari North Star. Visi perusahaan atau impian yang hendak dicapai si perusahaan.</p><p>Lalu, semua crew dalam Topi Jerami (anggota bajak laut Luffy) pada cerita One Piece diatas, bisa di analogikan seperti tim/divisi dalam setiap perusahaan. Contoh, Nami ingin memetakan seluruh dunia, mungkin dalam organisasi, ini adalah divisi sales dan marketing, yang ingin acquire user sebanyak-banyaknya, bahkan seluruh user di dunia. Zoro ingin jadi pedekar terbaik, ini mungkin tim engineering, yang ingin memiliki world-class engineering culture terbaik dan menjadi pioner di dunia teknologi. Franky ingin membuat kapal terbaik, bisa di analogikan seperti Infra team yang mampu support dan scale bisnis support zero down time, dan fast response dalam segala medan.</p><p>Sehingga, berlandas pada visi (north-star), semua tim yang ada pada perusahaan akan bekerja independen namun saling mendukung guna mencapai visi (north-star) dari perusahaan tersebut.</p><h2>Architecture North Star</h2><p>Dari cerita diatas, kita sudah tahu apa itu North Star secara garis besar ketika dipetakan dalam struktur organisasi. Lalu saya akan membawa kita lebih detail lagi, yaitu North Star dalam sistem architecture. Konsepnya sama, bedanya pengaplikasian-nya lebih ke teknis, dan fokus pada sistem architecture.</p><p>Saat perusahaan telah menetapkan North Star metric yang akan dicapai, maka semua tim/divisi akan saling bekerja sama untuk mencapai tujuan tersebut. Contoh, Perusahaan akan fokus pada ekspansi ke negara lain.</p><p>Mungkin dari operation, dan business tidaklah terlalu banyak major changes. Namun jika kita berbicara dengan sistem, sistem yang sudah berjalan bertahun-tahun, sistem yang sudah kompleks, tidaklah mudah untuk support kebijakan tersebut. Terlalu banyak resiko yang harus dipertimbangkan, seperti refactor, versioning, data migration. Belum lagi depencies antar service/tim yang biasanya berimbas ke banyak tim engineering lain. </p><p>Karena faktor kompleksitas inilah,  maka semua perubahan perlu dilakukan dengan hati-hati. Dibutuhkan satu dokumen algiment yang mencakup ideal design yang support terhadap kebijakan perusahaan yang baru. Dan tentu saja harus menjelaskan siapa saja tim-tim yang terkena impactnya. Terlebih jika tim yang kena impact adalah tim core yang terintegrasi oleh banyak tim produk, seperti Auth, Ledger (core banking), dan lain sebagainya. Dan dokumen ini lah kita sebut dengan Architecture North Star document.</p><p>Untuk menyimpulkan, tujuan dari Architecture North Star tidak lain diantaranya adalah memastikan semua orang memiliki:</p><ul><li><p><strong>Shared Understanding</strong>&#8202;&#8212;setiap tim yang terlibat akan memiliki pemahaman yang sama dan visi yang sama</p></li><li><p><strong>Coherent Architecture</strong>&#8202;&#8212;sistem architecture yang jelas dan bukan arsitektur hacky-hacky atau tambal sulam yang menimbulkan banyak tech debt.&#8202;</p></li><li><p><strong>Less Coordination&#8202;</strong>&#8212;&#8202;membantu tim membuat keputusan cepat yang tajam tanpa koordinasi dari architect.</p></li><li><p><strong>Visibility</strong>&#8202;&#8212;&#8202;membuat semua orang paham dan memiliki common language baik dari product / business dan juga engineering</p></li><li><p><strong>Autonomy</strong>&#8202;&#8212;&#8202;semua team akan bergerak sendiri, dan mengontrol pace masing-masing selama mereka memiliki tujuan yang sama.</p></li></ul><p>Jadi, Architecture North Star, akan menjadi fondasi untuk semua tim engineering/product yang terlibat untuk mencapai suatu goal, baik business goal, ataupun engineering goal. Dan dokumen tersebut haruslah fixed, mudah digunakan, mudah diakses, dan tidak ambigu, serta memiliki cukup informasi yang membantu semua team membuat keputusan sendiri.</p><h3>My Experience in Writing Architecture North Star </h3><p>Beberapa bulan terakhir, saya mendapat mandat untuk menjadi architect dari 4 tim <em>core</em> yang ada di perusahaan saya bekerja saat ini. Dan karena ini tim <em>core</em>, maka banyak tim-tim lain yang beketergantungan dengan ke 4 tim ini. Ke 4 tim tersebut adalah, Auth team &#8212; dimana setiap product, user pasti membutuhkan fitur Auth, dan menjadi pintu utama untuk semua akses, seperti API Key, User login, Server key, dsb.</p><p>Lalu 3 tim lagi adalah, Ledger team, Billing team, dan Reporting team. Karena perusahaan saya bekerja adalah perusahaan SaaS Payment Gateway, maka setiap produk haruslah terintegrasi dengan Ledger (core-banking) untuk pencatatan transaksi pembayaran, lalu karena produk utama kami adalah SaaS, maka semua produk juga harus terintegrasi ke Billing system dan Reporting, yang membuat semua produk dapat (<em>allow</em>) me-monetize produk mereka dengan pricing yang mereka inginkan.</p><p>Nah ke 4 tim inti ini, merupakan menjadi tanggung jawab saya untuk memastikan setiap development baik fitur, refactor, atau apapun yang berhubungan development tidak mengganggu tim lain secara drastis.</p><p>Normalnya, semua tim produk memiliki roadmap dan planning yang berbeda-beda. Memiliki prioritas berbeda, dan memiliki <em>pace</em> berbeda. Sehingga, saat kita develop suatu fitur di tim core, maka belum tentu semua tim yang ter-impact akan dapat langsung follow dengan cepat.</p><p>Lalu jika ada kebijakan organisasi yang sangat berhubungan dengan tim core, maka akan banyak tim lain yang kena impact. Sehingga saya pun harus menuliskan dokumen yang akan menjelaskan garis besar bagaimana ke 4 tim ini di masa depan, serta langkah-langkah yang harus dilakukan untuk mencapai titik tersebut.</p><p>Dokumen ini yang kami sebut &#8220;Architecture North Star document&#8221; akan menjadi panduan untuk semua tim terlibat membuat prioritas masing-masing. Dan membuat setiap tim lebih autonomous, termasuk di tim inti.  Sehingga semua tim align pada satu visi design yang akan dicapai. Meskipun banyak prioritas dari issue lain seperti kebutuhan infra (DB upgrade, maintainance, etc), atau bahkan PM request fitur baru, maka tim engineer akan tetap align, techspec document dan development akan tetap berlandas pada ideal design yang sudah terpapar pada Architecture North Star document. </p><h2>Menulis dokumen Architecture North Star</h2><p>Untuk menulis dokumen Architecture North Star, buat saya tidaklah mudah, karena membutuhkan banyak koordinasi dan <em>aligment</em> agar mencapai kesepakatan terhadap semua <em>stakeholders</em>.</p><h4>List Pain and Dreams</h4><p>Namun langkah yang saya lakukan adalah tentu saja dimulai dari north-star metric yang akan dicapai perusahaan. Sebut saja, mencapai 100Billion transactions. Atau acquire 100 juta user baru. Atau ekspansi ke 5 negara baru.</p><p>Untuk support kebijakan ini, banyak tim harus memikirkan kondisi mereka saat ini. Apa saja yang menjadi <em>blocker</em> dimereka? Lalu apa <em>ideal state</em> yang harus dimiliki.</p><p>Sebut saja, untuk tim saya, yakni tim core. Maka untuk support ekpansi ke negara baru, maka banyak perubahan yang harus dilakukan pada sistem sistem core. Contoh, yang sebelumnya sistem kami hanya spesifik dengan negara Indonesia, maka kami harus refactor sistem agar bisa jadi <em>agnostic</em> terhadap semua negara. Atau setidaknya <em>configurable</em>, karena mungkin setiap negara memiliki regulasi yang berbeda-beda.</p><p>Nah untuk mengetahui apa saja yang perlu direfactor, tentu saja yang saya lakukan adalah melakukan interview dengan semua stakeholders yang terlibat. Apa saja pains yang ada sekarang jika kita hendak ekspansi ke negara baru? Lalu bagaimana dreams yang diharapkan?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_mZS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_mZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 424w, https://substackcdn.com/image/fetch/$s_!_mZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 848w, https://substackcdn.com/image/fetch/$s_!_mZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 1272w, https://substackcdn.com/image/fetch/$s_!_mZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_mZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png" width="1456" height="560" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:560,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:159812,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_mZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 424w, https://substackcdn.com/image/fetch/$s_!_mZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 848w, https://substackcdn.com/image/fetch/$s_!_mZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 1272w, https://substackcdn.com/image/fetch/$s_!_mZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd90c3fbf-81c6-4f83-aebe-c65db389615e_2152x828.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">list pain and dreams</figcaption></figure></div><p>Hasil dari interview ini akan disimpan dalam dokumen pain and dreams. Dokumen ini akan dianalisis tentu saja dengan pertimbangan current system yang sudah berjalan.</p><h4>Analyze and Write Architecture North Star Document</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2OrG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2OrG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 424w, https://substackcdn.com/image/fetch/$s_!2OrG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 848w, https://substackcdn.com/image/fetch/$s_!2OrG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 1272w, https://substackcdn.com/image/fetch/$s_!2OrG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2OrG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png" width="1456" height="996" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:996,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190314,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2OrG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 424w, https://substackcdn.com/image/fetch/$s_!2OrG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 848w, https://substackcdn.com/image/fetch/$s_!2OrG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 1272w, https://substackcdn.com/image/fetch/$s_!2OrG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F08d66f30-2d7c-4865-8d92-8d7fc8482579_2262x1547.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">analyze pain and dreams</figcaption></figure></div><p>Setelah Pain and Dreams kita dapatkan, maka tahap selanjutnya adalah memetakan system yang ada sekarang, sejauh apa perubahan yang perlu dilakukan untuk meng-cover keseluruhan pain and dreams. Disinilah role seorang Architect dibutuhkan untuk melihat secara high-level view. Architect harus menjadi jembatan dan melihat dari semua sisi, dari sisi stakeholders dan sisi tim yang terlibat, bahkan dari sisi user atau customer. </p><p>Core team tentu saja memiliki ideal solutions, namun terkadang ideal solution tidak align dengan stakeholders lainnya, eg, Sales, Product teams, Finance, dsb. Sehingga perlu aligment yang dipimpin oleh si Architect.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ViVE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ViVE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 424w, https://substackcdn.com/image/fetch/$s_!ViVE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 848w, https://substackcdn.com/image/fetch/$s_!ViVE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 1272w, https://substackcdn.com/image/fetch/$s_!ViVE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ViVE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png" width="930" height="636" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:636,&quot;width&quot;:930,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:180010,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!ViVE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 424w, https://substackcdn.com/image/fetch/$s_!ViVE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 848w, https://substackcdn.com/image/fetch/$s_!ViVE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 1272w, https://substackcdn.com/image/fetch/$s_!ViVE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2c50a4b-4a1a-4a40-878c-48c4d75b4cf2_930x636.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">event storming with all teams, domain experts, and all impacted stakeholders</figcaption></figure></div><p>Praktis yang saya lakukan ditahap ini adalah dengan mengikuti Domain Driven Design (DDD). Dimana saya akan melakukan beberapa praktis DDD seperti <a href="https://www.eventstorming.com/">Event Storming</a>, atau<a href="https://domainstorytelling.org/"> Domain Story Telling</a> yang dimana tujuannya adalah memperjelas domain boundaries, dan memperjelas ideal flow berdasarkan domain knowledge para domain experts (eg, PM, Engineer, Sales, Finance dsb) guna menyelesaikan masalah yang ada pada Pain and Dreams yang sudah di dokumentasikan.</p><p>Dalam praktiknya, ketika membuat dokumen architecture north-star untuk mendapatkan gambarannya dan aligned dengan semua stakehodler, para domain expert, bisa mecapai 3-6 bulan agar dapat selesai. Semakin banyak tim terlibat, maka makin lama dokumen akan dapat di finalisasi.</p><h4>Finalized and Distribute Architecture North Star</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yW6N!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yW6N!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 424w, https://substackcdn.com/image/fetch/$s_!yW6N!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 848w, https://substackcdn.com/image/fetch/$s_!yW6N!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 1272w, https://substackcdn.com/image/fetch/$s_!yW6N!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yW6N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png" width="1456" height="1226" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1226,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:188589,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!yW6N!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 424w, https://substackcdn.com/image/fetch/$s_!yW6N!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 848w, https://substackcdn.com/image/fetch/$s_!yW6N!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 1272w, https://substackcdn.com/image/fetch/$s_!yW6N!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F58692f72-d257-4699-bec0-835937db9fb3_1829x1540.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">finalize the north-star and distrbute to all stakeholders</figcaption></figure></div><p>Saat architecture north star sudah selesai, maka dokumen tersebut sudah dapat digunakan sebagai bahan acuan atau pedoman untuk development atau perbaikan semua sistem atau produk yang terlibat.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_kkd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_kkd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 424w, https://substackcdn.com/image/fetch/$s_!_kkd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 848w, https://substackcdn.com/image/fetch/$s_!_kkd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 1272w, https://substackcdn.com/image/fetch/$s_!_kkd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_kkd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png" width="496" height="1179.1532329495128" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2684,&quot;width&quot;:1129,&quot;resizeWidth&quot;:496,&quot;bytes&quot;:200239,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!_kkd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 424w, https://substackcdn.com/image/fetch/$s_!_kkd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 848w, https://substackcdn.com/image/fetch/$s_!_kkd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 1272w, https://substackcdn.com/image/fetch/$s_!_kkd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4d9562b-c2bf-468f-9f83-49943bcc8ca2_1129x2684.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">how architecture north-star document owner use the document </figcaption></figure></div><p>Untuk owner (pada diagram, core team) dari dokumen architecture north star, mereka dapat menggunakan dokumen tersebut untuk sebagai acuan ketika pengembangan fitur baru, atau bahkan refactor sistem yang sekarang untuk mencapai ideal state sesuai yang sudah dipaparkan pada dokumen architecture north star.</p><p>Sama halnya dengan tim product atau tim yang kena impact dari north-star dokumen dari tim core, maka mereka dapat menggunakan architecture north star tim core juga sebagai acuan untuk pengembangan fitur baru, atau untuk sebagai acuan di architecture north star mereka secara tim juga.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Oheh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Oheh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 424w, https://substackcdn.com/image/fetch/$s_!Oheh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 848w, https://substackcdn.com/image/fetch/$s_!Oheh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 1272w, https://substackcdn.com/image/fetch/$s_!Oheh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Oheh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png" width="638" height="958.3145604395604" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2187,&quot;width&quot;:1456,&quot;resizeWidth&quot;:638,&quot;bytes&quot;:239706,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Oheh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 424w, https://substackcdn.com/image/fetch/$s_!Oheh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 848w, https://substackcdn.com/image/fetch/$s_!Oheh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 1272w, https://substackcdn.com/image/fetch/$s_!Oheh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60a8a516-a1f9-4036-8b86-91cbe4500403_1787x2684.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">how the impacted team uses the other&#8217;s architecture north star document</figcaption></figure></div><p>Sehingga, meskipun setiap produk memiliki prioritas berbeda, tetapi dengan semua tetap aligned pada satu visi yang ada pada architecture north-star, perubahan pun tidak terlalu mengejutkan, melainkan lebih terstruktur.</p><p>Dan yang paling penting adalah<strong>, semua proses ini haruslah diulang-ulang / direvisi kembali sesuai kebutuhan. </strong>Karena seiring dengan waktu berjalan, business goal mungkin berubah, sehingga ketika itu terjadi, kita harus tetap memastikan architecture kita tetap align dengan tujuan perusahaan yang baru.</p><h2>Kesimpulan</h2><p>North Star dalam artinya, terdapat beberapa kata kunci, yakni &#8220;pedoman&#8221;, &#8220;penunjuk arah&#8221;, dan &#8220;tidak berubah&#8221;. Sehingga dari makna ini, banyak orang menyebut North Star, sama seperti tujuan ideal yang akan dicapai, baik personal ataupun organisasi.</p><p>North Star Metric, menjelaskan parameter yang digunakan untuk memprediksi kesuksesan dari bisnis.  Bisa juga diartikan sebagai dreams yang ingin dicapai dari sebuah perusahaan, eg, 100 Billion transactions monthly.</p><p>Architecture North Star, merupakan ideal system architecture yang harus dicapai oleh tim yang terlibat. Architecture North Star ditulis dalam satu dokumen yang dapat dijadikan sebagai pedoman dan referensi oleh semua tim engineering yang terlibat. Dokumen ini akan digunakan ketika melakukan development atau refactor pada sistem yang telah berjalan.</p><p>Untuk menulis dokumen Architecture North Star, dimulai dari menerjemahkan visi perusahaan,  dan perubahan yang harus dilakukan untuk mendukung visi tersebut. Secara garis besar, berikut flow bagaimana proses dokumen arhctecture norht star. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!cAM3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!cAM3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 424w, https://substackcdn.com/image/fetch/$s_!cAM3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 848w, https://substackcdn.com/image/fetch/$s_!cAM3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 1272w, https://substackcdn.com/image/fetch/$s_!cAM3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!cAM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png" width="1456" height="2229" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2229,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:558189,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!cAM3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 424w, https://substackcdn.com/image/fetch/$s_!cAM3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 848w, https://substackcdn.com/image/fetch/$s_!cAM3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 1272w, https://substackcdn.com/image/fetch/$s_!cAM3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe906f15-b395-4c9a-9425-f9b4a5f80bcb_2400x3674.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">the complete flow of the North Star document</figcaption></figure></div><ul><li><p>List Pain and Dream yang dialami stakeholders, e.g., Customer, anggota tim, management, tim lain, sales, account manager, partners, dsb.</p></li><li><p>Define solusi ideal yang dapat menyelesasikan semua itu dengan berlandas pada fokus bisnis, dan keadaan system yang sudah ada</p></li><li><p>Analisis sistem, proses apa saja yang terdampak untuk menuju kondisi ideal tersebut.</p></li><li><p>Gunakan dokumen Architecture North star sebagai pedoman ketika develop fitur baru, atau refactor sistem yang sudah berjalan.</p></li><li><p>Ulang proses ini setiap ada variable yang tidak terduga, perubahan business goal, atau lain sebagainya yang menjadi blocker semua tim untuk mencapai Architecture North Star. </p></li></ul><div><hr></div><p>References</p><ul><li><p><a href="https://excalidraw.com/#json=GoXr_CSqewwTXvsVOZh4c,JUo9MEp4WRRyFB3qci-xFw">Excalidraw for a better diagram view</a></p></li><li><p><a href="https://www.youtube.com/watch?v=1YSQJWSti-M">Scaling engineering teams with an architecture North Star | Hanjie Ji | #LeadDevAustin</a></p></li></ul><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Diary #4 C4-Model pada Software Architecture]]></title><description><![CDATA[Memahami keseluruhan sistem architecture melalui C4-Model diagram dengan mudah.]]></description><link>https://notes.softwarearchitect.id/p/diary-4-c4-model-pada-software-architecture</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/diary-4-c4-model-pada-software-architecture</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Mon, 16 Jan 2023 02:30:59 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Menjalani peran Software Architect ternyata tidak mudah. Tim, manajer, bahkan perusahaan berharap banyak dari seorang Software Architect, yang salah satunya adalah dapat memahami keseluruhan sistem, baik dari bird-view maupun dari sisi implementasi detail pada level koding. </p><p>Melakukan peralihan konteks dari high-level view ke tingkat detail terbukti sangat melelahkan. Semakin kompleks sistem yang ada pada perusahaan, maka semakin sukar untuk memahami keseluruhan secara detail. Jujur saja saya pun tidak yakin ada orang yang mampu memahami keseluruhan sistem dari high-level view sampai tingkat detail (koding) tanpa membaca dokumentasi. Jika pun ada, maka saya akan meragukan apakah ia manusia, atau alien?</p><h4>Dongeng:  Kisah Pilu Software Architect</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!q1es!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!q1es!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 424w, https://substackcdn.com/image/fetch/$s_!q1es!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 848w, https://substackcdn.com/image/fetch/$s_!q1es!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 1272w, https://substackcdn.com/image/fetch/$s_!q1es!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!q1es!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png" width="1456" height="679" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:679,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:138724,&quot;alt&quot;:&quot;Architect Calendar Schedule&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Architect Calendar Schedule" title="Architect Calendar Schedule" srcset="https://substackcdn.com/image/fetch/$s_!q1es!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 424w, https://substackcdn.com/image/fetch/$s_!q1es!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 848w, https://substackcdn.com/image/fetch/$s_!q1es!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 1272w, https://substackcdn.com/image/fetch/$s_!q1es!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F609d814c-cb91-4b0e-9bfe-39201cbe3427_1532x714.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Architect Calendar Schedule</figcaption></figure></div><p>Ini adalah kisah seorang Arsitek yang bekerja di sebuah perusahaan di Indonesia. Screenshot di atas menggambarkan salah satu kegiatan hariannya. Ada beberapa pola yang bersifat detail seperti RFC xxxx, Standup, dan lainnya. Selain itu, ia juga menghadiri beberapa rapat bersifat <em>high-level view</em>, seperti Decoupling xxxx, Risk xxx, Event Storming xxx, Domain Storytelling xxx, Centralizing xxx, dan lainnya. </p><p>Misalnya, ketika menghadiri rapat bertema Decoupling xxx, si arsitek harus memikirkan batasan domain antara dua atau tiga tim yang terlibat dalam proyek tersebut. Atau, ketika menghadiri rapat dengan pihak <em>upper management</em>, misal: Centralizing xxx, ia harus memikirkan rencana dan arah jangka panjang dari sistem yang diwakilkan, mempertanggung jawabkan north-star architecture yang akan dimiliki tim tersebut. Kemudian setelah selesai semua rapat high-level view, ia juga harus menghadiri rapat RFC sync bersama salah satu engineer.</p><p>Berikut cuplikan percakapan rapat mereka.</p><blockquote><p><strong>Iman Tumorang:</strong> Hi? Yes what can I help you?<br><strong>John Snow:</strong> I can&#8217;t pull the Go private library, how to do it?<br><strong>Iman Tumorang:</strong> Oh you can <a href="https://blog.xendit.engineer/hosting-internal-proxy-and-internal-pkg-go-dev-for-internal-libraries-documentation-b0d47d92bf10">read this</a>, and please make sure you have connected to our VPN <br>&#8230;</p><p><strong>John Snow: </strong>Which repo should I implement this, and which queue runner? Which cron? etc..</p></blockquote><p>Bisakah Anda membayangkan saat Anda sudah letih dengan banyaknya meeting dengan tema yang high-level view, kemudian secara drastis menerima pertanyaan yang bersifat sangat detail? Bagaimana cara Anda bisa dengan cepat melakukan peralihan konteks dan mengarahkan engineer terkait ke repositori dan kodingan yang tepat?</p><p>Contoh yang lain adalah, bayangkan ketika timmu kedatangan engineer baru, dan dia ingin memahami keseluruhan sistem yang timmu miliki dari end-to-end? Bagaimana cara kamu menjelaskannya dengan mudah?</p><h3>Introducing C4 Model</h3><p>Seorang gamer yang pernah bermain CounterStrike, atau PointBlank(PB) pasti familiar dengan C4. Tenang teman, C4 yang saya maksud disini bukanlah hal yang berbahaya seperti C4 pada game tersebut. C4 disini memang bisa meledak, tetapi meledak dari yang high-level menjadi kecil dan detail.</p><blockquote><p>TLDR; C4 Model dari website ini  https://c4model.com/</p><ol><li><p>A set of hierarchical abstractions (software systems, containers, components, and code).</p></li><li><p>A set of hierarchical diagrams (system context, containers, components, and code).</p></li><li><p>Notation independent.</p></li></ol></blockquote><p>Untuk menyimpulkan, C4 Model adalah sekumpulan diagram yang menjelaskan keseluruhan sistem secara hierarki dari hulu ke hilir. Disebut dengan C4 karena terdapat 4C dalam C4 Model, yaitu Context, Container, Components dan Code. Jadi ke-4 C ini saling berketerkaitan dan berurutan. Dan jika disederhanakan dalam diagram mungkin seperti berikut. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QRHp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QRHp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 424w, https://substackcdn.com/image/fetch/$s_!QRHp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 848w, https://substackcdn.com/image/fetch/$s_!QRHp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 1272w, https://substackcdn.com/image/fetch/$s_!QRHp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QRHp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png" width="1456" height="589" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/3822e749-6106-403a-a94a-34daf0149579_4705x1902.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:589,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2752186,&quot;alt&quot;:&quot;C4 Model diagram&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C4 Model diagram" title="C4 Model diagram" srcset="https://substackcdn.com/image/fetch/$s_!QRHp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 424w, https://substackcdn.com/image/fetch/$s_!QRHp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 848w, https://substackcdn.com/image/fetch/$s_!QRHp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 1272w, https://substackcdn.com/image/fetch/$s_!QRHp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F3822e749-6106-403a-a94a-34daf0149579_4705x1902.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">C4 Model diagram</figcaption></figure></div><p>Dengan 4 level ini, akan sangat membantu setiap orang untuk dapat memahami sistem secara keseluruhan baik dari high-level sampai ke level detail. Tujuan dari C4 Model ini paling penting adalah discovery dan traceability. Kita dapat dengan mudah memahami sistem dari end-to-end bahkan sampai level kodingan.</p><h4>Level 1:  Context</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SvhN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SvhN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 424w, https://substackcdn.com/image/fetch/$s_!SvhN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 848w, https://substackcdn.com/image/fetch/$s_!SvhN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 1272w, https://substackcdn.com/image/fetch/$s_!SvhN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SvhN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png" width="1210" height="1166" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1166,&quot;width&quot;:1210,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1209612,&quot;alt&quot;:&quot;Context from C4 Model&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Context from C4 Model" title="Context from C4 Model" srcset="https://substackcdn.com/image/fetch/$s_!SvhN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 424w, https://substackcdn.com/image/fetch/$s_!SvhN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 848w, https://substackcdn.com/image/fetch/$s_!SvhN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 1272w, https://substackcdn.com/image/fetch/$s_!SvhN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6a0e21e1-1a7a-4975-bbac-106a119d1f1d_1210x1166.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Context from C4 Model</figcaption></figure></div><p><strong>Context</strong> merupakan pintu masuk untuk melihat seluruh sistem yang dimiliki. Jika terdapat banyak entitas perusahaan, maka setiap entitas dapat disebut sebagai sebuah sistem. Sebagai contoh, Eccomerce, Payment, dll. </p><p>Pada level ini, cukup dengan memahami secara high-level view. Fokus yang harus dibicarakan adalah tentang bisnis atau stakeholder lainnya yang masih berada pada level high-level view. </p><p><strong>Scope</strong> yang harus dipahami adalah Users, 3rd Parties (Partner), Blackbox System, Alur Bisnis, User Journey, dll. </p><p><strong>Audience</strong> yang hadir ketika membahas level ini adalah semua stakeholders bisnis (Sales/Partner/Account Manager), Product (PM, UI/UX, QA), Architect, dan Developer. Jika salah satu audience tersebut hadir, maka kita cukup membahas dilevel Context saja, tidak perlu lebih mendetail.</p><h4>Level 2: Container</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!55dC!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!55dC!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 424w, https://substackcdn.com/image/fetch/$s_!55dC!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 848w, https://substackcdn.com/image/fetch/$s_!55dC!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 1272w, https://substackcdn.com/image/fetch/$s_!55dC!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!55dC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png" width="1188" height="1112" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1112,&quot;width&quot;:1188,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1135445,&quot;alt&quot;:&quot;Container from C4 Model&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Container from C4 Model" title="Container from C4 Model" srcset="https://substackcdn.com/image/fetch/$s_!55dC!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 424w, https://substackcdn.com/image/fetch/$s_!55dC!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 848w, https://substackcdn.com/image/fetch/$s_!55dC!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 1272w, https://substackcdn.com/image/fetch/$s_!55dC!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F6348ab9b-2f0c-4e70-beac-77875d03cfe9_1188x1112.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Container from C4 Model</figcaption></figure></div><p>Saat kita melakukan zoom-in lebih detail dalam sebuah sistem dari Context (C-Level 1), kita akan menemukan <strong>Container</strong>. Container ini dapat dianalogikan seperti tim-tim yang ada di suatu organisasi, ataupun lebih tepatnya adalah aplikasi yang dimiliki oleh perusahaan tersebut yang merupakan masih bagian dari Context (C-teratas). </p><p>Container dapat berupa Microservice, Aplikasi (Web/Mobile/Desktop), Dashboard, dan lainnya. </p><p><strong>Scope</strong> yang harus dipahami adalah semua scope dari C-sebelumnya (Context) ditambah dengan container/aplikasi yang merupakan bagian dari C-sebelumnya (Context). </p><p><strong>Audience</strong> yang wajib hadir ketika membahas level ini adalah semua stakeholder Product (PM, UI/UX, QA), Architect, dan Developer. Di level ini para Business stakeholder sudah menjadi opsional dan tidak perlu tahu secara detail akan level ini.</p><h4>Level 3: Component</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!06LR!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!06LR!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 424w, https://substackcdn.com/image/fetch/$s_!06LR!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 848w, https://substackcdn.com/image/fetch/$s_!06LR!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 1272w, https://substackcdn.com/image/fetch/$s_!06LR!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!06LR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png" width="1325" height="1131" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1131,&quot;width&quot;:1325,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1588368,&quot;alt&quot;:&quot;Component from C4 Model&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Component from C4 Model" title="Component from C4 Model" srcset="https://substackcdn.com/image/fetch/$s_!06LR!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 424w, https://substackcdn.com/image/fetch/$s_!06LR!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 848w, https://substackcdn.com/image/fetch/$s_!06LR!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 1272w, https://substackcdn.com/image/fetch/$s_!06LR!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4f6a9b73-702a-4dc5-b50a-d4ad3c6d0ac3_1325x1131.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Component from C4 Model</figcaption></figure></div><p>Saat kita telah berpindah ke container/aplikasi yang lebih spesifik, kita akan memperluas cakupan pemahaman kita terhadap aplikasi dengan melihat komponen-komponen didalamnya. Tergantung dari container tersebut, misalnya microservice, maka akan terdapat beberapa komponen seperti Cron, API server, Queue consumer, gRPC handler, dll. </p><p>Sementara jika container sebelumnya adalah aplikasi web maka kemungkinan komponen yang terdapat bisa berupa SPA, Frontend Gateway, dan lain-lain. Pada level ini kita akan melihat semua komponen yang terdapat pada container yang telah kita zoom-in dan menjelaskan arsitektur aplikasi secara internal. </p><p><strong>Scope</strong> yang harus dipahami adalah semua scope dari container sebelumnya ditambah dengan komponen-komponen yang terdapat pada setiap container/aplikasi, seperti Cron, gRPC, SPA, Queue Consumer, dan lainnya. </p><p><strong>Audience</strong> yang wajib hadir saat membahas level ini adalah semua stakeholder Arsitektur dan Developer. Business dan Product stakeholder sudah menjadi opsional dan tidak perlu tahu secara detail akan level ini.</p><h4>Level 4: Code</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-lOA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-lOA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 424w, https://substackcdn.com/image/fetch/$s_!-lOA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 848w, https://substackcdn.com/image/fetch/$s_!-lOA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 1272w, https://substackcdn.com/image/fetch/$s_!-lOA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-lOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png" width="883" height="719" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:719,&quot;width&quot;:883,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:412949,&quot;alt&quot;:&quot;Code from C4 Model&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Code from C4 Model" title="Code from C4 Model" srcset="https://substackcdn.com/image/fetch/$s_!-lOA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 424w, https://substackcdn.com/image/fetch/$s_!-lOA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 848w, https://substackcdn.com/image/fetch/$s_!-lOA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 1272w, https://substackcdn.com/image/fetch/$s_!-lOA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F382b7b14-bd5b-4d1d-9a4a-352275b8fcbe_883x719.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Code from C4 Model</figcaption></figure></div><p>Setelah salah satu komponen dipilih, dengan melakukan zoom-in lagi, kita dapat menemukan kodingan dari komponen tersebut. Artifaknya dapat berupa tautan ke repository Git (Github/Bitbucket, dll), atau dokumentasi langsung ke UML/ERD/Class diagram, atau apapun yang menjelaskan tentang bentuk asli dari komponen tersebut. </p><p><strong>Scope</strong> yang harus dipahami adalah bentuk wujud nyata dari sistem yang dibangun, misalnya kodingan, UML/ERD/Class diagram, dll. </p><p><strong>Audience</strong> yang wajib hadir saat membahas level ini adalah semua stakeholder Arsitektur dan Developer.</p><h3>Workshop: Sistem Informasi Absensi Karyawan</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aBs2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aBs2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aBs2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aBs2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aBs2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aBs2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg" width="600" height="337" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:337,&quot;width&quot;:600,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Tony Stark Eye Roll meme&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Tony Stark Eye Roll meme" title="Tony Stark Eye Roll meme" srcset="https://substackcdn.com/image/fetch/$s_!aBs2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aBs2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aBs2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aBs2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F390a61ae-f49e-427c-b9f4-54c3a24f2bc8_600x337.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Mungkin untuk dapat mengenal lebih dekat dengan C4 Model, saya akan buat mini-workshop pemetaan sistem ke dalam C4 Model &#8212; dengan menggunakan IcePanel.io sebagai platform diagramnya.</p><p>The story:</p><blockquote><p>Perusahaan Tumorang Happy Employee Inc adalah penyedia HRIS terdepan di dunia. Salah satu produk andalan mereka adalah fitur absensi karyawan, yang telah dipakai oleh jutaan perusahaan di seluruh dunia, termasuk Gugel, MateMeta, Macrohard, dan bahkan Mamazon juga menjadi salah satu klien mereka. </p><p>Mereka memiliki banyak Software Architect yang menangani sistem mereka secara keseluruhan, salah satunya adalah Jack. Jack sangat kompeten dan terlibat dalam banyak proyek, sehingga dia pun mulai merasa kewalahan dengan context switching yang kadang-kadang tidak bisa dihindari. </p><p>Untuk meningkatkan discoverability, traceability, serta mempermudah learning curve para engineer dalam memahami keseluruhan sistem, Jack pun memetakan keseluruhan sistem Tumorang Happy Employee menggunakan C4 Model.</p></blockquote><p>Berikut pemetaan keseluruhan sistem yang dilakukan oleh Jack dalam bentu C4 Model.</p><h5>Level 1: Context</h5><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f2VH!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f2VH!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 424w, https://substackcdn.com/image/fetch/$s_!f2VH!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 848w, https://substackcdn.com/image/fetch/$s_!f2VH!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 1272w, https://substackcdn.com/image/fetch/$s_!f2VH!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f2VH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png" width="1456" height="544" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:544,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:254134,&quot;alt&quot;:&quot;Context: Tumorang Happy Employee Inc&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Context: Tumorang Happy Employee Inc" title="Context: Tumorang Happy Employee Inc" srcset="https://substackcdn.com/image/fetch/$s_!f2VH!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 424w, https://substackcdn.com/image/fetch/$s_!f2VH!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 848w, https://substackcdn.com/image/fetch/$s_!f2VH!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 1272w, https://substackcdn.com/image/fetch/$s_!f2VH!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F9edc21a3-676f-4807-b30a-5a5cb01ad079_1918x716.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Context: Tumorang Happy Employee Inc</figcaption></figure></div><p>Pada level 1 &#8212; Context, hanya terdapat 3 kotak umum, yaitu Employees, sistem Tumorang Happy Employee, dan 3rd Party (Email Platform). Di level ini, semua aktivitas inti yang dilakukan oleh user dapat dilistkan dalam bentuk panah. Namun, untuk mempermudah, maka hanya dibuat satu garis panah saja. Dengan asumsi bahwa semua aktivitas dari sisi client sudah tertutupi dengan satu arah panah. </p><p>Kemudian, Sistem absensi juga ternyata memiliki integrasi ke 3rd Parties, sehingga ditarik garis panah ke 3rd Party (Email platform). Terlepas dari semua aktivitas yang ada, dapat di asumsikan semua aktifitas ke 3rd Party hanya dalam satu garis panah.</p><h5>Level 2: Container</h5><p>Nah, saat si &#8220;Sistem Absensi&#8221; kita zoom-in, (tombol zoom), maka kita akan dapat melihat keseluruhan container/application yang ada di dalam Sistem Absensi.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nHGv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nHGv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 424w, https://substackcdn.com/image/fetch/$s_!nHGv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 848w, https://substackcdn.com/image/fetch/$s_!nHGv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 1272w, https://substackcdn.com/image/fetch/$s_!nHGv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nHGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png" width="1456" height="757" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:757,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:403472,&quot;alt&quot;:&quot;Container: Tumorang Happy Employee Inc&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Container: Tumorang Happy Employee Inc" title="Container: Tumorang Happy Employee Inc" srcset="https://substackcdn.com/image/fetch/$s_!nHGv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 424w, https://substackcdn.com/image/fetch/$s_!nHGv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 848w, https://substackcdn.com/image/fetch/$s_!nHGv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 1272w, https://substackcdn.com/image/fetch/$s_!nHGv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F2ddb8fa4-15cd-42a4-b1b5-612f31723ec8_1762x916.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Container: Tumorang Happy Employee Inc</figcaption></figure></div><p>Dapat dilihat, semua container yang ada pada sistem absensi. Disini sudah dapat kelihatan bentuk wujud dari struktur organisasi dari perusahaan tersebut. Seperti Mobile dan User dashboard terknoneksi langsung ke Auth Platform. Lalu terdapat juga koneksi ke 3rd Party melalui Notification platform. </p><h5>Level 3: Component</h5><p>Lalu kemudian, kita bisa zoom lagi setiap Container. Contoh kita zoom-in lagi si Notification platform.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yFHx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yFHx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 424w, https://substackcdn.com/image/fetch/$s_!yFHx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 848w, https://substackcdn.com/image/fetch/$s_!yFHx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 1272w, https://substackcdn.com/image/fetch/$s_!yFHx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yFHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png" width="1138" height="920" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/bb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:920,&quot;width&quot;:1138,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:309629,&quot;alt&quot;:&quot;Component: Tumorang Happy Employee Inc.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Component: Tumorang Happy Employee Inc." title="Component: Tumorang Happy Employee Inc." srcset="https://substackcdn.com/image/fetch/$s_!yFHx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 424w, https://substackcdn.com/image/fetch/$s_!yFHx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 848w, https://substackcdn.com/image/fetch/$s_!yFHx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 1272w, https://substackcdn.com/image/fetch/$s_!yFHx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fbb03ebda-471e-4396-8100-6baea43fbf90_1138x920.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Component: Tumorang Happy Employee Inc.</figcaption></figure></div><p>Disini kita akan menemukan beberapa komponen yang ada di Notification Platform, seperti HTTP Server, gRPC server, dan Queue consumers.</p><h5>Level 4: Code</h5><p>Yang terakhir adalah codingan, untuk level ini, kita hanya tinggal membuat link referensi ke Github repository. Jika menggunakan platform IcePanel, maka akan terlihat seperti ini.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!x1v_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x1v_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 424w, https://substackcdn.com/image/fetch/$s_!x1v_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 848w, https://substackcdn.com/image/fetch/$s_!x1v_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 1272w, https://substackcdn.com/image/fetch/$s_!x1v_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x1v_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png" width="1142" height="922" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:922,&quot;width&quot;:1142,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:306704,&quot;alt&quot;:&quot;Code: Tumorang Happy Employee Inc.&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Code: Tumorang Happy Employee Inc." title="Code: Tumorang Happy Employee Inc." srcset="https://substackcdn.com/image/fetch/$s_!x1v_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 424w, https://substackcdn.com/image/fetch/$s_!x1v_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 848w, https://substackcdn.com/image/fetch/$s_!x1v_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 1272w, https://substackcdn.com/image/fetch/$s_!x1v_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F93fa40fd-8693-4e44-b223-3971b27aa254_1142x922.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Code: Tumorang Happy Employee Inc.</figcaption></figure></div><p>Disini kita sudah memetakan keseluruhan sistem dengan C4 model dengan bantuan IcePanel tentunya. Berikut <a href="https://s.icepanel.io/Ad4JwUWI1pa0hi/yhMV">detail</a> diagramnya di Icepanel untuk lebih detail</p><h3>Kesimpulan</h3><p>Jika dibuat dalam diagram secara keseluruhan, maka berikutlah penjabaran C4 model. <em> </em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nIoI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nIoI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 424w, https://substackcdn.com/image/fetch/$s_!nIoI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 848w, https://substackcdn.com/image/fetch/$s_!nIoI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!nIoI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nIoI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png" width="1456" height="445" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f5081007-f919-4360-ad18-943582ffd83c_5199x1588.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:445,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:3084199,&quot;alt&quot;:&quot;C4 Model in one diagram&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="C4 Model in one diagram" title="C4 Model in one diagram" srcset="https://substackcdn.com/image/fetch/$s_!nIoI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 424w, https://substackcdn.com/image/fetch/$s_!nIoI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 848w, https://substackcdn.com/image/fetch/$s_!nIoI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 1272w, https://substackcdn.com/image/fetch/$s_!nIoI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff5081007-f919-4360-ad18-943582ffd83c_5199x1588.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">C4 Model in one diagram</figcaption></figure></div><p>*klik gambar untuk lebih detail</p><p>Jika kita kembali ke dongeng #1 di atas, C4 Model dapat membantu si Architect untuk melakukan zoom-in dan zoom-out secara praktis. Pada pagi hari ia melakukan meeting dengan tim A tentang high-level view dan aligment (C-Level 2). Siang harinya, ia bertemu dengan engineer X untuk membahas implementasi RFC (C-Level 3 &amp; 4). Sang Architect dapat dengan mudah memahami konteks dengan cepat hanya dengan memanfaatkan C4 Model yang dimilikinya. </p><p>Namun, untuk sampai ke tahap itu akan memerlukan waktu yang lama karena membutuhkan dedikasi semua Architect untuk memetakan keseluruhan sistem mereka ke dalam C4 Model. Apabila C4 Model sudah solid, maka siapa pun pasti akan sangat terbantu untuk memahami sistem secara keseluruhan.</p><p>Untuk toolsnya sendiri, saya tidak ada rekomendasi. Namun untuk blogpost ini, saya menggunakan IcePanel. Selain IcePanel, kamu juga dapat menggunakan tools diagram lainnya, seperti, Structurizr, C4-PlantUML, atau yang lebih hard-core dapat menggunakan Draw.io, Excalidraw, dsb.</p><p>Demikian tulisan ini saya simpulkan, semoga berguna bagi yang membutuhkan.</p><div><hr></div><p>Reference</p><ul><li><p>Link untuk <a href="https://excalidraw.com/#json=gS6FfZsQI1CpRw_mdqJwz,GYA1aQFbTUsdzr1xX-hEFw">Excalidraw</a>  untuk dapat melihat diagram saya diatas.</p></li><li><p>Link untuk <a href="https://s.icepanel.io/Ad4JwUWI1pa0hi/yhMV">IcePanel</a> untuk Miniworkshop diatas</p></li><li><p>https://c4model.com/</p></li></ul><div><hr></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Notes of SoftwareArchitect.ID! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[Diary #3 ADR (Architecture Decision Record) pada Software Architecture ]]></title><description><![CDATA[Membuat Architecture Decision Record untuk sebagai rekam jejak dari keputusan yang signifikan pada software arhictecture.]]></description><link>https://notes.softwarearchitect.id/p/diary-3-adr-architecture-decision</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/diary-3-adr-architecture-decision</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Mon, 11 Jul 2022 02:27:09 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey semua, kembali lagi dengan saya, Iman Tumorang di series diary saya sendiri di SoftwareArchitect.ID. </p><p>Buat teman yang baru melihat tulisan saya ini, sedikit konteks, dari awal tahun 2022, saya memulai suatu inisiatif sendiri untuk membuat tulisan ataupun diari saya pribadi terkait software architecture dan kehidupan saya sebagai (aspiring) software architect. </p><p>Kali ini di tulisan ini, saya ingin menulis sedikit tentang Arhictecture Decision Record (ADR) ketika membuat keputusan software architecture. ADR sudah pernah saya singgung di <a href="https://notes.softwarearchitect.id/p/diary2-struktur-dan-aspek-penting">diary#2</a> sebelumnya. Namun di <a href="https://notes.softwarearchitect.id/p/diary2-struktur-dan-aspek-penting">diary#2</a> saya hanya menjelaskan sekilas bentuk dari ADR seperti apa. Nah, di tulisan ini saya akan menjelaskan lebih detail bentuk dari ADR yang lumayan sering digunakan orang, atau setidaknya, yang saya gunakan dipekerjaan saya.</p><h2>Apa Itu Architecture Decision Record (ADR)?</h2><p>Sebelum masuk ke Architecture Decision Record, kita perlu tahu apa itu Architectural Decision?</p><p>Pada Wikipedia, kita dapat menemukan bahwa <a href="https://en.wikipedia.org/wiki/Architectural_decision">Architectural Decision</a> adalah, </p><blockquote><pre><code>are design decisions that address architecturally significant requirements; they are perceived as hard to make and/or costly to change.</code></pre></blockquote><p>Merupakan keputusan terhadap requirement arsitektur yang signifikan atau yang bersifat susah untuk dibuat ataupun diubah. Dimana jika dilakukan pengubahan akan berdampak pada cost pengembangan sistem.</p><p>Pada tulisannya di <a href="https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions">Documenting Architecture Decisions</a>, Michael Nygard menyatakan bahwa mereka menyimpan koleksi records arsitektur yang signifikan yang dapat mempengaruhi struktur, non-fungsional, karakteristik, dependencies, interfaces dan teknik yang digunakan pada pengembangan sistem.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!2ieF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!2ieF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 424w, https://substackcdn.com/image/fetch/$s_!2ieF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 848w, https://substackcdn.com/image/fetch/$s_!2ieF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 1272w, https://substackcdn.com/image/fetch/$s_!2ieF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!2ieF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png" width="1456" height="502" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:212704,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!2ieF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 424w, https://substackcdn.com/image/fetch/$s_!2ieF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 848w, https://substackcdn.com/image/fetch/$s_!2ieF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 1272w, https://substackcdn.com/image/fetch/$s_!2ieF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff33873a7-c6e1-4f0f-83f0-ad1c34c43a83_1538x530.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Dari kedua penjelasan tersebut dapat kita artikan, bahwa pentingnya untuk meyimpan keputusan-keputusan yang pernah dilakukan ketika membangun sistem, khususnya semua keputusan yang signifikan secara arsitektur.</p><p>Mungkin sebagai contoh, saya bisa sebutkan. </p><blockquote><p>Suatu hari diperusahaan Tumorang Finance yang merupakan perusahaan Digital Insurance terkini. Tumorang Finance hendak melakukan expansi ke Indonesia, sehingga hal yang utama dalam expansi ini adalah integrasi dengan pembayaran versi lokal yang ada di Indonesia. Singkat cerita, Tumorang Finance akan integrasi dengan sebuah Payment Gateway, sebut saja Xendit. </p><p>Lalu sistem pun didesign sedemikian rupa, hingga disuatu titik, John Snow selaku Software Architect di Tumorang Finance berdebat dengan tim engineer terkait pemilihan teknologi yang akan digunakan. Tim Engineer ingin menggunakan RabbitMQ, lalu John Snow selaku software architect memilih untuk menggunakan SQS sebagai message queueing platform yang akan di gunakan ketika melakukan payment request ke Xendit (Payment Gateway). </p><p>Debat panjang pun dilakukan, hingga pada suatu titik, mereka pun menemukan titik terang dan setuju akan menggunakan RabbitMQ.</p></blockquote><p>Dari contoh diatas, keputusan memilih RabbitMQ dan SQS akan berpengaruh pada struktur dan dependencies sistem yang akan dibangun. Jika menggunakan SQS, maka secara otomatis mereka pun harus menggunakan AWS Cloud provider. Jika menggunakan RabbitMQ maka mereka bisa saja menggunakan self-hosted, ataupun memakai vendor lainnya. </p><p>Nah keputusan yang mereka pilih ini akan disimpan dalam record bisa berbentuk Google docs, Atlasian Confluence, Markdown di Github, dsb. Nah record inilah disebut dengan Architecture Decision Record.</p><p>Sehingga dengan perkembangan tim dan perusahaan, orang-orang didalam pasti datang dan pergi. Orang lama mungkin akan resign, orang baru akan join. Sehingga jika suatu saat dikemudian hari orang-orang baru yang join dapat mengerti kenapa keputusan dilakukan. Mengapa tim terdahulu memilih RabbitMQ daripada SQS?</p><h3>Komponen ADR</h3><p>Untuk menulis ADR sendiri sudah banyak contoh di Internet. Ada beberapa resource yang mungkin berguna untuk kita ikutin. Namun disini saya akan coba jelaskan kembali dengan bahasa saya sendiri.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iNDd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iNDd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 424w, https://substackcdn.com/image/fetch/$s_!iNDd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 848w, https://substackcdn.com/image/fetch/$s_!iNDd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 1272w, https://substackcdn.com/image/fetch/$s_!iNDd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iNDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png" width="1456" height="990" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:990,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:155307,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!iNDd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 424w, https://substackcdn.com/image/fetch/$s_!iNDd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 848w, https://substackcdn.com/image/fetch/$s_!iNDd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 1272w, https://substackcdn.com/image/fetch/$s_!iNDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0632865b-7f34-438a-a07a-66da0f29b8c0_1526x1038.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">ADR components</figcaption></figure></div><p>Jika kita lihat gambar diatas, terdapat beberapa komponen penting pada ADR. Jika pun banyak versi ADR yang ada di internet, namun ke 5 komponen tersebut adalah komponen paling penting ketika membuat ADR.</p><h4><strong>1. Title</strong></h4><p>Komponen pertama yang sangat penting adalah Title. Ini akan menjadi identifier dari ADR yang akan kita buat. Formatnya bebas, namun yang wajib kita ketahui, harus memiliki nomor, lalu diikuti dengan judul utama dari ADR tersebut.</p><p>Contoh:</p><blockquote><p>ADR 1: Using RabbitMQ over SQS</p><p>atau</p><p>1. Using RabbitMQ over SQS</p></blockquote><p>Nomor ini berguna untuk urutan dan referensi nantinya yang akan saya jelaskan nanti di akhir tulisan ini.</p><h4>2. Status</h4><p>Komponen ini menyatakan status ADR yang telah ditulis. Biasanya tahapannya dimulai dari <strong>&#8220;proposed&#8221; </strong>ketika ADR tersebut masih menunggu approval dari semua stakeholders yang terlibat. Lalu diubah menjadi <strong>&#8220;accepted&#8221; </strong>ketika semua stakeholders setuju. Dan jika dikemudian hari seiring dengan perkembangan bisnis, keputusan tersebut tidak relevan lagi, maka statusnya akan diubah menjadi <strong>&#8220;deprecated&#8221; </strong>atau &#8220;<strong>superseded by</strong> <em>&lt;new ADR number&gt;</em>&#8221; jika terdapat ADR baru yang menjadi pengganti ADR yang sudah usang tersebut. </p><h4>3. Context</h4><p>Komponen ini menjelaskan latar belakang dari mengapa ADR tersebut hadir. Biasanya pada komponen ini sifatnya netral dan hanya menjelaskan fakta yang ada terkait sebuah masalah. Bisa juga pada komponen ini, kita memberikan opsi pilihan yang ada, (contoh: opsi 1: menggunakan Golang, opsi 2: menggunakan JavaScript).</p><h4>4. Decision</h4><p>Komponen ini menjelaskan keputusan yang telah disepakati oleh semua stakeholders yang terlibat. Disini akan dijelaskan semua alasan mengapa keputusan tersebut diambil. Yang akan menjawab semua pertanyaan <strong>&#8220;Why &#8230;.&#8221; </strong>pada design arsitektur yang telah dibuat.</p><p>Dan ketika menulis decission harus ditulis dengan kalimat aktif, <strong>&#8220;We will &#8230;&#8221; </strong>menyatakan bahwa secara konsensus semua stakeholders <strong>akan</strong> memilih decision yang ada pada ADR tersebut. Bukan &#8220;I will &#8230;&#8221; atau &#8220;The CTO will &#8230;&#8221; karna ini bersifat individual decission bukan keputusan secara bersama yang disepakati.</p><h4>5. Consequences</h4><p>Komponen ini akan menjelaskan semua effect negative atau drawback/tradeoffs dari keputusan yang diambil. Sehingga semua stakholders sadar bahwa keputusan yang telah disepakati ternyata memiliki tradeoffs yang harus disiasati. </p><h3>Menulis ADR</h3><p>Pada bagian diatas saya sudah menjelaskan sedikit tentang ADR dan komponen-komponen yang terdapat pada ADR.</p><p>Untuk latihan, saya akan coba buat contoh penulisan ADR.</p><p>Studi kasusnya dapat kita gunakan contoh kasus yang ada diatas yang ada pada Tumorang Finance.</p><p>Nah dari studi kasus tersebut, maka jika saya buatkan ADRnya, kira-kira akan berbentuk seperti ini.</p><blockquote><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GXKY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GXKY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 424w, https://substackcdn.com/image/fetch/$s_!GXKY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 848w, https://substackcdn.com/image/fetch/$s_!GXKY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 1272w, https://substackcdn.com/image/fetch/$s_!GXKY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GXKY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png" width="1238" height="1398" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1398,&quot;width&quot;:1238,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:278235,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GXKY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 424w, https://substackcdn.com/image/fetch/$s_!GXKY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 848w, https://substackcdn.com/image/fetch/$s_!GXKY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 1272w, https://substackcdn.com/image/fetch/$s_!GXKY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F95942688-ea5e-49c1-817c-db44335a9799_1238x1398.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><p><strong>Notes: hanya contoh ya!</strong></p><p>Lalu kemudian, Tumorang Finance pun berhasil ekspansi ke Indonesia. Banyak client mendaftar dan menjadi aktif member dari digital insurance yang ditawarkan Tumorang Finance. </p><p>Lalu, 2 tahun berlalu, ternyata tim infra pun mulai kewalahan memantain RabbitMQ yang mereka host sendiri. Sehingga mulai muncul percikan-percikan issue karena RabbitMQ down yang kini menjadi bottleneck perusahaan untuk growing lebih aggresive.</p><p>John Snow, selaku architect di Tumorang Finance, melihat ini sebagai momen untuk mencoba solve masalah ini. Singkat cerita, setelah diskusi dan meeting dengan semua stakeholders yang terlibat, disimpulkan terdapat 2 pilihan. </p><ul><li><p>Use managed RabbitMQ vendors (eg. CloudAmqp.com)</p></li><li><p>Migrate to Google Pubsub </p></li></ul><p>Maka John Snow pun membuat ADR baru dengan status &#8220;<strong>proposed&#8221; </strong>berikut.</p><blockquote><p>Proposed: </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Rnub!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Rnub!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 424w, https://substackcdn.com/image/fetch/$s_!Rnub!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 848w, https://substackcdn.com/image/fetch/$s_!Rnub!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!Rnub!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Rnub!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png" width="760" height="1278" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1278,&quot;width&quot;:760,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:228880,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Rnub!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 424w, https://substackcdn.com/image/fetch/$s_!Rnub!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 848w, https://substackcdn.com/image/fetch/$s_!Rnub!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 1272w, https://substackcdn.com/image/fetch/$s_!Rnub!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff2863c7a-0f31-4276-a7a5-35259be2c273_760x1278.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><p>Nah selanjutnya ADR tersebut pun akan didiskusikan ke semua stakeholders yang terlibat, CTO, Engineers, Infrastructure, dsb.</p><p>Nah semisal singkat cerita ADR tersebut disetujui oleh semua pihak, maka status ADR tersebut akan berubah menjadi <strong>&#8220;accepted&#8221;</strong>, sementara ADR yang lama, yang sebelumnya untuk memilih RabbitMQ akan menjadi status <strong>&#8220;superseded&#8221;.</strong></p><blockquote><p>Accepted and Superseded</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SVmG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SVmG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 424w, https://substackcdn.com/image/fetch/$s_!SVmG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 848w, https://substackcdn.com/image/fetch/$s_!SVmG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 1272w, https://substackcdn.com/image/fetch/$s_!SVmG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SVmG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png" width="1456" height="1000" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/b3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1000,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1014700,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!SVmG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 424w, https://substackcdn.com/image/fetch/$s_!SVmG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 848w, https://substackcdn.com/image/fetch/$s_!SVmG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 1272w, https://substackcdn.com/image/fetch/$s_!SVmG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fb3a69638-51f2-4c2f-ab09-cc4aab5253d8_2412x1657.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div></blockquote><p>Nah setelah ini selanjutnya adalah melanjutkan proses design dan development yang akan mengikuti ADR yang telah disepakati.</p><h2>Conclusion</h2><p>Dari tulisan ini saya menjelaskan sedikit gambaran tentang ADR, dimana terdapat 5 komponen penting yaitu, Title, Status, Context, Decision, dan Consequences. Ke 5 komponen ini wajib ada ketika pembuatan ADR. </p><p>Kita juga bisa lebih kreatif menambah komponen lainnya seperti date, atau tagging (hastag) untuk memudahkan pencarian/filter ADR. Karena ADR ini haruslah mudah untuk diakses, baik secara searching maupun secara kategorisasi dan <em>tagging</em>. </p><p>Platform yang dapat digunakan ada banyak beragam, dapat menggunakan Google Docs, Atlassian Confluence, Notion, atau bahkan Markdown di Git (Github/Gitlab/Bitbucket). </p><h4>More Reading</h4><p>Untuk bacaan lebih banyak tentang ADR, kamu bisa meluncur ke link berikut yang sudah saya list sebagai referensi dan bacaan lebih detail tentang ADR.</p><ul><li><p>https://adr.github.io/</p></li></ul><ul><li><p>https://cognitect.com/blog/2011/11/15/documenting-architecture-decisions</p></li><li><p>https://docs.aws.amazon.com/prescriptive-guidance/latest/architectural-decision-records/adr-process.html</p></li><li><p>https://kevinjalbert.com/start-now-architecture-decision-records/ </p></li><li><p>Mark Richards <a href="https://www.youtube.com/watch?v=LMBqGPLvonU">Youtube Video</a> </p></li></ul><p>Demikian Diary #3 dari SoftwareArchitecture.ID, semoga berguna kepada yang membutuhkan.</p><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://softwarearchitect.id" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!KXZS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!KXZS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!KXZS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!KXZS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!KXZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png" width="1100" height="220" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:220,&quot;width&quot;:1100,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:11719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:&quot;https://softwarearchitect.id&quot;,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!KXZS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!KXZS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!KXZS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!KXZS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8b0823c8-516b-4d42-b695-528b03f06bfa_1100x220.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Diary#2: Struktur dan Aspek Penting dalam Software Architecture]]></title><description><![CDATA[Step-step yang penting ketika membuat design software architecture]]></description><link>https://notes.softwarearchitect.id/p/diary2-struktur-dan-aspek-penting</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/diary2-struktur-dan-aspek-penting</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Mon, 13 Jun 2022 02:25:12 GMT</pubDate><enclosure url="https://cdn.substack.com/image/fetch/h_600,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey semua! Saya Iman Tumorang, kembali menulis disini sebagai diary saya sebagai (Aspiring) Software Architect. </p><p>Sebulan yang lalu di <a href="https://notes.softwarearchitect.id/p/diary-1-a-glimpse-of-how-to-striving">Diary#1</a>, saya baru publish tentang ekspektasi yang diharapkan dari seorang software architect. Selanjutnya saya akan tulis tentang hal-hal penting yang harus seorang Software Architect ketahui ketika mendesign system architecture dari aplikasi yang dia kerjakan di tulisan ini. </p><p>Tulisan ini sudah lama saya draft, namun saya baru ada waktu untuk menulis ulang saat ini. Namun demikian, seharusnya konteksnya masih sama.</p><div><hr></div><p>Suatu hari, sebut saja Iman Tumorang, lagi mengikuti pertemuan forum para Software Architect, sebut saja di salah satu komunitas di Indonesia. Dimana di forum tersebut, para Software Architects lainnya saling berdiskusi dan bertukar pandangan terkait software architecture mereka. </p><p>Lalu, salah seorang peserta pun bertanya kepada Iman,</p><p>&#8220;Hey Iman, boleh ceritakan sedikit tentang software architecture yang kalian gunakan?&#8221;</p><p>&#8220;Yeah, tentu saja. Kami menggunakan Microservice&#8221; jawab Iman.</p><p>&#8220;lalu..?&#8221; balas si penanya lagi.</p><p>&#8220;Lalu? Ya begitu, kami menggunakan microservice, terdapat beberapa services, API gateway, databases dsb&#8221; balas Iman mulai kebingungan. Karena normalnya ketika orang ditanya tentang software architecture, biasanya jawabannya pasti seputaran, Monolith, Microservice, Event Driven Architecure dan sebagainya. Tetapi si penanya malah bertanya lebih lagi, hal ini membuat Iman mulai kebingungan.</p><p>Ternyata banyak aspek yang perlu diketahui ketika berbicara tentang software architecture. Hal tersebut akan saya bahas selanjutnya dibawah. Ini juga hal yang baru saya pahami. Sehingga blog post ini juga saya gunakan sebagai catatan pribadi untuk referensi dimasa depan.</p><h1>Aspek Struktur Penting dalam Software Architecture</h1><p>Suatu hal yang baru saya pelajarin adalah ternyata software Architecture itu terdiri dari 4 dimensi dan ketika membuat software architecture design, maka kita harus membuat ke 4 aspek dimensi struktur software architecture tersebut, yakni</p><ul><li><p>Menentukan <strong>Karakteristik </strong>dari architecture kita</p></li><li><p>Menentukan <strong>Komponen-komponen </strong>yang saling berinteraksi di architecture kita</p></li><li><p>Memilih <strong>Styles </strong> dari architecture yang akan kita gunakan.</p></li><li><p>Dan membuat <strong>Architecture Decision</strong> yang akan menjadi bahan acuan saat pengembangan sistem.</p></li></ul><p>Ke 4 dimensi tersebut haruslah sangat penting di definisikan saat membicarakan tentang software architecture. Saya akan coba jelaskan dengan bahasa saya sendiri, agar mungkin lebih mudah di pahami.</p><h2>1. Menentukan Karakteristik Software Architecture</h2><p>Hal yang penting saat mendefinisikan architecture design kita adalah menentukan karakteristik software architecture yang kita inginkan baik eksplisit atau secara implisit.</p><p>Yang dimaksud dengan karakteristik disini adalah kualitas yang ingin dicapai dari software architecture yang kita design. Untuk kualitas itu sendiri tidak terbatas, namun demikian, sudah ada <a href="https://iso25000.com/index.php/en/iso-25000-standards/iso-25010">standard ISO</a> yang bisa kita gunakan sebagai acuan dari karakteristik system kita contohnya dapat dilihat pada gambar dibawah.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TSQf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TSQf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 424w, https://substackcdn.com/image/fetch/$s_!TSQf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 848w, https://substackcdn.com/image/fetch/$s_!TSQf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 1272w, https://substackcdn.com/image/fetch/$s_!TSQf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TSQf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png" width="1456" height="412" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:412,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Quality Characterisctics of ISO 25010&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Quality Characterisctics of ISO 25010" title="Quality Characterisctics of ISO 25010" srcset="https://substackcdn.com/image/fetch/$s_!TSQf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 424w, https://substackcdn.com/image/fetch/$s_!TSQf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 848w, https://substackcdn.com/image/fetch/$s_!TSQf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 1272w, https://substackcdn.com/image/fetch/$s_!TSQf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff7a7d5f9-4e3d-4078-8cd1-13976f066511_1521x430.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">software product quality by ISO25000.com</figcaption></figure></div><p>Atau untuk lebih banyak opsi, berikut beberapa contoh dari <a href="https://en.wikipedia.org/wiki/List_of_system_quality_attributes">wikipedia</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H1iu!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H1iu!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 424w, https://substackcdn.com/image/fetch/$s_!H1iu!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 848w, https://substackcdn.com/image/fetch/$s_!H1iu!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 1272w, https://substackcdn.com/image/fetch/$s_!H1iu!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H1iu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png" width="1456" height="643" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:643,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:399195,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H1iu!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 424w, https://substackcdn.com/image/fetch/$s_!H1iu!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 848w, https://substackcdn.com/image/fetch/$s_!H1iu!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 1272w, https://substackcdn.com/image/fetch/$s_!H1iu!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2760ed-d3cc-4a80-afd0-ebff5d9fc277_2388x1054.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">system quality attributes</figcaption></figure></div><p>Nah, ketika membuat design architecture, maka kita harus menentukan ke <code>-ibility-</code>an dari system yang akan kita bangun. Karakteristik yang paling umum biasanya antara lain, <strong>reliability, scalability, availability, security, performance, elasticity</strong> dsb.</p><p>Karakteristik ini akan berguna untuk menjadi acuan keputusan yang akan kita lakukan terhadap system kita. Misal, karakteristik yang saya pilih adalah scalability, maka ketika men-design software architecture, <strong>scalability</strong> harus menjadi hal pertama yang saya pertimbangkan, misal ketika memilih REST vs Event-based protocol, maka saya harus kedepankan opsi yang lebih scalable, lalu saya pun memilih Event-based protocol (misalnya). Atau jika karakteristik yang saya pilih <strong>feasibility</strong>, mungkin karena projectnya harus selesai dalam 2 bulan, maka hanya butuh MVP dan tidak perlu terlalu canggih, maka saya akan memilih REST.</p><p>Semua karakteristik bisa saja berkorelasi, atau pun bertentangan. Apapun itu akan mempengaruhi keputusan kita ketika membuat design architecture dari sistem yang akan kita bangun.</p><h2><strong>2. Menentukan Komponen Software Architecture</strong></h2><p>Setelah menentukan Karakteristik software architecture yang akan di design, selanjutnya adalah kita pun dapat mulai menentukan komponen-komponen system yang akan kita kembangkan. </p><p>Komponen-komponen ini nantinya menggambarkan hal hal penting yang ada di keseluruhan sistem yang akan dikembangkan. Saat menentukan komponen-komponen system kita, kita tidak harus terpaut pada style seperti Monolith, atau Microservice, Event Driven dsb. Hanya benar benar murni komponen, seperti layangnya <em>building block</em> yang nantinya dapat kita bongkar pasang membentuk satu kesatuan sistem yang utuh.</p><p>Untuk sebuah contoh, saya akan berikan satu simulasi kecil. Sebut saja sebuah perusahaan Tumorang Finance, bergerak dibidang digital insurance, sistemnya sudah berjalan. Namun mereka ada kegundahan, mereka hendak memberikan pelayanan lebih baik ke user mereka untuk membuatkan sistem notifikasi ke user mereka. Notifikasi ini nanti akan dipergunakan untuk berbagai macam usecase, misal untuk reminder pembayaran premi asuransi, notifikasi pembayaran yang sudah berhasil, dan notifikasi OTP untuk login. Dan sistem notifikasi yang diharapkan dapat menyimpan status notifikasi yang dikirim, apakah sudah dikirim, gagal terkirim atau mungkin delay.</p><p>Dari studi kasus diatas, kita dapat ekstrak komponen yang mungkin ada di sistem yang ingin mereka harapkan.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!hbPv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!hbPv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 424w, https://substackcdn.com/image/fetch/$s_!hbPv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 848w, https://substackcdn.com/image/fetch/$s_!hbPv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 1272w, https://substackcdn.com/image/fetch/$s_!hbPv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!hbPv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png" width="1456" height="649" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:649,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:183033,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!hbPv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 424w, https://substackcdn.com/image/fetch/$s_!hbPv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 848w, https://substackcdn.com/image/fetch/$s_!hbPv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 1272w, https://substackcdn.com/image/fetch/$s_!hbPv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1418ab97-a685-4332-9f87-23381d4e9525_2995x1335.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nah dari komponen-komponen tersebut, kita pun dapat melihat dengan jelas apa saja yang harus kita lakukan. Jika ternyata kita memilih untuk monolith, maka setiap komponen tersebut bisa kita buat jadi per module. Atau jika kita memilih membangun distributed system, maka setiap komponen <em>bisa saja </em>menjadi service tersendiri.</p><h2>3. Memilih Styles Software Architecture</h2><p>Kemudian, setelah kita menentukan karakteristik, lalu komponen komponen dari software architecture kita, langkah selanjutnya adalah menentukan <strong>Styles </strong>dari software architecture kita.</p><p>Terdapat banyak styles dari software architecture yang dapat kita gunakan. Semua styles tersebut bukan lah binary option, melainkan multiple options. Sehingga kita dapat memilih gabungan beberapa styles untuk software architecture pada system kita.</p><p>Untuk klasifikasinya, terdiri dari 2 jenis klasifikasi, dimana kedua klasifikasi ini juga terbagi ke beberapa jenis lagi, sebagai berikut.</p><ol><li><p><strong>Monolithic</strong> </p><ul><li><p>Layered Architecture</p></li><li><p>Modular Monolith</p></li><li><p>Microkernel Architecture</p></li><li><p>Pipeline Architecture</p></li></ul></li><li><p><strong>Distributed</strong></p><ul><li><p>Microservice Architecture</p></li><li><p>Service-Based Architecture</p></li><li><p>Event-Driven Architecture</p></li><li><p>Space-Based Architecture</p></li></ul></li></ol><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>*ps: semua klasifikasi dan jenis arsitektur diatas akan saya jelaskan dilain waktu. Stay tuned!</em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Ketika pertama kali ditanya tentang styles software architecture, saya sangatlah kebingungan. Hingga saat Mark Richards (author <a href="https://www.amazon.com/gp/product/1492043451">Fundamentals of Software Architecture</a>) menyebutkan jenis-jenis styles software architeture seperti, Microservice, Monolith, Service Based, Event Driven Architecture dsb *yang saya sebutkan diatas.</p><p>Awalnya saya menyebut hal tersebut adalah software architecture pattern, namun surprisingly, Mark Richards, menjelaskan hal-hal yang tergolong pada pattern pada software architecture antara lain, Circuit Breaker Pattern, Event Forwarded Pattern, Command and Query Responsibility Segregation (CQRS) pattern, Backend For Frontend (BFF) Pattern dsb.</p><p>Kembali ke aspek software architecture,  setelah kita membuat list komponen yang terdapat pada sistem kita (step sebelumnya), kita pun harus menentukan style software architecture yang ingin kita terapkan.  Ketika menentukan styles, kita bisa mengombinasikan banyak styles sesuai keinginan. Contoh, karena systemnya hanya kecil misal hanya CMS saja, maka Layered Architecture style sudah cukup untuk digunakan. Atau sistemnya sangat kompleks, terdapat banyak domain yang tidak mungkin dijadikan dalam satu aplikasi monolith, maka kita dapat memilih Microservice architecture lalu dengan kombinasi Event Driven architecture. Tidak ada keharusan hanya boleh memilih satu, kita bisa kombinasikan per-setiap klasifikasinya (monolith ataupun distributed).</p><h2>4. Membuat Architecture Decision</h2><p>Tahap terakhir dari aspek software architecture adalah membuat architecture decision yang menjadi bahan acuan untuk semua tim terlibat ketika mengembangkan sistem.</p><p>Decision bisa dilakukan secara konsensus (suara terbanyak), atau pun dilakukan secara individual (Software Architect). Namun untuk setiap keputusan itu, haruslah disimpan dalam bentuk dokumen yang dapat dibaca oleh semua orang.</p><p>Beberapa komponen penting yang perlu diperhatikan dalam membuat architecture decision antara lain:</p><p><strong>1. Diagram yang jelas dan granular, tidak ada singkatan-singkatan yang tidak jelas.</strong></p><p>Sebagai contoh, coba kamu bandingkan ke 2 diagram dibawah.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!GpHo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GpHo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 424w, https://substackcdn.com/image/fetch/$s_!GpHo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 848w, https://substackcdn.com/image/fetch/$s_!GpHo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 1272w, https://substackcdn.com/image/fetch/$s_!GpHo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GpHo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png" width="1456" height="288" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:288,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:209247,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GpHo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 424w, https://substackcdn.com/image/fetch/$s_!GpHo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 848w, https://substackcdn.com/image/fetch/$s_!GpHo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 1272w, https://substackcdn.com/image/fetch/$s_!GpHo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F66b7f58d-fe68-4389-b06c-5e7dd11cf794_4496x889.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Diagram manakah yang lebih mudah untuk dipahami? Tentu saja, orang normal akan memilih diagram ke 2. Sehingga siapapun yang akan membaca ini, akan memahami sistem yang akan di kembangkan.</p><p>Untuk menggambarkan diagram architecture tidak ada keharusan styles dan teknik yang khusus. Kita dapat menggambarkan dengan gaya/bahasa kita, selama itu jelas dan mudah dimengerti. Namun, terdapat juga beberapa model yang banyak digunakan orang (para experts) lainnya, yaitu:</p><ul><li><p><strong><a href="https://c4model.com/">C4 Model</a> (by Simon Brown)</strong> </p></li><li><p><strong><a href="https://www.archimatetool.com/">ArchiMate</a> (by The Open Group)</strong></p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption"><em>Penjelasan tentang model diagram 2 diatas akan saya jelaskan nanti dilain postingan. Stay Tuned!</em></p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>Kita dapat mengikuti ke 2 model tersebut. Keduanya sama-sama akan membantu menjelaskan tentang system design dari architecture kita secara terstruktur.</p><p><strong>2. Menghindari Anti-Pattern saat membuat Architecture Decision</strong></p><p>Saat membuat Architecture Decision, maka akan terdapat banyak diskusi dan meeting untuk mencapai keputusan yang ideal terhadap architecture yang kita pilih. Semua orang akan terlibat, kapan saja waktu yang kosong, dimana saja, pasti orang akan berfokus pada decision tersebut. Berikut anti-pattern yang harus dihindari ketika membuat keputusan.</p><ul><li><p><strong>Groundhog day anti-pattern</strong> </p><p>Ini terjadi ketika tidak ada yang mengerti mengapa suatu decision dibuat, sehingga para stakeholders dan software architects tetap meeting membahas hal yang sama secara berulang ulang. Misal, suatu flow sudah ditentukan bahwa sistem akan menggunakan Event Driven. Lalu 2 minggu kemudian, engineer pun bertanya lagi, &#8220;kenapa Event Driven, kenapa tidak REST api call saja secara sync?&#8221; Dan kembali pun mereka meeting diskusi membahas hal yang sama seperti sebelumnya.</p></li><li><p><strong>Slack (Email, or any communication platform) Driven Architecture</strong></p><p>Ini terjadi misal ketika development sudah berjalan, tim engineer bertanya tentang misal, &#8220;Should we use RabbitMQ over SQS? Because of this reasons&#8230;. and this tradeoffs &#8230;&#8221; kepada Software Architect melalui chat di Slack. Diskusi ini terjadi secara improptu melalui aplikasi chating/communication platform lainnya.<br><br>Apapun hasil dari diskusi mereka di Slack chat tersebut pasti akan ter-telan dengan banyaknya chat dikemudian hari. Sehingga, jika suatu saat engineer baru join dan melihat project tersebut dan bertanya ke tim, &#8220;Why we use RabbitMQ over SQS?&#8221; maka tim tersebut akan kewalahan. Karena keputusan itu dilakukan lewat chat, tanpa meeting dan tidak ada record menyatakan alasan kenapa keputusan itu dilakukan.</p></li></ul><p>Kedua anti-pattern ini biasanya akan membuat pengembangan sistem terbengkalai dan mungkin dapat berimpact membuat timeline pengerjaan project ke-delay menjadi lebih lama.</p><p><strong>3. Membuat Architecture Decision Record (ADR)</strong></p><p>Untuk menghindari anti-pattern tersebut diatas, maka seorang Software Architect, harus membuat Architecture Decission Record. Yang akan menjelaskan the &#8220;<strong>WHY?&#8221; </strong>pada setiap keputusan yang telah disepakati<strong>. <br>&#8220;</strong>Kenapa keputusan itu dilakukan?&#8221;. <br>&#8220;Kenapa pakai RabbitMQ dan tidak SQS?&#8221; <br>&#8220;Kenapa MongoDB, kenapa tidak PostgreSQL?&#8221;<br>Dan banyak lagi pertanyaan yang akan muncul dikemudian hari.</p><p></p><p>Segala alasan dan jawab pertanyaan itu haruslah disimpan dalam record. Record yang menjelaskan mengapa sebuah keputusan diambil. Dan semua record ini haruslah mudah untuk diakses oleh semua orang yang berekemptingan, dalam hal ini para engineers. Sehingga jika dilain waktu, terdapat engineer yang baru bergabung dengan tim tersebut, mereka dapat membaca semua records decission yang sudah dilakukan tim tersebut. </p><p>Berikut contoh template ADR yang lumayan sering digunakan.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!lQLP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!lQLP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 424w, https://substackcdn.com/image/fetch/$s_!lQLP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 848w, https://substackcdn.com/image/fetch/$s_!lQLP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 1272w, https://substackcdn.com/image/fetch/$s_!lQLP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!lQLP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png" width="1456" height="678" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:678,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:842944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!lQLP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 424w, https://substackcdn.com/image/fetch/$s_!lQLP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 848w, https://substackcdn.com/image/fetch/$s_!lQLP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 1272w, https://substackcdn.com/image/fetch/$s_!lQLP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F43565abc-87d4-44cf-b5a9-0b7ee192889e_2930x1365.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Terdapat </p><ul><li><p><strong>Title:</strong> Judul decision</p></li><li><p><strong>Status:</strong> status decision di repository decision records (biasanya proposed, accepted, superseds, superseded) dsb.</p></li><li><p><strong>Context:</strong> menjelaskan kenapa decission ini ada? latar belakang dari decision ini muncul.</p></li><li><p><strong>Decision:</strong> menjelaskan &#8220;decision&#8221; yang diambil dan disetujui oleh semua stakeholers. Disini juga harus menjelaskan kenapa keputusan itu dipilih. Point ini sangat penting, karena ini akan menjadi landasan para stakeholders, dan new hire untuk mengerti mengapa keputusan tersebut diambil.</p></li><li><p><strong>Consequences:</strong> menjelaskan tradeoff yang akan terjadi. Dampak negative yang akan terjadi jika keputusan ini dilakukan. Ini penting agar pembaca <em>aware </em> tentang konsekuensi yang akan terjadi, sehingga mereka tahu untuk mengantisipasi apa yang tertera pada list konsekuensinya.</p></li></ul><p>Misal untuk contoh diatas, adalah ADR untuk memilih RabbitMQ dibanding SQS. Sehingga jika suatu saat dikemudian hari, engineer baru datang dan bertanya tentang alasan mengapa memilih RabbitMQ daripada SQS, kita tinggal memberikan record ini. </p><p>Dan perlu diketahui juga, apapun keputusan yang dilakukan pada ADR, tidak ada salah atau pun benar. Mungkin saat keputusan itu dibuat, semua setuju dan merupakan keputusan terbaik pada masanya. Lalu 2 tahun kemudian, seiring berkembangnya teknologi dan bisnis, keputusan tersebut tidak relevant lagi. Sehingga tim terlibat dapat melakukan architecture design review lagi, dan memuat ADR yang baru.</p><p>Nah selanjutnya adalah mengulang semua step ini setiap kali hendak membuat design software architecture dari sistem yang akan kita kembangkan.</p><h1>Conclusion</h1><p>Di artikel ini saya telah menjelaskan aspek penting yang perlu diperhatikan ketika membuat design software architecuture yakni, pertama kita harus <strong>menentukan</strong> <strong>karakteristik</strong> software architecture kita, lalu kemudian <strong>membuat list komponen</strong> dari keseluruhan sistem kita, dan selanjutnya <strong>memilih styles</strong> yang sesuai dengan kasus dan karakteristik yang kita pilih, dan terakhir <strong>membuat architecture decission</strong> yang menjadi acuan untuk setiap stakeholders dari architecture yang kita design.</p><p>Ke 4 aspek ini sangat lah penting, saya pun baru menyadarinya, karna selama ini saya ketika ditanya tentang software architecture yang saya gunakan, saya hanya jawab &#8220;microservice&#8221; saja. Saya tidak menjelaskan tentang karakteristiknya, lalu stylesnya ataupun the &#8220;<strong>WHY</strong>&#8221;nya yang tidak jelas dalam decision. Jawaban yang paling umum saya berikan adalah, &#8220;<em>Why? Enggak tahu, ini sudah seperti ini dari dulu sudah legacy, jadi kami tinggal ikutin dan improve</em>&#8221; Ini merupakan jawaban yang buruk ketika menjelaskan software architecure. Pasti ada alasan disetiap keputusan yang dibuat.</p><p>Dan saya juga berencana akan mulai mengasah ini dan menjadikannya kebiasaan ketika melakukan design review terhadap software architecture sistem yang akan saya kembangkan.</p><p>Demikian tulisan ini saya rangkumkan berdasarkan apa yang baru saya pelajarin dari Mark Richards (author <a href="https://www.amazon.com/gp/product/1492043451">Fundamentals of Software Architecture</a>). Semoga berguna kepada yang membaca khususnya teman teman software engineer yang ingin menempuh jalur software architect.</p>]]></content:encoded></item><item><title><![CDATA[Diary #1: A Glimpse of how to Striving to be A Full-Fledged Software Architect]]></title><description><![CDATA[Mengenal ekspektasi yang diharapkan dari Seorang Software Architect dan memenuhi ekspektasi tersebut untuk pertumbuhan pribadi, perusahaan dan ekosistem.]]></description><link>https://notes.softwarearchitect.id/p/diary-1-a-glimpse-of-how-to-striving</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/diary-1-a-glimpse-of-how-to-striving</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Mon, 09 May 2022 02:27:36 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!urqi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Hey semua! Saya Iman Tumorang, kembali menulis disini sebagai diary saya sebagai (Aspiring) Software Architect. </p><p>Beberapa bulan terakhir, saya sangat dipadatkan banyaknya pekerjaan dari tempat saya bekerja. Namun, meskipun demikian saya masih mencoba untuk menuangkan ide-ide kecil dan draft (meski pada akhirnya lebih banyak draft haha).</p><p>Saya mungkin sedikit sibuk, namun sebisa saya, saya akan publish coret-coretan, curhat, ide, dan hal-hal yang saya pelajari khususnya tentang software architecutre dan kehidupan software architect di website ini.</p><p>Untuk itu, jika kamu tidak ingin ketinggalan konten yang akan saya publish, kamu dapat subscribe langsung dengan mencantumkan email kamu. Sehingga setiap saya publish cerita baru, kamu akan langsung mendapat notifnya secara langsung di kotak email kamu.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Masukin Email kamu dan subscribe disini ^_^</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><div><hr></div><p>Beberapa hari terakhir, saya baru belajar sedikit tentang Software Architect. Karna hal tersebut, saya pun menulis ini bertujuan agar saya tidak lupa dengan apa yang telah saya pelajari + mungkin bisa berguna kepada orang lain juga.</p><p>Nah di catatan kali ini, saya akan membahas tentang ekspektasi yang diharapkan dari seorang Software Architect, atau setidaknya berdasarkan dari hal yang saya pelajari beberapa minggu belakangan ini.</p><p>Sebagai konteks, saya baru saja belajar tentang Software Architect, dari Mark Richards, merupakan penulis buku dari <strong><a href="https://www.amazon.com/gp/product/1492043451">Fundamentals of Software Architecture: An Engineering Approach</a></strong> dan <strong><a href="https://www.amazon.com/Software-Architecture-Tradeoff-Distributed-Architectures/dp/1492086894/">Software Architecture: The Hard Parts: Modern Trade-Off Analyses for Distributed Architectures</a> </strong></p><p>Beliau menyatakan, terdapat beberapa ekspektasi yang diharapkan dari seorang Software Architect, yang dimana setelah mendengarkan hal tersebut, saya pun semakin terbuka dan <s>terbebani</s> termotivasi dengan role yang saya emban saat ini.</p><p>Adapun ekspektasi yang diharapkan adalah sebagai berikut,</p><ul><li><p>Menentukan keputusan terkait Architecture dan Design Principles</p></li><li><p>Menganalisa dan meningkatkan ekosistem teknologi yang dipakai di perusahaan  secara berkelanjutan</p></li><li><p>Menganalisa tren teknologi yang terbaru yang ada dipasaran dan tetap update dengan tren tersebut.</p></li><li><p>Memastikan semua tim yang terlibat mengikuti rule/prinsip architecture yang telah disepakati</p></li><li><p>Memiliki pengetahuan dengan beragam jenis teknologi tidak terbatas pada platforms, programming language, dan sebagainya</p></li><li><p>Memiliki pengetahuan yang cukup dengan domain bisnis perusahaan</p></li><li><p>Memiliki skill interpersonal yang baik, termasuk pada kerja-sama, negoisasi, fasilitator dan sebagainya</p></li><li><p>Mengetahaui iklim politik yang ada dan harus mampu menjadi navigator iklim tersebut.</p></li></ul><p>Ya demikianlah list ekspektasi yang diharapkan dari seorang Software Architect menurut Mark Richards.  Saya akan coba jelaskan maksud dari hal tersebut secara detail dengan bahasa saya sendiri. Saya tidak akan menjelaskan semua, karna menurut saya beberapa point tersebut masih saling bersinggungan. </p><p>Dari beberapa point diatas, dapat saya simpulkan beberapa hal yang diharapkan dari seorang software architects, yang akan saya jelaskan berikut.</p><h2>1. Menjadi Pawang Architecture Decision dan Design Principles</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!urqi!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!urqi!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 424w, https://substackcdn.com/image/fetch/$s_!urqi!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 848w, https://substackcdn.com/image/fetch/$s_!urqi!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 1272w, https://substackcdn.com/image/fetch/$s_!urqi!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!urqi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!urqi!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 424w, https://substackcdn.com/image/fetch/$s_!urqi!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 848w, https://substackcdn.com/image/fetch/$s_!urqi!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 1272w, https://substackcdn.com/image/fetch/$s_!urqi!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F1d70a9b3-29fd-4c8b-9bfa-d7aa81ee7578_5044x2452.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">software architect thinking all the possible way</figcaption></figure></div><p>Berbicara tentang &#8220;pawang&#8221;, kita mungkin sudah cukup familiar. Beberapa minggu yang lalu, pawang hujan lumayan terkenal karena aksinya di sirkuit Mandalika, Lombok. Pawang dapat diartikan sebagai orang yang memiliki keahlian terhadap suatu bidang. Orang yang memiliki kontrol terhadap <em>flow</em> dibidang tersebut. Pawang hujan juga dapat diartikan sebagai orang yang mengontrol <em>flow-</em>nya hujan.</p><p>Demikian juga seorang Software Architect,  mereka diharapkan mampu menjadi pawang, driver, dan pemandu kepada semua orang terhadap kebutuhan arsitektur sistem yang ada.</p><p>Dimulai dari mendefinisikan solusi yang disepakati, desain arsitektur, <em>design principles</em>, dan rule-rule lainnya terkait dengan Software Architecture.</p><p>Maka untuk itu, seorang Software Architect diharapkan mampu membuat sebuah keputusan yang akan menjadi acuan atau dasar terhadap software developer dan stakeholders lainnya. Keputusan yang dibuat tentu saja tidak melulu dari si Software Architect sendiri, bisa saja dari tim secara konsensus. Namun, sebagai Software Architect, dia/mereka harus menjadi <em>driver</em> dan <em>rule enforcer</em> saat keputusan itu disepakati oleh setiap tim. Dalam artian menjadi pawangnya arsitektur dan <em>principle</em> di semua tim yang terlibat.</p><h2>2. Menganalisa dan Meningkatkan System di Perusahaan Secara Terus Menerus Mejadi Lebih Baik</h2><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!1Uci!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!1Uci!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 424w, https://substackcdn.com/image/fetch/$s_!1Uci!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 848w, https://substackcdn.com/image/fetch/$s_!1Uci!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 1272w, https://substackcdn.com/image/fetch/$s_!1Uci!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!1Uci!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png" width="1211" height="271" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:271,&quot;width&quot;:1211,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!1Uci!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 424w, https://substackcdn.com/image/fetch/$s_!1Uci!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 848w, https://substackcdn.com/image/fetch/$s_!1Uci!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 1272w, https://substackcdn.com/image/fetch/$s_!1Uci!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0baa2911-6b7f-465c-ad02-ec5e74dde98d_1211x271.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>Suatu hari, sebut saja si John Snow. Merupakan seorang Software Architect di perusahaan Tumorang Finance. Tumorang Finance merupakan perusahaan bonafit dan multinasional di bidang Digital Insurance. Saat ini Tumorang Finance, sedang gencar-gencarnya ekspansi ke multinasional dan sedang mencoba memasuki pasarnya Indonesia</p><p>Karena beberapa <em>constraint</em>, ekspansi ke tiap negara mungkin berbeda-beda secara sistem dan aplikasi, sehingga John Snow sebagai Software Architect di Tumorang Finance diharapkan membuat desain arsitektur untuk sistem Tumorang Finance di Indonesia.</p><p>Lalu singakat cerita, John Snow pun berhasil membuat semua <em>design principles</em> dan desain arsitektur untuk sistem Tumorang Finance yang baru di Indonesia. Lalu kemudian saat sistem tersebut dijalankan, sistem itu berjalan dengan baik. Atas kinerja John Snow, semua pihak senang, pihak executive senang karena bisnis Tumorang Finance berhasil berjalan dengan baik di Indonesia, tim product, sales, marketing, dan bahkan engineer juga senang , semua orang yang terlibat senang. </p><p>Lalu John Snow pun ditarik dari medan perang, dan di <em>assign</em> dengan projek baru lainnya di Tumorang Finance. Dan John Snow pun melupakan semua keputusan arsitektur dan desain serta <em>principles</em> yang pernah dia buat sebelumnya untuk sistem tersebut. </p><p>Ini bukanlah hal yang baik. Seharusnya seorang Software Architect, bertanggung jawab terhadap sistem yang dia buat. Bisnis mungkin bisa berubah (pivot) seiring waktu berjalan, atau <em>compliance</em> dan regulasi di Indonesia mungkin berubah. Sehingga arsitektur pun harus berubah mengikuti permintaan bisnis atau regulasi yang berjalan. Sehingga jika Software Architect langsung lepas tangan terhadap perubahan(pivot) tersebut, maka desain dan keputusan arsitektur serta <em>principles</em> yang pernah dia buat akan menjadi <em>blocker</em> dan <em>bottleneck</em> untuk perkembangan bisnis. </p><p>Dari sini, dapat disimpulkan, Software Architect harus terus menganalisa proses serta mengembangkan proses ataupun sistem pada perusahaan (product/bisnis unit) yang dia kerjakan. Tidak hanya proses, bahkan mungkin teknologi yang mereka pakai juga akan menjadi usang atau tidak relevan sesuai kebutuhan bisnis lagi, maka si Software Architect harus tetap memperbaharui desain dan keputusan arsitektur serta <em>principles</em> yang dia buat terhadap sistem tersebut.</p><h2>3. Update dengan Trend Teknologi, dan Tetap Belajar Terhadap Ekosistem Teknologi di Pasaran</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!SKC9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!SKC9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SKC9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SKC9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SKC9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!SKC9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg" width="958" height="600" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:600,&quot;width&quot;:958,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Famous Programming Languages &#8211; Authors and History&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Famous Programming Languages &#8211; Authors and History" title="Famous Programming Languages &#8211; Authors and History" srcset="https://substackcdn.com/image/fetch/$s_!SKC9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 424w, https://substackcdn.com/image/fetch/$s_!SKC9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 848w, https://substackcdn.com/image/fetch/$s_!SKC9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!SKC9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F74fd70a4-0a5a-4cab-8cb3-2471993fdf6d_958x600.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">programming language from mycplus.com</figcaption></figure></div><p>Seorang Software Architect, diharapkan terbuka dan update dengan teknologi yang ada dipasaran. Tidak harus spesifik terhadap suatu brand, namun setidaknya mengetahui fungsi yang ditawarkan oleh brand-brand tersebut di pasaran. Contohnya, Messaging Queue, merupakan sebuah platform yang menawarkan fungsi untuk menangani antrian <em>request/messages</em> dalam skala besar. Brand yang tersedia dipasaran mungkin banyak, seperti RabbitMQ, SQS, NSQ, dan sebagainya. Cara penggunaan semua brand tersebut pun berbeda satu sama lain. Kita tidak perlu mengetahui semua cara menggunakan brand tersebut, namun satu hal yang pasti, kita tahu bahwa semua brand tersebut menawarkan fungsi yang hampir mirip untuk menangani antrian <em>request/messages</em> dalam sekala besar.</p><p>Software architect (tidak) harus menjadi ekspert di <em>brand</em> <em>platform</em> tersebut, namun memiliki pengetahuan dasar yang cukup membuat Software Architect dapat menggunakannya pada kebutuhan sistem yang akan dirancang dan dibangun nantinya.</p><p>Untuk mengikuti tren dan tetap belajar, ada 2 istilah yang perlu kita pahami. Yakni <em>Technical Depth</em> dan <em>Technical Breadth</em>. Keduanya ini akan sangat penting sebagai tolak ukur kita untuk memilih hal apa yang perlu dipelajari, dan sejauh apa hal tersebut dipelajari. Apakah hanya sekedar kulit-kulitnya saja, atau sampai sedetail mungkin sampai <em>core</em>nya?</p><h3>Technical Depth dan Technical Breadth</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!r1bE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!r1bE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 424w, https://substackcdn.com/image/fetch/$s_!r1bE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 848w, https://substackcdn.com/image/fetch/$s_!r1bE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 1272w, https://substackcdn.com/image/fetch/$s_!r1bE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!r1bE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png" width="1456" height="708" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:708,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:129807,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!r1bE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 424w, https://substackcdn.com/image/fetch/$s_!r1bE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 848w, https://substackcdn.com/image/fetch/$s_!r1bE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 1272w, https://substackcdn.com/image/fetch/$s_!r1bE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F884cea2f-b403-4931-a2cc-f859b15c2175_1814x882.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Pada gambar diatas terdapat 3 lapisan penting.</p><ul><li><p><em><strong>stuff you know</strong></em><br>Merupakan hal yang kita kuasai secara mendalam, yang dimana kita percaya diri ketika ditanya atau melakukan hal tersebut. Misal, membangun REST API dengan mengunakan JavaScript</p></li><li><p><strong>stuff you know you don&#8217;t know</strong><br>Merupakan hal yang kita sadari, bahwa kita tidak tahu hal tersebut secara mendalam. Misal, saya tahu tentang Clojure saya pernah baca tentang Clojure, tetapi saya tidak tahu cara menulis kodingan Clojure, dan bagaimana mendeploy Clojure di production. Nah Clojure disini menjadi &#8220;stuff you know you don&#8217;t know&#8221; Saya tidak harus tahu <em>banget </em>tentang Clojure sampai sedetail mungkin, namun setidaknya saya tahu Clojure itu apa, dan kegunannya untuk apa. Sehingga jika suatu saat saya dihadapkan dengan project yang membutuhkan teknologi Clojure, saya bisa memfokuskan belajar Clojure dan menjadikannya menjadi  &#8220;stuff you know&#8221;.</p></li><li><p><strong>stuff you don&#8217;t know you don&#8217;t know</strong><br>Merupakan area yang tidak pernah kita ketahui jika tidak diberitahu oleh orang, media, atau pun secara tidak sengaja menemukannya. Misal ini saya analogikan seperti ketika saya masih baru lulus SMA, saya tidak tahu seperti apa itu jurusan Teknik Informatika. Saya tidak pernah tahu, kalau ada yang disebut dengan bahasa programming C, C++, Java, dsb. Kalau saya tidak kuliah, mungkin saya tidak akan pernah mengetahui ini. Maka <strong>ketika saya masih SMA</strong>, bahasa programming bisa dikategorikan sebagai &#8220;stuff you don&#8217;t know you don&#8217;t know&#8221;.</p><p></p></li></ul><p>Nah dari 3 lapisan tersebut, kita pun bisa menyebut lapisan ter-atas adalah Technical Depth, lalu 2 lapisan teratas adalah Technical Breadht</p><p><strong>Technical depth</strong>  adalah kemampuan/pengetahuan kita terhadap hal yang kita ketahui secara kuat dan mendalam, semua hal yang ada dalam lapisan tersebut merupakan hal yang memang kita kuasai secara detail dan mendalam.</p><p>Sementara <strong>Technical breadth</strong> adalah pengetahuan kita terhadap semua hal dari yang kita <em>expert</em> dibidangnya sampai hanya tahu sedikit saja (stuff you know you don&#8217;t know).</p><p>Nah, yang membedakan dari Junior Developer, Senior Developer, Junior Software Architect dan Senior Software Architect adalah <em>technical breadth</em> dan <em>technical depth</em> yang mereka kuasai. Junior Developer akan memimiliki <em>technical breadth</em> lebih sedikit dari pada Senior Developer, begitu juga Junior Software Architect akan memiliki lebih sedikit <em>technical breadth</em> dibanding Senior Software Architect namun memiliki lebih banyak <em>technical breadth</em> dibanding Senior Software Developer. Jelasnya dapat dilihat pada diagram berikut dibawah.</p><h4>Junior Developer</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gXDd!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gXDd!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 424w, https://substackcdn.com/image/fetch/$s_!gXDd!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 848w, https://substackcdn.com/image/fetch/$s_!gXDd!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!gXDd!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gXDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png" width="1456" height="776" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/ffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:776,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:110503,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gXDd!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 424w, https://substackcdn.com/image/fetch/$s_!gXDd!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 848w, https://substackcdn.com/image/fetch/$s_!gXDd!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!gXDd!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fffd24380-1672-4f08-abfc-701ef92a856a_1880x1002.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Junior developer cukup simple, sebagai junior developer, ekspektasinya mungkin hanya mengetahui sedikit hal, mungkin saat baru lulus kuliah kita hanya tahu tentang bahasa programming PHP, dan sedikit framework PHP. </p><p>Misal kita memiliki <em>inventory</em> &#8220;stuff you know&#8221;: PHP Language, Mysql, Laravel. <br>Lalu kita juga memiliki <em>inventory</em> &#8220;stuff you know you don&#8217;t know&#8221;, misal CodeIgniter, Java, C++.</p><p>Nah, <em>Technical Depth</em> kita adalah PHP Language, Mysql, Laravel.  <br>Dan <em>Technical Breadth</em> ( &#8220;stuff you know&#8221; + &#8220;stuff you know you don&#8217;t know&#8221;) kita adalah PHP Language, Mysql, Laravel,  <strong>CodeIgniter, Java, C++ </strong><em><strong>(*</strong>tambahan dari technical depth<strong>)</strong></em></p><h4>Senior Developer</h4><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!bi-6!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bi-6!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 424w, https://substackcdn.com/image/fetch/$s_!bi-6!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 848w, https://substackcdn.com/image/fetch/$s_!bi-6!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!bi-6!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bi-6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png" width="1456" height="782" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:782,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115852,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bi-6!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 424w, https://substackcdn.com/image/fetch/$s_!bi-6!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 848w, https://substackcdn.com/image/fetch/$s_!bi-6!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 1272w, https://substackcdn.com/image/fetch/$s_!bi-6!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F0edc628d-3755-44ca-9375-b282ab6f40b5_1900x1020.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Lalu saat kita mencapai <em>senior level</em>, banyak asam garam dunia pun semakin terasa. Kita pun mulai menambah <em>inventory</em> <em>knowledge</em> kita. Yang sebelumnya hanya PHP dan Laravel, kini kita makin banyak <em>expertise list</em>.</p><p>Technical Depth(&#8220;stuff you know&#8221;) kita misal, PHP Language, Mysql, Laravel, Redis, MongoDB, RabbitMQ, Microservices. </p><p>Lalu kita juga memiliki <em>inventory</em> &#8220;stuff you know you don&#8217;t know&#8221;, seperti CodeIgniter, Java, C++, Kafka, Google Pubsub.</p><p>Maka Technical Breadth kita menjadi, PHP Language, Mysql, Laravel, Redis, MongoDB, RabbitMQ, Microservices, CodeIgniter, Java, C++, Kafka, Google Pubsub.</p><h4>Junior Architect</h4><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Wh9C!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Wh9C!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 424w, https://substackcdn.com/image/fetch/$s_!Wh9C!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 848w, https://substackcdn.com/image/fetch/$s_!Wh9C!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 1272w, https://substackcdn.com/image/fetch/$s_!Wh9C!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Wh9C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png" width="1456" height="815" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:815,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:119054,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Wh9C!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 424w, https://substackcdn.com/image/fetch/$s_!Wh9C!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 848w, https://substackcdn.com/image/fetch/$s_!Wh9C!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 1272w, https://substackcdn.com/image/fetch/$s_!Wh9C!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F130b33cb-7f31-4f83-bd69-99e7f423471f_1840x1030.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Begitu pula selanjutnya dengan Junior architect, pada tahap ini, kita diharapkan makin banyak menambah <em>inventory</em> &#8220;stuff you know you don&#8217;t know&#8221;. Dan menggunakan <em>inventory</em> tersebut dan memindahkannya menjadi &#8220;stuff you know&#8221; sesuai kebutuhan. </p><p>Contohnya mungkin. Sebut saja John Snow, memiliki <em>inventory</em> &#8220;stuff you don&#8217;t know&#8221; salah satunya adalah MongoDB.  Dia sadar dia kurang paham tentang MongoDB, tetapi dia menyedari bahwa ada teknologi NoSQL yang bisa membantu <em>development</em> yang menggunakan <em>document based data</em>. Dan suatu kesempatan, John Snow ada projek dan butuh akan penggunaan MongoDB untuk mempermudah penyimpanan  <em>document-based data</em> di sistemnya. Nah dari sini, karena MongoDB sudah ada dalam radar &#8220;stuff you know you don&#8217;t know&#8221;, dia bisa pelajarin MongoDB sampai dia yakin untuk meng-implementasikannya di <em>production</em>. Mungkin dengan <em>Proof of Concept (POC</em>), dan <em>testing</em> skala kecil.</p><p>Dan pada akhirnya, saat dia menggunakan MonngoDB di <em>production</em> dan berjalan dengan baik, maka MongoDB akan bergeser dari &#8220;stuff you know you don&#8217;t know&#8221; =&gt; &#8220;stuff you know&#8221;. Saat ditahap ini, maka John Snow sudah membuat MongoDB menjadi <em>technical depth</em>nya dia. Selanjutnya adalah untuk John Snow untuk tetap me-maintain knowledge MongoDB dan tetap mengasah seiring dengan perkembangannya teknologi.</p><h4>Senior Architect</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!gc5d!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!gc5d!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 424w, https://substackcdn.com/image/fetch/$s_!gc5d!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 848w, https://substackcdn.com/image/fetch/$s_!gc5d!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 1272w, https://substackcdn.com/image/fetch/$s_!gc5d!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!gc5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png" width="1456" height="809" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:809,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:121641,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!gc5d!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 424w, https://substackcdn.com/image/fetch/$s_!gc5d!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 848w, https://substackcdn.com/image/fetch/$s_!gc5d!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 1272w, https://substackcdn.com/image/fetch/$s_!gc5d!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F626f313c-22dd-40c1-b743-e81541e5ce59_1840x1022.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Lalu di level Senior Architect, akan lebih abstract lagi. Harus memiliki segala inventori yang bisa dipelajari suatu saat nanti <strong>saat akan butuh terhadap teknologi</strong> tersebut. Namun hal menarik di tahap ini, kita juga harus merelakan kemampuan spesialis kita sebelumnya, karena <em>mind mental</em> kita sudah termakan penuh dengan hal-hal baru dari &#8220;stuff you know you don&#8217;t know&#8217;, sehingga mau tidak mau, kita harus <em>learn to unlearn</em> apa yang sudah kita pahami. Saat ditahap ini orang-orang yang <em>resistance</em> dan telah terjebak di zona nyaman akan kesusahan karena mereka sudah nyaman dengan hal yang mereka ketahui. Saya sendiri juga sedang mengalaminya. Saya sudah lama bekerja menggunakan Golang, sehingga saya sedikit kesusahan untuk mempelajari teknologi baru seperti JavaScript, Rust, dsb. Satu satunya cara untuk lepas dari jebakan ini tentunya memaksa diri dan membuat pikiran menjadi flexible, tanpa harus terpaku pada satu bidang teknologi.</p><h3>Keep Adding List &#8220;stuff you know you don&#8217;t know&#8221;</h3><p>Lalu mungkin ada muncul pertanyaan, </p><blockquote><p>Bagaimana cara menambah list &#8220;stuff you know you don&#8217;t know&#8221;?</p></blockquote><p>Salah satu langkah paling sederhana tentunya membaca, atau tetap update dengan teknologi melalui konfrensi online/offline yang ada di dunia. Mungkin dari sana kita nanti dapat belajar hal baru ataupun teknologi baru yang sedang di adopsi oleh para <em>experts</em> lainnya.</p><p>Referensi yang bisa dicoba diataranya adalah,</p><ul><li><p>InfoQ</p></li><li><p>Radar by Thoughtworks</p></li><li><p>DZone</p></li><li><p>Engineering Blogs dari perusahaan teknologi lainnya seperti, Gojek Enginneering Blog, Xendit Engineering Blog, Grab Engineering Blog, dsb</p></li><li><p>dan banyak lainnya mungkin dengan follow akun-akun <em>experts</em> lainnya di Linkedin ataupun Twitter.</p></li></ul><h2>4. Menjadi Domain Experts / Memiliki Pengetahuan yang Mencukupi terhadap Bisnis Perusahaan (product)</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rhLZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rhLZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 424w, https://substackcdn.com/image/fetch/$s_!rhLZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 848w, https://substackcdn.com/image/fetch/$s_!rhLZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 1272w, https://substackcdn.com/image/fetch/$s_!rhLZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rhLZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png" width="759" height="411" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:411,&quot;width&quot;:759,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rhLZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 424w, https://substackcdn.com/image/fetch/$s_!rhLZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 848w, https://substackcdn.com/image/fetch/$s_!rhLZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 1272w, https://substackcdn.com/image/fetch/$s_!rhLZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F713ed82d-6bbb-48aa-b720-a67ec9e971e9_759x411.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">domain experts from &#8220;The need for domain experts&#8221; by Joaquim Torres (Joca)</figcaption></figure></div><p>Selanjutnya, tidak kalah penting adalah, Software Architect diharapkan memiliki pengetahuan yang mencukupi terhadap domain bisnis dia bekerja. </p><p>Software architect memiliki banyak stakeholders, Executive, Managers, Software Engineers, Sales/Products, tim Infrastructure, tim Security dan sebagainya. Selain memahami masalah teknis, Software architect juga harus memahami bagaimana bisnis bekerja. <em>Compliance</em> yang berlaku, regulator (jika finance misal, OJK, Bank Indonesia), Enteprises dan partner policies, dan sebagainya.</p><p>Semua hal yang berhubungan dengan berjalannya bisnis tersebut, domain dari bisnis tersebut haruslah diketahui oleh Software Architect. Mungkin tidak secara detail, namun secara <em>high-level view</em>, bagaimana semua proses bekerja harus lah dipahami seorang software architect.</p><p>Saya tidak ada penjelasan banyak tentang bagian ini, karena setiap bisnis memiliki domain yang berbeda-beda. Sehingga sebagai Software Architect, diharapkan mencari sendiri jalan yang terbaik menurut dia untuk mempelajari domain bisnis yang dia miliki.</p><h2>5. Memiliki Skill Interpersonal yang Baik, dan Mampu Navigate Iklim Politik yang Ada di Perusahaan</h2><p>Berbicara tentang politik, mungkin kesannya sedikit negatif. Terlebih didunia pekerjaan, saat kita sebut &#8220;office politic&#8221;, tentu kesannya sudah sangat buruk (<em>toxic culture)</em>. Namun yang dimaksud dengan iklim politik disini adalah, &#8220;<em>the art of  Negotiation and Convincing people</em>&#8221;. </p><p>Jika diberikan contoh mungkin, sebut saja ada 2 orang architects. Saya dan John Snow. </p><p><strong>#kasus 1</strong></p><p>Saya sedang melihat <em>repository</em> dari notification service,  dari struktur kode,  tersebut sangat kompleks, dan tidak <em>clean</em>, banyak fungsi yang <em>redundant</em>, tidak <em>loosely coupled</em> yang mengakibatkan <em>developement time</em> jadi lama karena banyaknya <em>tech-debt</em> di service tersebut . Lalu saya pun membuat proposal untuk <em>refactor</em> dan mungkin <em>re-write</em> sistem dari awal dengan <em>practice</em> yang benar, rapi, <em>clean</em> dan <em>loosely coupling</em> yang memudahkan untuk pengembangan fitur fitur baru nantinya. </p><p><strong>#kasus 2</strong></p><p>Di sisi lain, John Snow. Melihat suatu sistem <em>payment statement</em>. Dimana fungsinya adalah untuk menyimpan <em>history</em> pembayaran.</p><p>Namun, ada keanehan pada architecture sistem ini menurut John Snow.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!nlpI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!nlpI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 424w, https://substackcdn.com/image/fetch/$s_!nlpI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 848w, https://substackcdn.com/image/fetch/$s_!nlpI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 1272w, https://substackcdn.com/image/fetch/$s_!nlpI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!nlpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png" width="681" height="421" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/f1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:421,&quot;width&quot;:681,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!nlpI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 424w, https://substackcdn.com/image/fetch/$s_!nlpI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 848w, https://substackcdn.com/image/fetch/$s_!nlpI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 1272w, https://substackcdn.com/image/fetch/$s_!nlpI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1a32daa-0197-4bed-a685-87dc8dd8aeeb_681x421.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Bisa dilihat, terdapat shared DB terhadap banyak services/component. John Snow, selaku Software Architect membuat <strong>pernyataan</strong>, &#8220;DB should be isolated to its service, and no shared DB allowed. All data access should be only through interfaces like REST, gRPC and Events/Messaging&#8221;.  Mungkin proposal John Snow, adalah sebagai berikut.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!leKL!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!leKL!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 424w, https://substackcdn.com/image/fetch/$s_!leKL!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 848w, https://substackcdn.com/image/fetch/$s_!leKL!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 1272w, https://substackcdn.com/image/fetch/$s_!leKL!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!leKL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png" width="691" height="331" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:331,&quot;width&quot;:691,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!leKL!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 424w, https://substackcdn.com/image/fetch/$s_!leKL!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 848w, https://substackcdn.com/image/fetch/$s_!leKL!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 1272w, https://substackcdn.com/image/fetch/$s_!leKL!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F353b52b7-c68f-4c00-a73d-979e2e852bac_691x331.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>Nah dari kasus 1 dan kasus 2, yang manakah yang paling sulit dilakukan (mungkin impossible)? <strong>Ya tentu saja, kasus 2.</strong> </p><p>Pada kasus 1, Saya hanya mengubah struktur kode. Dan ini bisa dilakukan sendiri/team tersebut. Dan tidak perlu banyak drama. </p><p>Namun untuk kondisi kasus 2, akan sangat dibutuhkan <em>interpersonal skills</em>, komunikasi, negosiasi, dan <em>convincing</em> tim yang lain.  Mungkin reporting service, admin dashboard, dan analitical team memberikan respon: <br>&#8220;Kenapa tidak buat Read Only DB replication saja?&#8221;<br>&#8220;Kenapa harus mengubah flow?&#8221;<br>&#8220;Ini sepertinya terlalu besar, harus butuh decision dari pihak management&#8221;</p><p>Semua komentar ini akan datang dari semua sisi. Karena dengan memberikan proposal tersebut, maka banyak pekerjaan akan tertunda, banyak tim harus memikirkan <em>roadmap</em> kembali. <em>Priority management</em> harus di <em>restructure</em> lagi. </p><p>Sehingga, untuk menghadapi kasus seperti ini, Software Architect harus memiliki <em>interpersonal skills</em> yang baik. Harus mampu meyakinkan semua tim, <em>products, engineer</em> bahkan eksekutif bahwa proposal ini harus dilakukan.</p><h2>Kesimpulan</h2><p>Saya merangkum ada 5 ekspektasi umum yang diharapkan dari software architect, dari 8 ekspektasi yang disebutkan oleh Mark Richards. Ke 5 ekspektasi itu adalah, </p><ul><li><p>Menjadi Pawang Architecture Decision dan Design Principles</p></li><li><p>Menganalisa dan Meningkatkan System di Perusahaan Secara Terus Menerus Mejadi Lebih Baik</p></li><li><p>Update dengan Trend Teknologi, dan Tetap Belajar Terhadap Ekosistem Teknologi di Pasaran</p></li><li><p>Menjadi Domain Experts / Memiliki Pengetahuan yang Mencukupi terhadap Bisnis Perusahaan (product)</p></li><li><p>Memiliki Skill Interpersonal yang Baik, dan Mampu Navigate Iklim Politik yang Ada di Perusahaan</p></li></ul><p>Dari semua ekspektasi yang diharapkan dari seorang software architect, saya sadari saya masih banyak kurangnya. Namun demikian saya belajar hal banyak dari topik ini. Saya akan mencoba meng-aplikasikan ini dan membuat ekspektasi sendiri agar saya bisa menjadi Software Architect yang benar.</p><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/p/diary-1-a-glimpse-of-how-to-striving?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption"><em>Hey! Jangan lupa share ya! Bantu saya untuk membagikan artikel ini agar teman-teman kamu juga dapat membacanya ^_^</em></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://notes.softwarearchitect.id/p/diary-1-a-glimpse-of-how-to-striving?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://notes.softwarearchitect.id/p/diary-1-a-glimpse-of-how-to-striving?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div><hr></div><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!XtuF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!XtuF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!XtuF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!XtuF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!XtuF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!XtuF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png" width="728" height="145.6" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/e945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:220,&quot;width&quot;:1100,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:11719,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!XtuF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 424w, https://substackcdn.com/image/fetch/$s_!XtuF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 848w, https://substackcdn.com/image/fetch/$s_!XtuF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 1272w, https://substackcdn.com/image/fetch/$s_!XtuF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fe945f2cf-f3aa-4bdb-83c3-182875e8a70c_1100x220.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div>]]></content:encoded></item><item><title><![CDATA[Software Architect: Continuous and Endless Sailing on the Endless Sea]]></title><description><![CDATA[Finding solutions when no-one can help!]]></description><link>https://notes.softwarearchitect.id/p/software-architect-intro</link><guid isPermaLink="false">https://notes.softwarearchitect.id/p/software-architect-intro</guid><dc:creator><![CDATA[Iman Tumorang]]></dc:creator><pubDate>Mon, 17 Jan 2022 10:22:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!mThJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Saya pernah ketemu satu komik lucu. Tentang sebuah kapten kapal yang nekat berlayar meski kapalnya sudah buruk. Berikut komiknya.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mThJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mThJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mThJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mThJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mThJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mThJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg" width="1233" height="2048" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2048,&quot;width&quot;:1233,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:245129,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mThJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 424w, https://substackcdn.com/image/fetch/$s_!mThJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 848w, https://substackcdn.com/image/fetch/$s_!mThJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!mThJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2F8873c50e-d7e2-4c3a-bf1e-b32a612a6954_1233x2048.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Comic by Pablo Stanley</figcaption></figure></div><p>Apakah komik ini relate dengan teman sekalian? Buat kamu yang bekerja di dunia startup, saya rasa hal ini cukup relate. Kondisi dimana pihak manajemen dan product yang ingin merilis fitur secepatnya tanpa melihat kondisi sistem dan tech-debt yang menumpuk.</p><p>Akan tetapi kondisi ini terkadang menjadi buah simalakama, terlambat rilis tentu saja dapat tersaingin oleh kompetitor. Sebaliknya jika terus-menerus rilis tetapi malah menambah tech-debt, nantinya malah akan menumpuk untuk diurus dikemudian hari.</p><p>Dan memang bukan rahasia lagi, bahwa hal seperti ini cukup lumrah di setiap perusahaan khususnya di Indonesia, atau setidaknya di beberapa perusahaan yang pernah saya ketahui kondisi di dalamnya dan saya pun mengalaminya.</p><p>Untuk itu terkait penanganan tech-debt, dibutuhkan kesepakatan antara tim engineer dan pihak management atau PM. Dibutuhkan beberapa orang yang bertugas menjembatani keadaan yang terjadi di engineering, dan memberikan solusi terbaik menurut kedua belah pihak antara Product dan Engineering.</p><p>Dan untuk itulah kenapa role Software Architect dibutuhkan. Di tempat saya bekerja ketika menulis ini, untuk mengatasi permasalahan antara <em>keeping best practice while release faster dan reduce tech-debt</em> maka dibentuklah satu group independent yang kita sebut Architects. Dimana orang-orang didalam akan di assign ke semua team dan bertanggung jawab terhadap menyelesaikan masalah teknis dan architecture yang ada pada tim tersebut.</p><h2>Apa Itu Software Architect?</h2><p>Software Architect adalah orang yang bertanggung jawab terhadap permasalahan arsitektur yang terdapat dalam perusahaan, baik secara teknis atau pun bisnis. Software Architect bertanggung jawab menjadi penghubung antara kebutuhan bisnis dan ketersedian teknologi yang dapat dimanfaatkan guna mendukung kinerja bisnis.</p><p>Software Architect merupakan posisi/jabatan yang cukup ambigu secara general. Karena tidak semua perusahaan memiliki posisi ini. Berbeda dengan Software Engineer, Tech Lead, Engineering Manager, VP Engineering dsb. Posisi/jabatan tersebut memiliki job desc yang jelas, title yang jelas dan responsibilitynya pun sangat jelas. Saat bekerja di perusahaan X sebagai Tech Lead, maka saat pindah perusahaan pun, kita masih bisa menjabat sebagai Tech Lead.</p><p>Berbeda dengan Software Architect. Mungkin saat ini saya sedang bekerja di posisi Software Architect di X, namun jika semisalnya saya ingin pindah pekerjaan ke perusahaan lain, maka posisi Software Architect tidak selamanya ada. Mau tidak mau, saya mungkin harus menerima lowongan yang lain seperti sebagai Software Engineer, Tech Lead, Engineering Manager dsb.</p><p>Namun ke-ambiguan posisi/jabatan tersebut, bukan berarti role Software Architect tidak penting. Jabatan mungkin tidak ada secara umum, akan tetapi role/peran Software Architect masih harus dibutuhkan oleh perusahaan. Biasanya untuk perusahaan yang tidak memiliki posisi/title/jabatan Software Architect, maka role/peran Software Architect biasanya di pegang oleh para petinggi seperti Engineering Manager, VP Engineering, CTO atau bahkan dipegang oleh Software Engineer di perusahaan tersebut.</p><p>Dalam article <strong><a href="https://architectelevator.com/architecture/organizing-architecture/">&#8220;The Architect Elevator: Would you like architects with your architecture?&#8221;</a>, Gregor Hohpe </strong>menyebutkan tentang kombinasi posisi/peran architects yang ideal.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!rhOS!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!rhOS!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 424w, https://substackcdn.com/image/fetch/$s_!rhOS!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 848w, https://substackcdn.com/image/fetch/$s_!rhOS!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 1272w, https://substackcdn.com/image/fetch/$s_!rhOS!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!rhOS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png" width="800" height="313" data-attrs="{&quot;src&quot;:&quot;https://bucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com/public/images/c0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:313,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:23468,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!rhOS!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 424w, https://substackcdn.com/image/fetch/$s_!rhOS!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 848w, https://substackcdn.com/image/fetch/$s_!rhOS!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 1272w, https://substackcdn.com/image/fetch/$s_!rhOS!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fbucketeer-e05bbc84-baa3-437e-9518-adb32be77984.s3.amazonaws.com%2Fpublic%2Fimages%2Fc0c74967-12bf-499f-82c4-23ea198bc11c_800x313.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Organizing Architecture by Gregor Hohpe in The Architect Elevator</figcaption></figure></div><p>Terdapat 4 kombinasi yang biasanya terjadi di banyak perusahaan,</p><ul><li><p><strong>Benevolent dictator:</strong> tipe yang one-man show, dimana satu architect decide everything dan team follow the architect&#8217;s decision.</p></li><li><p><strong>Primus inter pares</strong>: tipe yang one man role dalam satu tim, yang dimana sang architect terkadang masih ikut turun tangan secara implementasi. Namun biasanya fokusnya lebih ke roadmap dan architectural problem. Posisi ini mungkin cukup lumrah jika terdapat satu Principal Engineer (Staff Engineer) di dalam satu tim. Atau untuk komposisi yang umum lainnya seperti Techlead dalam satu tim yang juga bertanggung jawab terhadap architectural problem di tim tersebut.</p></li><li><p><strong>Architecture without architects</strong>: tipe yang work as a team, dimana decission dari Software Architecutre di tentukan bareng bareng sesama orang yang terpilih di tim tersebut, biasanya 2 orang atau lebih. Semisal, Principal Engineer dan TL decide tentang Software Architecture, shared responsibility. </p></li><li><p><strong>Inmates running the asylum</strong>: tipe terakhir yang adalah kondisi lebih dinamis, biasa orang sebut dengan agile flexible. Dimana semua ditentukan bareng, dan tidak ada orang yang focus untuk melakukan tugas tugas architect. Sehingga decision biasanya lebih lama terjadi. Namun untuk tim yang lebih mature dengan experts didalam, biasanya decission lebih cepat terjadi. </p></li></ul><p>Sehingga dalam perusahaan, bisa saja jabatan &#8220;Software Architect&#8221; itu tidak ada sama sekali. Namun untuk peran &#8220;Software Architect&#8221; pastinya selalu ada hanya mungkin peran itu terselubung secara implisit di posisi-posisi yang ada pada perusahaan tersebut.</p><h3>Software Architect Expectations?</h3><p>Lalu apa sajakah tugas dan tanggung jawab seorang Software Architect tersebut?</p><blockquote><p><em>Apa yang akan saya jelaskan berikut adalah menurut yang saya alami, dan saya pahami. Sehingga jika ternyata berbeda dengan yang terdapat pada perusahaan kamu, kita bisa diskusikan dikolom komentar <s>sehingga saya bisa menyamakan ekspektasi jika suatu saat saya melamar ketempat anda *eh</s> sehingga dapat menambah data point tentang apa saja tugas dan tanggung jawab dari seorang Software Architect.</em> </p></blockquote><p>Mungkin terlihat abu-abu, berikut adalah point penting yang diharapkan oleh perusahaan saya bekerja terhadap role yang saya emban, diantaranya adalah sebagai berikut.</p><ul><li><p>Architects connect the dots.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!OZlg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!OZlg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 424w, https://substackcdn.com/image/fetch/$s_!OZlg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 848w, https://substackcdn.com/image/fetch/$s_!OZlg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 1272w, https://substackcdn.com/image/fetch/$s_!OZlg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!OZlg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png" width="406" height="573" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/cefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:573,&quot;width&quot;:406,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:434944,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!OZlg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 424w, https://substackcdn.com/image/fetch/$s_!OZlg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 848w, https://substackcdn.com/image/fetch/$s_!OZlg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 1272w, https://substackcdn.com/image/fetch/$s_!OZlg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fcefe14f9-9a72-441d-a98f-0f5abe32e8b6_406x573.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Maksudnya adalah, para architects di harapkan mampu menyambungkan semua Lego block yang terdapat pada keseluruhan sistem. Semua sistem di dalam perusahaan sudah pasti di design independen dan berjalan dengan baik.  Namun sebaik apapun keseluruhan sistem tersebut berjalan, masih belum cukup untuk membuat bisnis berjalan. Dan layaknya seperti Lego block, architect harus mampu menyambungkan semua itu menjadi satu kesatuan dan sejalan dengan bisnis.</p></li><li><p>Architects fight complexity</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!mHpA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!mHpA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 424w, https://substackcdn.com/image/fetch/$s_!mHpA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 848w, https://substackcdn.com/image/fetch/$s_!mHpA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 1272w, https://substackcdn.com/image/fetch/$s_!mHpA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!mHpA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png" width="529" height="548" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:548,&quot;width&quot;:529,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:193324,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!mHpA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 424w, https://substackcdn.com/image/fetch/$s_!mHpA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 848w, https://substackcdn.com/image/fetch/$s_!mHpA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 1272w, https://substackcdn.com/image/fetch/$s_!mHpA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c3965a9-8d29-4d18-b126-fae9c8e067a8_529x548.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Software Architecture sudah sangat kompleks, IT itu kompleks, bisnis kompleks. Maka sebagai architect diharapkan mampu mengurangi semua kompleksitas tersebut, dan menyederhanakan semua sebisa mungkin. Namun tidak harus menjadi over simplify, setidaknya menjadi mudah dipahami oleh para stakeholder dan tetap rasional.</p></li><li><p>Architects see trade-offs</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!kkpZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kkpZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 424w, https://substackcdn.com/image/fetch/$s_!kkpZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 848w, https://substackcdn.com/image/fetch/$s_!kkpZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 1272w, https://substackcdn.com/image/fetch/$s_!kkpZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kkpZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png" width="495" height="292" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b600d09-40e0-406d-becb-4104e927116c_495x292.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:292,&quot;width&quot;:495,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:107185,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kkpZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 424w, https://substackcdn.com/image/fetch/$s_!kkpZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 848w, https://substackcdn.com/image/fetch/$s_!kkpZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 1272w, https://substackcdn.com/image/fetch/$s_!kkpZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b600d09-40e0-406d-becb-4104e927116c_495x292.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Architect ketika memberikan solusi, haruslah menyertakan kekurangan atau poin-poin yang perlu diperhatikan dari solusinya jika solusi tersebut dilakukan. Karna menurut saya, tidak ada solusi yang benar di dunia software architecture, namun solusi optimal lah yang harus kita cari. Dengan perbandingan benefit vs trade-offs, maka kita memilih yang paling optimal.</p></li><li><p>Architects look beyond products.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E9sk!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E9sk!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 424w, https://substackcdn.com/image/fetch/$s_!E9sk!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 848w, https://substackcdn.com/image/fetch/$s_!E9sk!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 1272w, https://substackcdn.com/image/fetch/$s_!E9sk!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E9sk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png" width="528" height="598" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:598,&quot;width&quot;:528,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:190551,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!E9sk!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 424w, https://substackcdn.com/image/fetch/$s_!E9sk!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 848w, https://substackcdn.com/image/fetch/$s_!E9sk!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 1272w, https://substackcdn.com/image/fetch/$s_!E9sk!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F088c961f-7c3e-49b1-8600-15f58676f6bf_528x598.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Architect tidak terpaku pada satu product fitur. Tetapi harus melihat secara general, untuk melihat opsi yang lebih baik terhadap suatu solusi. Looks on the abstraction level!</p></li><li><p>Architects articulate strategy</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AVkN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AVkN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 424w, https://substackcdn.com/image/fetch/$s_!AVkN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 848w, https://substackcdn.com/image/fetch/$s_!AVkN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 1272w, https://substackcdn.com/image/fetch/$s_!AVkN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AVkN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png" width="1038" height="559" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:559,&quot;width&quot;:1038,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:836325,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!AVkN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 424w, https://substackcdn.com/image/fetch/$s_!AVkN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 848w, https://substackcdn.com/image/fetch/$s_!AVkN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 1272w, https://substackcdn.com/image/fetch/$s_!AVkN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F545e65dc-524e-478d-82a6-688a3f020cf5_1038x559.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Architect menerjemahkan strategy bisnis ke bahasa teknis. Sehingga bisa menjadi jembatan antara orang bisnis dengan engineer. Tujuan IT tentu saja menjadi enabler bussiness, mendukung strategy bisnis. Maka seorang architect diharapkan mampu menerjemahkan kebutuhan bisnis menjadi bahasa teknis yang dipahami oleh engineers.</p></li><li><p>Architects deliver</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!IQDq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IQDq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 424w, https://substackcdn.com/image/fetch/$s_!IQDq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 848w, https://substackcdn.com/image/fetch/$s_!IQDq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 1272w, https://substackcdn.com/image/fetch/$s_!IQDq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IQDq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png" width="527" height="401" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:401,&quot;width&quot;:527,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:46029,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!IQDq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 424w, https://substackcdn.com/image/fetch/$s_!IQDq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 848w, https://substackcdn.com/image/fetch/$s_!IQDq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 1272w, https://substackcdn.com/image/fetch/$s_!IQDq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4a2c312b-7dd7-4400-b7c4-7936d1eae458_527x401.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p></p><p>Meski architect lebih sering berpikir high-level domain. Architect juga diharapkan mampu down to earth, dan mendengarkan feedbacks secara langsung dari implementasi project <em>~ a.k.a terjun kelapangan, gak nyuruh nyuruh aja, tanpa tahu bagaimana keadaan project di lapangan :D</em> </p></li></ul><p>Namun in reality, apa yang saya alami adalah,</p><ul><li><p>Menjadi unblocker, dan enabler para engineer. <br>Saya harus aktif bertanya terhadap tim, apakah ada yang bisa saya bantu agar tidak terblock. Membuat tools, atau RFC yang diharapkan mampu meringankan pekerjaan para engineers.</p></li><li><p>Memberikan pilihan solusi, tetapi tidak menetapkan solusi.</p><p>Ketika menyelesaikan satu masalah, saya biasanya sediakan beberapa solusi. Dimana nantinya saya kasih keputusan kepada tim untuk memilih. Atau terkadang tim malah memberikan solusi juga. Sehingga, bisa saja semua opsi yang saya berikan ditolak oleh tim. Dan saat itu terjadi, saya tetap akan harus mendukung solusi tersebut dan mengimplementasikannya bersama tim.</p></li><li><p>Lead by example</p><p>Ya tentu saja, saya masih harus melakukan implementasi jika diharuskan. Saya tidak boleh cuap-cuap theory saja. Saya harus langsung turun, dan melihat tingkat kesusahan solusi yang saya tawarkan.</p></li></ul><h3>Continuous and Endless Sailing on the Endless Sea</h3><p>Saya masih sangat baru role ini, dan jujur saja, saya terkadang masih bingung untuk berpikir layaknya seorang Software Architect. Jika berbicara tentang zona nyaman, saya masih lebih memilih untuk tetap di Senior Software Engineer. Dimana seperti kata dari sesepuh The TechLead si Youtuber kondangan dengan opini-opini fenomenalnya. Salah satu opininya adalah: </p><blockquote><p><em>Senior Software Engineer(SSE) itu adalah &#8220;Sweet spot&#8221; dari jenjang karir software engineering, dimana kita memiliki domain tersendiri, kebebasan tersendiri, dan memiliki outcome jelas dari Techlead, atau Staff  level lainnya.</em></p></blockquote><p>Ya memang benar, karena di level SSE, ketika kita tidak tahu berbuat apa-apa, kita bisa bertanya ke yang lebih senior, Principal, Techlead, dsb. Berbeda dengan ketika menjadi Software Architect. Ketika diposisi ini, saya tidak tahu harus bertindak seperti apa, ketika saya bertanya kepada manager saya, yang beliau katakan adalah:</p><blockquote><p><em>&#8220;Iman, seharusnya kamu datang kepada saya membawa topik masalah dan pilihan solusi, dan requirement atau resource yang kamu butuhkan, apakah engineer, infrastructure, etc. Dan kamu eksekusi solusi tersebut sendiri. Jadi saya hanya tinggal membantumu mencari orang/engineer yang bisa menemanimu meng-eksekusi solusimu&#8221;.</em></p></blockquote><p>Saya diharapkan menemukan masalah yang tidak pernah disadari orang, lalu menyelesaikan masalah tersebut.</p><p>Sehingga saya pun menggangap, berjalan di level Software Architect sama seperti berlayar tanpa henti di lautan luas. Harus peka terhadap lingkungan dan masalah yang tidak disadari orang lain. Harus cepat tanggap dan responsive, flexible dan manage ekspektasi semua stakeholder.</p><p>Sama seperti berlayar jauh dilautan luas, kita harus melihat apakah kapal baik-baik saja. Apakah tidak ada kebocoran, dan jika ada bocor, kita harus perbaiki sebelum kebocorannya makin melebar luas dan membuat kapal kita tenggelam. Kita tidak ada pedoman yang pasti, tidak ada yang bisa kita harapkan, hanya mencoba trial-error and looks the best answer.</p><h2>Conclusions</h2><p>Software Architect bukan lah posisi/jabatan yang umum, tetapi peran Architect biasanya pasti dimiliki perusahaan baik secara implisit atau eksplisit, misal TechLead diharapkan mampu menyelesaikan architectural problems. Atau Principal Engineer bertanggung jawab terhadap architectural problems, dsb.</p><p>Berjalan di architect role sama seperti berlayar di lautan luas tanpa henti. Harus memiliki disiplin dan peka terhadap segala perubahan dan masalah yang orang lain tidak sadari.</p><p>Namun meskipun demikian, saya tentu saja harus tetap berjalan. Jika tidak seperti ini, sampai kapan saya akan berjalan di tempat, menunggu disuruh baru bisa bekerja? Meskipun saya masih hijau dan butuh banyak pengalaman, saya yakin saya akan diposisi dimana saya akan bangga dan di akui oleh orang-orang lain sebagai Software Architect seiring dengan waktu berjalan nantinya.</p><div><hr></div><p>Reference:</p><ul><li><p>https://architectelevator.com/architecture/organizing-architecture/</p></li><li><p>Xendit&#8217;s Principle about Operating as an Architect</p></li></ul><div><hr></div><p><em>Demi mencapai cita-cita saya menjadi Software Architect yang handal. Saya menerima tawaran <strong>part-time/freelance/consultant Software Architect</strong> dan focus di area Software Architecture,  Microservices serta masalah scaling secara umum lainnya. Saya akan memberikan solusi yang terbaik <strong>menurut kemampuan saya</strong> sesuai kondisi masalah yang diberikan.</em></p><div><hr></div>]]></content:encoded></item></channel></rss>