<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: yusuf yonturk</title>
    <description>The latest articles on DEV Community by yusuf yonturk (@yusuf_yonturk).</description>
    <link>https://dev.to/yusuf_yonturk</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3677149%2Fe49267c0-dd43-4f39-85d9-038a7ed87cb3.jpeg</url>
      <title>DEV Community: yusuf yonturk</title>
      <link>https://dev.to/yusuf_yonturk</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/yusuf_yonturk"/>
    <language>en</language>
    <item>
      <title>I Added a Cache and the System Got Slower: The Hidden Cost of Caching</title>
      <dc:creator>yusuf yonturk</dc:creator>
      <pubDate>Sun, 11 Jan 2026 20:09:13 +0000</pubDate>
      <link>https://dev.to/yusuf_yonturk/i-added-a-cache-and-the-system-got-slower-the-hidden-cost-of-caching-o0i</link>
      <guid>https://dev.to/yusuf_yonturk/i-added-a-cache-and-the-system-got-slower-the-hidden-cost-of-caching-o0i</guid>
      <description>&lt;p&gt;Caching is often marketed as a &lt;strong&gt;free&lt;/strong&gt; performance boost: drop in Redis, flip a flag, and enjoy instant speed. In reality, a cache is another network hop, another moving part, and another place where a request can get stuck or time out under load.&lt;/p&gt;

&lt;h2&gt;
  
  
  The “easy win” that wasn’t
&lt;/h2&gt;

&lt;p&gt;We had a hot endpoint running close to its limits, so we put a cache in front of it. The expectation was simple: fewer database hits and dramatically lower latency.&lt;/p&gt;

&lt;p&gt;What actually showed up in the graphs:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;p95 latency went up instead of down.&lt;/li&gt;
&lt;li&gt;“Fast locally, slow in prod” became something we said almost every day.&lt;/li&gt;
&lt;li&gt;Incidents became harder to reason about, because every request now had two potential bottlenecks: the cache &lt;strong&gt;or&lt;/strong&gt; the origin.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The code looked clean, the cache dashboards were green, but the user experience was clearly &lt;strong&gt;worse&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where the slowdown really came from
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Cache hits still cost something
&lt;/h3&gt;

&lt;p&gt;Even on a hit, you pay for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A network round trip to the cache (if it’s remote).&lt;/li&gt;
&lt;li&gt;Serialization and deserialization.&lt;/li&gt;
&lt;li&gt;Connection pooling, TLS, retries, and all the overhead around them.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;On a well‑indexed, already‑warm database, this extra hop can actually be more expensive than just running the original query.&lt;/p&gt;

&lt;h3&gt;
  
  
  Misses can be double work
&lt;/h3&gt;

&lt;p&gt;On a miss, the “simple” read path often turns into:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;code&gt;GET&lt;/code&gt; from cache → miss
&lt;/li&gt;
&lt;li&gt;Fetch from origin
&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;SET&lt;/code&gt; into cache
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;If the data changes frequently or isn’t reused much, you’ve just added extra work to almost every request. The hit‑rate chart might not look terrible, but most of the real cost is hiding on the miss path.&lt;/p&gt;

&lt;h3&gt;
  
  
  Stampede and churn
&lt;/h3&gt;

&lt;p&gt;When a popular key expires, a lot of requests can pile onto the origin at once. That thundering herd effect can send p95 through the roof exactly when the system is under its heaviest load.&lt;/p&gt;

&lt;p&gt;Short TTLs plus high‑cardinality keys are another kind of tax. If entries are constantly being evicted, the cache stops behaving like a &lt;em&gt;cache&lt;/em&gt; and turns into an expensive pass‑through layer you touch on every request.&lt;/p&gt;

&lt;h3&gt;
  
  
  When the cache becomes the bottleneck
&lt;/h3&gt;

