<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Clean-Architecture on Daffa Abhipraya</title><link>https://blog.abhipraya.dev/tags/clean-architecture/</link><description>Recent content in Clean-Architecture on Daffa Abhipraya</description><generator>Hugo</generator><language>en-us</language><copyright>© Daffa Abhipraya</copyright><lastBuildDate>Mon, 23 Mar 2026 00:00:00 +0700</lastBuildDate><atom:link href="https://blog.abhipraya.dev/tags/clean-architecture/index.xml" rel="self" type="application/rss+xml"/><item><title>PPL: Service Layer Instrumentation [Sprint 2, Week 1]</title><link>https://blog.abhipraya.dev/ppl/part-b/s2w1-programming/</link><pubDate>Mon, 23 Mar 2026 00:00:00 +0700</pubDate><guid>https://blog.abhipraya.dev/ppl/part-b/s2w1-programming/</guid><description>&lt;h2 id="what-i-worked-on">
 &lt;a class="anchor" href="#what-i-worked-on" data-anchor="what-i-worked-on" aria-hidden="true">#&lt;/a>
 What I Worked On
&lt;/h2>
&lt;p>This week I implemented custom Sentry span instrumentation across 3 key API services to track sub-operation latency in GlitchTip. The interesting part wasn&amp;rsquo;t the Sentry API itself; it was &lt;strong>where&lt;/strong> to place the instrumentation in our layered architecture, and how the existing SOLID patterns made the change trivially simple.&lt;/p>
&lt;h2 id="following-the-architecture-spans-in-services-not-routers">
 &lt;a class="anchor" href="#following-the-architecture-spans-in-services-not-routers" data-anchor="following-the-architecture-spans-in-services-not-routers" aria-hidden="true">#&lt;/a>
 Following the Architecture: Spans in Services, Not Routers
&lt;/h2>
&lt;p>SIRA follows a strict Router → Service → DB pattern. Routers handle HTTP concerns (auth, status codes). Services hold business logic. DB queries are isolated in &lt;code>db/queries/&lt;/code>.&lt;/p></description></item></channel></rss>