&lt;p&gt;When the remote cache service slows down or runs out of resources, the application is dragged down with it. In those moments:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;App logs may not show a clear error.&lt;/li&gt;
&lt;li&gt;But APM starts showing “external call” time dominating the whole request.&lt;/li&gt;
&lt;li&gt;You’ve basically traded “the DB is slow” days for “the cache is slow” days.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  How to tell if your cache is really helping
&lt;/h2&gt;

&lt;p&gt;First, measure the cache as if it were its own service:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;cache_hit_rate&lt;/code&gt; (per endpoint or key group)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cache_get_ms&lt;/code&gt; and &lt;code&gt;cache_set_ms&lt;/code&gt; (p50 / p95 / p99)&lt;/li&gt;
&lt;li&gt;&lt;code&gt;origin_ms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;request_total_ms&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;cache_timeouts&lt;/code&gt; and &lt;code&gt;cache_errors&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then run a small experiment:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bypass the cache for 5–10% of traffic and compare p95/p99.&lt;/li&gt;
&lt;li&gt;Look at end‑to‑end latency for both the hit path and the miss path.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the hit path is not clearly cheaper than calling the origin, your cache is just an expensive layer of complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  The changes that actually helped
&lt;/h2&gt;

&lt;p&gt;Without throwing the cache away completely, these changes made a real difference:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Cache less, but smarter:&lt;/strong&gt; Only cache reads that are both expensive and reusable.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Store smaller objects:&lt;/strong&gt; Cache a minimal DTO instead of a huge, fully hydrated object graph.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use request coalescing / single‑flight:&lt;/strong&gt; For the same key, collapse concurrent requests so only one goes to the origin.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Add TTL jitter:&lt;/strong&gt; Keep things from expiring all at once and reduce the risk of a stampede.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Use stale‑while‑revalidate:&lt;/strong&gt; Serve slightly stale but fast data while refreshing the cache in the background.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Set tight timeouts and intentional fallbacks:&lt;/strong&gt; Don’t let cache timeouts dictate your entire API’s latency.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Once these were in place, the cache finally started acting like a performance layer instead of “just another production problem.”&lt;/p&gt;




&lt;p&gt;Which part of this story feels most familiar to you? The thundering herd, the disappointing hit rate, or the “we did everything right, so why is p95 still bad?” question? Drop your own cache war stories in the comments—they’re basically tiny post‑mortems that help the next person avoid the same mess.&lt;/p&gt;

</description>
      <category>programming</category>
      <category>performance</category>
      <category>backend</category>
      <category>redis</category>
    </item>
    <item>
      <title>Bug of the week: what was the root cause?</title>
      <dc:creator>yusuf yonturk</dc:creator>
      <pubDate>Sat, 10 Jan 2026 08:15:35 +0000</pubDate>
      <link>https://dev.to/yusuf_yonturk/weekly-check-in-whats-one-small-win-you-had-this-week-28ek</link>
      <guid>https://dev.to/yusuf_yonturk/weekly-check-in-whats-one-small-win-you-had-this-week-28ek</guid>
      <description>&lt;p&gt;Not a highlight reel — just one thing that went a bit better than last week.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick poll (pick one)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] Shipped something&lt;/li&gt;
&lt;li&gt;[x] Fixed a bug&lt;/li&gt;
&lt;li&gt;[ ] Learned something&lt;/li&gt;
&lt;li&gt;[ ] Career progress (interview/CV/networking)&lt;/li&gt;
&lt;li&gt;[ ] Rested / avoided burnout&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Mine
&lt;/h2&gt;

&lt;p&gt;Win: Fixed a bug that was wasting my time, and I wrote down the root cause + the exact fix so I won’t repeat it.&lt;br&gt;
Next week: I’ll ship one small improvement end-to-end and add a couple of basic tests for the part that broke.&lt;/p&gt;

&lt;h2&gt;
  
  
  Your turn 👇
&lt;/h2&gt;

&lt;p&gt;Win + next week. Two lines max.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayyc54rfbc7q0j7gy0os.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fayyc54rfbc7q0j7gy0os.png" alt="meme" width="180" height="198"&gt;&lt;/a&gt;&lt;/p&gt;

</description>
      <category>weeklyretro</category>
      <category>discuss</category>
      <category>productivity</category>
      <category>career</category>
    </item>
    <item>
      <title>If you were a junior in 2026, what would you build first to get hired?</title>
      <dc:creator>yusuf yonturk</dc:creator>
      <pubDate>Thu, 01 Jan 2026 10:30:48 +0000</pubDate>
      <link>https://dev.to/yusuf_yonturk/if-you-were-a-junior-in-2026-what-would-you-build-first-to-get-hired-23jp</link>
      <guid>https://dev.to/yusuf_yonturk/if-you-were-a-junior-in-2026-what-would-you-build-first-to-get-hired-23jp</guid>
      <description>&lt;p&gt;Quick discussion post.&lt;/p&gt;

&lt;p&gt;If you were starting from scratch in 2026 and could build only one thing to help you get hired, what would you build first?&lt;/p&gt;

&lt;p&gt;I’m not asking for “the perfect project”. I’m curious what signals matter most right now.&lt;/p&gt;

&lt;h2&gt;
  
  
  Quick poll (pick one)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;[ ] A clone (Netflix/Twitter/Spotify style)&lt;/li&gt;
&lt;li&gt;[ ] A small real product (one problem, solved well)&lt;/li&gt;
&lt;li&gt;[ ] A technical demo (one skill, shown deeply)&lt;/li&gt;
&lt;li&gt;[ ] Open-source contributions (PRs + collaboration)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why that choice?
&lt;/h2&gt;

&lt;p&gt;When someone says “build a project”, it can mean different goals:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Can you ship something end-to-end?”&lt;/li&gt;
&lt;li&gt;“Do you have depth in one area?”&lt;/li&gt;
&lt;li&gt;“Can you collaborate with others?”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Which one matters most to you in 2026?&lt;/p&gt;

&lt;h2&gt;
  
  
  What matters more than the idea?
&lt;/h2&gt;

&lt;p&gt;If you review junior portfolios (or you’ve been hired recently), what’s the #1 thing you pay attention to?&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A live demo (deployed)&lt;/li&gt;
&lt;li&gt;A clear README (setup + decisions)&lt;/li&gt;
&lt;li&gt;UI/UX polish&lt;/li&gt;
&lt;li&gt;Tests&lt;/li&gt;
&lt;li&gt;Performance details&lt;/li&gt;
&lt;li&gt;Security basics&lt;/li&gt;
&lt;li&gt;Code quality&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Your turn
&lt;/h2&gt;

&lt;p&gt;1) What would you build first to get hired? (1–2 sentences)&lt;br&gt;&lt;br&gt;
2) What’s the #1 thing you look for in a junior portfolio?&lt;/p&gt;

</description>
      <category>discuss</category>
      <category>career</category>
      <category>beginners</category>
      <category>webdev</category>
    </item>
    <item>
      <title>I Tried a 7-Day Dopamine Detox: The Hardest Part Wasn’t What I Expected</title>
      <dc:creator>yusuf yonturk</dc:creator>
      <pubDate>Mon, 29 Dec 2025 17:51:33 +0000</pubDate>
      <link>https://dev.to/yusuf_yonturk/i-tried-a-7-day-dopamine-detox-the-hardest-part-wasnt-what-i-expected-6d7</link>
      <guid>https://dev.to/yusuf_yonturk/i-tried-a-7-day-dopamine-detox-the-hardest-part-wasnt-what-i-expected-6d7</guid>
      <description>&lt;p&gt;I thought the hardest part would be not touching my phone.&lt;/p&gt;

&lt;p&gt;It wasn’t.&lt;/p&gt;

&lt;p&gt;The real challenge started &lt;em&gt;after&lt;/em&gt; I removed the obvious distractions, because my brain immediately tried to replace them with “reasonable” ones: small tasks, quick checks, tiny errands, and endless context switching that felt productive in the moment.&lt;/p&gt;

&lt;p&gt;This post is a honest breakdown of my 7-day reset, what actually hurt, what helped, and what I’m keeping long term.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I mean by “dopamine detox”
&lt;/h2&gt;

&lt;p&gt;I’m not claiming you can “remove dopamine” or that dopamine is the enemy.&lt;/p&gt;

&lt;p&gt;For me, “dopamine detox” means reducing high-stimulation, variable-reward inputs during the hours I want focus, so deep work doesn’t feel unbearable.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://dev.to/yusuf_yonturk/how-dopamine-detox-made-me-a-better-developer-151"&gt;Dopamine Detox&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In practice that meant:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No infinite feeds during my focus window.&lt;/li&gt;
&lt;li&gt;No “just one quick check” loops.&lt;/li&gt;
&lt;li&gt;Less novelty on demand.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The setup (so this was realistic)
&lt;/h2&gt;

&lt;p&gt;I didn’t do monk mode. I didn’t disappear for a week.&lt;/p&gt;

&lt;p&gt;I set one daily focus window: 90 minutes. That was the only non-negotiable.&lt;br&gt;
Outside of that window, I lived normally.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhile679ev4bpyq8k7ggm.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhile679ev4bpyq8k7ggm.png" alt="rules for dopamine detox" width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;My rules during the focus window:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Phone out of reach.&lt;/li&gt;
&lt;li&gt;Notifications off.&lt;/li&gt;
&lt;li&gt;No social feeds.&lt;/li&gt;
&lt;li&gt;No random browsing unless it truly blocked the task.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Day 1–2: The first surprise
&lt;/h2&gt;

&lt;p&gt;Day 1 felt easy because it was new.&lt;/p&gt;

&lt;p&gt;Day 2 is where the bargaining started.&lt;/p&gt;

&lt;p&gt;Without the phone, I expected “focus.” Instead I got friction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starting felt heavier.&lt;/li&gt;
&lt;li&gt;Boredom felt louder.&lt;/li&gt;
&lt;li&gt;My brain tried to escape without calling it escape.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That’s when I realized I wasn’t addicted to my phone.&lt;br&gt;
I was addicted to relief.&lt;/p&gt;

&lt;h2&gt;
  
  
  The hardest part (what I didn’t expect)
&lt;/h2&gt;

&lt;p&gt;The hardest part was staying with discomfort long enough for it to pass.&lt;/p&gt;

&lt;p&gt;Not the big discomfort. The tiny one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“This is unclear.”&lt;/li&gt;
&lt;li&gt;“I might do this wrong.”&lt;/li&gt;
&lt;li&gt;“This is boring.”&lt;/li&gt;
&lt;li&gt;“I don’t know the next step.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That tiny discomfort is where I used to context switch.&lt;br&gt;
And context switching was the real “dopamine hit” for me: a new tab, a new idea, a new micro-task, a new reset.&lt;/p&gt;

&lt;h2&gt;
  
  
  What actually worked (my simple system)
&lt;/h2&gt;

&lt;p&gt;I used a very small system that doesn’t require motivation.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhkmvoxpfu76qb9wja1x.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fjhkmvoxpfu76qb9wja1x.png" alt="Pixel art, isometric view of the developer's desk, the cute character is typing on the keyboard, on the monitor there is a single window open, on the left of the monitor there is a sticky note saying " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  1) Define the next action before you start
&lt;/h3&gt;

&lt;p&gt;Before the 90-minute window, I wrote one sentence:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“In this session I will…”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Fix the failing test and push the patch.”&lt;/li&gt;
&lt;li&gt;“Write the outline and the intro paragraph.”&lt;/li&gt;
&lt;li&gt;“Implement the endpoint and cover the happy path.”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If the next step isn’t clear, the brain will find a distraction to avoid that uncertainty.&lt;/p&gt;

&lt;h3&gt;
  
  
  2) Use an “urge list” instead of willpower
&lt;/h3&gt;

&lt;p&gt;When I felt the urge to switch tasks, I wrote it down on a note:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Check X”&lt;/li&gt;
&lt;li&gt;“Look up Y”&lt;/li&gt;
&lt;li&gt;“Reply to Z”&lt;/li&gt;
&lt;li&gt;“Refactor A”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Then I told myself: not now. After the block.&lt;/p&gt;

&lt;p&gt;Most urges didn’t survive 20 minutes.&lt;br&gt;
They just wanted attention.&lt;/p&gt;

&lt;h3&gt;
  
  
  3) One tab rule for research
&lt;/h3&gt;

&lt;p&gt;Research is a legit need for developers, but it’s also a trap.&lt;/p&gt;

&lt;p&gt;If I truly needed info:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Open one tab.&lt;/li&gt;
&lt;li&gt;Get the answer.&lt;/li&gt;
&lt;li&gt;Close it.&lt;/li&gt;
&lt;li&gt;Return to the task.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No branching into 10 tabs. No “while I’m here…”&lt;/p&gt;

&lt;h3&gt;
  
  
  4) End the session with a clean landing
&lt;/h3&gt;

&lt;p&gt;At the end of the 90 minutes I wrote:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What I finished.&lt;/li&gt;
&lt;li&gt;What the next step is tomorrow.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This reduced the “starting pain” the next day, which reduced my need to escape.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2jpcsabfeppzitmolvo.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ff2jpcsabfeppzitmolvo.png" alt="Pixel art, over-the-shoulder view of the cute beanie character looking at his monitor. The screen shows code, but a large, tempting, glowing pixelated cursor is hovering dangerously over a browser tab icon labeled " width="800" height="350"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed by Day 6–7
&lt;/h2&gt;

&lt;p&gt;By the end of the week:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Starting became easier.&lt;/li&gt;
&lt;li&gt;I could stay on one task longer.&lt;/li&gt;
&lt;li&gt;I felt less mentally scattered at the end of the day.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The most important change wasn’t “more work done.”&lt;br&gt;
It was feeling like I was driving again, not just reacting.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I’m keeping long term
&lt;/h2&gt;

&lt;p&gt;I’m not keeping a strict detox forever.&lt;/p&gt;

&lt;p&gt;I’m keeping:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;One daily focus window.&lt;/li&gt;
&lt;li&gt;Phone out of reach during it.&lt;/li&gt;
&lt;li&gt;The urge list.&lt;/li&gt;
&lt;li&gt;Clear next action before starting.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Simple, repeatable, boring. That’s the point.&lt;/p&gt;

&lt;p&gt;My biggest trap was “just one quick tab.” What’s yours?&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>mentalhealth</category>
      <category>discuss</category>
      <category>devlife</category>
    </item>
    <item>
      <title>How Dopamine Detox Made Me a Better Developer</title>
      <dc:creator>yusuf yonturk</dc:creator>
      <pubDate>Fri, 26 Dec 2025 15:05:32 +0000</pubDate>
      <link>https://dev.to/yusuf_yonturk/how-dopamine-detox-made-me-a-better-developer-151</link>
      <guid>https://dev.to/yusuf_yonturk/how-dopamine-detox-made-me-a-better-developer-151</guid>
      <description>&lt;p&gt;A lot of “dopamine detox” advice sounds like it was written for someone who doesn’t ship code, doesn’t have deadlines, and can disappear for a week.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;That’s not most of us.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;I’m a software engineer, but I’m writing this for developers who feel stuck in the loop: you open your laptop to build, and somehow you end up scrolling, context-switching, or “just checking one thing” until the day is gone.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrvplw0ofifx1ks6x9dt.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fhrvplw0ofifx1ks6x9dt.png" alt="dopamine detox for developers" width="800" height="261"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This isn’t a purity challenge. It’s a reset you can do while still working.&lt;/p&gt;

&lt;h2&gt;
  
  
  First: what I mean by “dopamine detox”
&lt;/h2&gt;

&lt;p&gt;I’m not claiming you can (or should) “remove dopamine.” Dopamine is part of how motivation and learning work.&lt;/p&gt;

&lt;p&gt;What I mean is simpler: you reduce the constant high-stimulation inputs that train your brain to expect instant reward, so deep work stops feeling painfully boring.&lt;/p&gt;

&lt;p&gt;For developers, the biggest culprits usually aren’t parties and sugar. It’s this combo:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Infinite feeds&lt;/strong&gt; (short video, social timelines, news)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Fast novelty&lt;/strong&gt; (tabs, Slack, notifications, “quick research”)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Micro-rewards&lt;/strong&gt; (checking analytics, GitHub, email, DMs)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  The rule that makes this workable
&lt;/h2&gt;

&lt;p&gt;You don’t need to remove fun. You need to remove &lt;em&gt;random&lt;/em&gt; fun during the hours you want focus.&lt;/p&gt;

&lt;p&gt;So we use one rule for 7 days:&lt;br&gt;
&lt;strong&gt;During your chosen “focus window,” no variable-reward apps.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;That means: no social feeds, no short videos, no news, no doom-scrolling. Outside the window, you can still live your life.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 7-day plan
&lt;/h2&gt;

&lt;p&gt;Pick a daily focus window you can actually keep. Start with &lt;strong&gt;60 to 120 minutes&lt;/strong&gt; depending on your schedule. If your day is chaotic, stick to 60.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 1: Baseline + one focus window
&lt;/h3&gt;

&lt;p&gt;Today is measurement, not discipline theater.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Choose a focus window (same time tomorrow, if possible).&lt;/li&gt;
&lt;li&gt; Turn off non-essential notifications on phone and desktop.&lt;/li&gt;
&lt;li&gt; Write down your “default escape apps” (be honest).&lt;/li&gt;
&lt;li&gt; At the end of the day, answer one question: &lt;em&gt;“When I avoided work today, what was I avoiding?”&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;h3&gt;
  
  
  Day 2: Replace the trigger, not just the app
&lt;/h3&gt;

&lt;p&gt;Most scrolling starts from a trigger: friction, confusion, or boredom.&lt;br&gt;
Before your focus window, prepare a tiny “next action” so you don’t open a tab to figure out what to do.&lt;/p&gt;

&lt;p&gt;Examples:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;“Open repo → run tests → fix failing test”&lt;/li&gt;
&lt;li&gt;“Write function signature + TODO list”&lt;/li&gt;
&lt;li&gt;“Draft 5 bullet points for the article intro”&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you sit down and the first step is unclear, your brain will negotiate its way to YouTube.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 3: Make distraction harder (2-minute setup)
&lt;/h3&gt;

&lt;p&gt;Use friction like a tool.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Log out of social apps on desktop.&lt;/li&gt;
&lt;li&gt;Remove the apps from your phone’s home screen.&lt;/li&gt;
&lt;li&gt;Put your phone in another room during the focus window.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This isn’t about willpower. It’s about reducing the “oops, I’m here again” moments.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 4: Introduce “boring on purpose” breaks
&lt;/h3&gt;

&lt;p&gt;When you remove high-stim inputs, your brain will demand a replacement. Give it a boring one.&lt;br&gt;
During breaks, choose one:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A short walk&lt;/li&gt;
&lt;li&gt;Stretching&lt;/li&gt;
&lt;li&gt;Tea/coffee without a screen&lt;/li&gt;
&lt;li&gt;Staring out the window (seriously)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The point is to let your attention settle instead of re-spiking it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 5: Build a focus ritual you can repeat
&lt;/h3&gt;

&lt;p&gt;Make the start of deep work automatic. My minimal ritual:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Clear desk (takes 30 seconds).&lt;/li&gt;
&lt;li&gt; Put headphones on.&lt;/li&gt;
&lt;li&gt; Open only the tools I need (IDE + one doc).&lt;/li&gt;
&lt;li&gt; Set a timer for 45 minutes.&lt;/li&gt;
&lt;li&gt; Then I write a one-line intention in a note: &lt;em&gt;“In this session I will…”&lt;/em&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;You’re teaching your brain: “This is what focus feels like.”&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 6: Add a “no context switching” rule
&lt;/h3&gt;

&lt;p&gt;This is the day most developers notice a difference.&lt;br&gt;
During your focus window:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No Slack/Teams.&lt;/li&gt;
&lt;li&gt;No email.&lt;/li&gt;
&lt;li&gt;No “quick look” at GitHub/Twitter/Reddit.&lt;/li&gt;
&lt;li&gt;No browsing “just to confirm something” unless it blocks you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you truly need to research, do it intentionally: open one tab, get the answer, close it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Day 7: Keep the gains (without becoming extreme)
&lt;/h3&gt;

&lt;p&gt;You’re not trying to live like this forever. You’re trying to reclaim choice.&lt;br&gt;
Pick your long-term settings:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep one daily focus window as a non-negotiable.&lt;/li&gt;
&lt;li&gt;Keep notifications off by default.&lt;/li&gt;
&lt;li&gt;Schedule “scroll time” like dessert, not like breathing.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  What changes you should expect (and what’s normal)
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Day 2–3:&lt;/strong&gt; Focus feels harder, boredom feels louder. That’s normal.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 4–5:&lt;/strong&gt; You start noticing you can “stay with the problem” longer.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Day 6–7:&lt;/strong&gt; You get a weird moment of clarity: you realize how often you were escaping the smallest discomfort.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Also normal: you’ll fail a day. Don’t restart. Continue. The goal is &lt;strong&gt;trend&lt;/strong&gt;, not perfection.&lt;/p&gt;

&lt;h2&gt;
  
  
  A practical “developer” metric
&lt;/h2&gt;

&lt;p&gt;If you like measurable stuff, track one number for 7 days:&lt;br&gt;
&lt;strong&gt;How many times did I context switch during my focus window?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A context switch is any of these:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt; Opening a feed&lt;/li&gt;
&lt;li&gt; Checking messages&lt;/li&gt;
&lt;li&gt; Switching tasks without finishing the current step&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Try to reduce that number, not eliminate it.&lt;/p&gt;




&lt;h3&gt;
  
  
  I’m curious about your version of this problem
&lt;/h3&gt;

&lt;p&gt;What’s your #1 distraction when you sit down to code? Or if you’ve tried anything like a dopamine detox before: what actually worked, and what was nonsense?&lt;/p&gt;

&lt;p&gt;Let’s discuss in the comments 👇&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>mentalhealth</category>
      <category>devlife</category>
      <category>discuss</category>
    </item>
    <item>
      <title>Why I Cache External API Data Instead of Calling It Every Time</title>
      <dc:creator>yusuf yonturk</dc:creator>
      <pubDate>Thu, 25 Dec 2025 02:53:19 +0000</pubDate>
      <link>https://dev.to/yusuf_yonturk/why-i-cache-external-api-data-instead-of-calling-it-every-time-5cc4</link>
      <guid>https://dev.to/yusuf_yonturk/why-i-cache-external-api-data-instead-of-calling-it-every-time-5cc4</guid>
      <description>&lt;p&gt;Calling external APIs directly feels clean... until your system hits real traffic.&lt;br&gt;
When I first started integrating external APIs into my projects, my approach was simple:&lt;/p&gt;

&lt;p&gt;Need data?&lt;br&gt;
Call the API.&lt;/p&gt;

&lt;p&gt;It felt clean, logical, and completely fine.&lt;br&gt;
Until real usage hit.&lt;/p&gt;


&lt;h2&gt;
  
  
  The naive approach (what I did first)
&lt;/h2&gt;

&lt;p&gt;The initial setup looked like this:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Client
↓
API Gateway
↓
External API
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Every request triggered:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a fresh API call
&lt;/li&gt;
&lt;li&gt;a network round-trip
&lt;/li&gt;
&lt;li&gt;dependency on someone else’s uptime
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For low traffic, this felt clean and straightforward.&lt;/p&gt;

&lt;p&gt;But real usage exposed the cracks very quickly.&lt;/p&gt;




&lt;h2&gt;
  
  
  What went wrong
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Cost scales faster than traffic
&lt;/h3&gt;

&lt;p&gt;Many APIs charge per request.&lt;/p&gt;

&lt;p&gt;What looks cheap at first becomes expensive once background jobs, retries, and traffic spikes enter the picture.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  2. Rate limits become architecture limits
&lt;/h3&gt;

&lt;p&gt;Once you hit rate limits:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;features fail
&lt;/li&gt;
&lt;li&gt;errors propagate
&lt;/li&gt;
&lt;li&gt;defensive code spreads everywhere
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Your system starts being shaped by someone else’s rules.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;h3&gt;
  
  
  3. Latency adds up
&lt;/h3&gt;

&lt;p&gt;Even fast external APIs are:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;network-bound
&lt;/li&gt;
&lt;li&gt;unpredictable
&lt;/li&gt;
&lt;li&gt;outside your control
&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  The shift: treat APIs as data sources, not live dependencies
&lt;/h2&gt;

&lt;p&gt;Instead of calling the external API on demand, I switched to this model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Worker / Cron
↓
External API
↓
Database

Client
↓
API Gateway
↓
Backend Service
↓
Database

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;External APIs are called periodically.&lt;br&gt;&lt;br&gt;
The application reads from the database.("not the API")&lt;/p&gt;




&lt;h2&gt;
  
  
  What I gained
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Predictable costs
&lt;/h3&gt;

&lt;p&gt;No surprise bills. No hidden usage spikes. Just controlled API consumption.&lt;/p&gt;

&lt;h3&gt;
  
  
  2. Faster responses
&lt;/h3&gt;

&lt;p&gt;Database reads are faster and easier to optimize.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Isolation from external failures
&lt;/h3&gt;

&lt;p&gt;If the API goes down, my system keeps working with the last known good data.&lt;/p&gt;




&lt;h2&gt;
  
  
  But doesn’t data get stale?
&lt;/h2&gt;

&lt;p&gt;Yes... and that’s the point.&lt;/p&gt;

&lt;p&gt;The real question is not &lt;em&gt;“Is the data fresh?”&lt;/em&gt;&lt;br&gt;&lt;br&gt;
It’s &lt;em&gt;“How fresh does it need to be?”&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Freshness is a business decision, not a reflex.&lt;/p&gt;

&lt;p&gt; &lt;/p&gt;

&lt;p&gt;
  When direct API calls actually make sense
  &lt;ul&gt;
&lt;li&gt;Real-time financial transactions
&lt;/li&gt;
&lt;li&gt;Authentication &amp;amp; authorization
&lt;/li&gt;
&lt;li&gt;User-triggered actions where freshness is critical
&lt;/li&gt;
&lt;/ul&gt;




&lt;/p&gt;
&lt;p&gt; &lt;/p&gt;

&lt;p&gt;Since then, I’ve been much more intentional about when an external API is part of the request path and when it shouldn’t be.&lt;/p&gt;

&lt;p&gt;That single change has simplified more architectural decisions than any framework ever did.&lt;/p&gt;

</description>
      <category>backend</category>
      <category>api</category>
      <category>architecture</category>
      <category>performance</category>
    </item>
  </channel>
</rss>
