<?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[Jiyo's Dev Journal]]></title><description><![CDATA[Sharing my seven years software engineering journey @ IRRI — the lessons and mistakes I’ve learned along the way]]></description><link>https://www.codewithjiyo.com</link><image><url>https://substackcdn.com/image/fetch/$s_!OQ5i!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F51d42bb0-4b3a-4098-bf8e-c03ea9f864eb_1080x1080.png</url><title>Jiyo&apos;s Dev Journal</title><link>https://www.codewithjiyo.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 21 Apr 2026 09:33:09 GMT</lastBuildDate><atom:link href="https://www.codewithjiyo.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Jiyo Pagtananan]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[codewithjiyo@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[codewithjiyo@substack.com]]></itunes:email><itunes:name><![CDATA[Jiyo Pagtananan]]></itunes:name></itunes:owner><itunes:author><![CDATA[Jiyo Pagtananan]]></itunes:author><googleplay:owner><![CDATA[codewithjiyo@substack.com]]></googleplay:owner><googleplay:email><![CDATA[codewithjiyo@substack.com]]></googleplay:email><googleplay:author><![CDATA[Jiyo Pagtananan]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[AI Tools, Models, and Agents: The Missing Layer Most People Don’t Understand]]></title><description><![CDATA[A clear breakdown of how modern AI really works&#8212;from chat interfaces and LLMs to autonomous agents and multi-step systems that power real automation.]]></description><link>https://www.codewithjiyo.com/p/ai-tools-models-and-agents-the-missing</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/ai-tools-models-and-agents-the-missing</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Mon, 13 Apr 2026 11:01:07 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RpkP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png" 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_!RpkP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RpkP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 424w, https://substackcdn.com/image/fetch/$s_!RpkP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 848w, https://substackcdn.com/image/fetch/$s_!RpkP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 1272w, https://substackcdn.com/image/fetch/$s_!RpkP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RpkP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png" width="1024" height="960" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:960,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2835868,&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://www.codewithjiyo.com/i/193943891?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.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_!RpkP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 424w, https://substackcdn.com/image/fetch/$s_!RpkP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 848w, https://substackcdn.com/image/fetch/$s_!RpkP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.png 1272w, https://substackcdn.com/image/fetch/$s_!RpkP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4ba96f1b-2da5-400d-afba-d675ee80d1ae_1024x960.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></figure></div><h1>AI Tools, Models, and Agents Explained</h1><p>Most people use AI without really understanding what&#8217;s happening under the hood.</p><p>You type something into ChatGPT or Claude, get a response, and move on.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>But underneath that simple chat box are three very different layers of intelligence: <strong>AI tools, models, and agents</strong>.</p><p>Let&#8217;s break them down clearly.</p><div><hr></div><h1>AI Tools: The Chat Layer</h1><p>AI tools like ChatGPT and Claude are what users directly interact with.</p><p>They are designed with a simple interface: a chat box.</p><p>At the core of these tools is a <strong>large language model (LLM)</strong> &#8212; the actual &#8220;brain&#8221; generating responses.</p><p>But there&#8217;s an important limitation:</p><blockquote><p>These systems are fundamentally stateless.</p></blockquote><p>This means every message is processed independently. The model does not naturally remember past conversations.</p><p>So the interaction looks like this:</p><p>You ask &#8594; it answers<br>You ask again &#8594; it answers again<br>You repeat &#8594; it responds again</p><p>Each response is generated <strong>from scratch</strong>.</p><div><hr></div><h1>Why Memory Changed Everything</h1><p>To solve this limitation, AI systems introduced <strong>memory layers</strong>.</p><p>Memory allows the system to:</p><ul><li><p>Store previous context</p></li><li><p>Remember user preferences</p></li><li><p>Connect past and present conversations</p></li></ul><p>With memory, conversations feel continuous instead of disconnected.</p><p>Without it, every message feels like starting over.</p><div><hr></div><h1>What AI Tools Are Good At</h1><p>AI tools are powerful, but they are best used for <strong>interactive exploration</strong>, such as:</p><ul><li><p>Writing code</p></li><li><p>Generating ideas</p></li><li><p>Creating documents</p></li><li><p>Testing concepts</p></li></ul><p>This workflow has led to a new behavior known as <strong>&#8220;vibe coding&#8221;</strong>.</p><p>A typical pattern looks like this:</p><p>You prompt &#8594; you review &#8594; you copy &#8594; you refine &#8594; you repeat</p><p>It&#8217;s fast, flexible, and creative &#8212; but heavily dependent on the user.</p><p>Because ultimately:</p><blockquote><p>You are the orchestrator, not the system.</p></blockquote><div><hr></div><h1>The Limitation of AI Tools</h1><p>AI tools don&#8217;t complete workflows &#8212; they assist them.</p><p>That means:</p><ul><li><p>You decide what to ask</p></li><li><p>You validate outputs</p></li><li><p>You connect the pieces</p></li></ul><p>They are powerful assistants, but not autonomous systems.</p><div><hr></div><h1>Subscription Models: UI vs API</h1><p>AI systems are delivered in two main ways.</p><h2>1. UI Subscriptions (For Users)</h2><p>These are the tools people interact with directly.</p><p>Examples include:</p><ul><li><p>ChatGPT (Free, Plus, Pro)</p></li><li><p>Claude (Free, Pro, Max)</p></li></ul><p>These are designed for:</p><ul><li><p>Writing</p></li><li><p>Thinking</p></li><li><p>Learning</p></li><li><p>General productivity</p></li></ul><div><hr></div><h2>2. API Subscriptions (For Builders)</h2><p>APIs are designed for developers building systems.</p><p>They are used to create:</p><ul><li><p>AI agents</p></li><li><p>Automation workflows</p></li><li><p>Backend systems</p></li></ul><p>Instead of chatting, you program the model.</p><div><hr></div><h1>AI Models: Different Brains for Different Tasks</h1><p>Not all models are the same. Each is optimized for a specific tradeoff between speed, cost, and intelligence.</p><h2>OpenAI-style model tiers</h2><ul><li><p><strong>Pro models</strong> &#8594; strongest reasoning, slow and expensive</p></li><li><p><strong>Base models</strong> &#8594; balanced performance</p></li><li><p><strong>Mini models</strong> &#8594; faster and cost-efficient</p></li><li><p><strong>Nano models</strong> &#8594; ultra-cheap, high-volume tasks</p></li></ul><p>Additional specialized models exist for:</p><ul><li><p>Image generation</p></li><li><p>Audio processing</p></li><li><p>Video generation</p></li><li><p>Deep research</p></li><li><p>Coding</p></li></ul><div><hr></div><h2>Anthropic Model Family</h2><ul><li><p><strong>Opus</strong> &#8594; most powerful reasoning</p></li><li><p><strong>Sonnet</strong> &#8594; balanced performance</p></li><li><p><strong>Haiku</strong> &#8594; fast and lightweight</p></li></ul><div><hr></div><p>Choosing the right model is not just technical &#8212; it directly impacts cost, speed, and quality.</p><div><hr></div><h1>AI Agents: From Tools to Systems</h1><p>AI agents are where things become fundamentally different.</p><p>An AI agent is:</p><blockquote><p>A system that can think, plan, and act autonomously toward a goal.</p></blockquote><p>Instead of responding to single prompts, it operates in multiple steps:</p><ul><li><p>Understands the goal</p></li><li><p>Plans actions</p></li><li><p>Uses tools</p></li><li><p>Executes tasks</p></li><li><p>Adjusts based on results</p></li></ul><p>You give it:</p><ul><li><p>A goal</p></li><li><p>Access to tools</p></li><li><p>A reasoning model</p></li></ul><p>And it handles the execution.</p><div><hr></div><h1>What Tools AI Agents Can Use</h1><p>AI agents become powerful when connected to external systems like:</p><ul><li><p>Google Sheets &#8594; manage structured data</p></li><li><p>Gmail &#8594; send emails</p></li><li><p>Slack &#8594; notify teams</p></li></ul><p>This turns AI from a chat assistant into an operational system.</p><div><hr></div><h1>System Prompts vs User Prompts</h1><p>There are two ways to control AI behavior:</p><h2>User Prompts (AI Tools)</h2><p>You give instructions directly:</p><ul><li><p>&#8220;Write this&#8221;</p></li><li><p>&#8220;Generate that&#8221;</p></li><li><p>&#8220;Explain this&#8221;</p></li></ul><h2>System Prompts (AI Agents)</h2><p>You define behavior rules:</p><ul><li><p>How the agent thinks</p></li><li><p>How it uses tools</p></li><li><p>What constraints it follows</p></li></ul><p>System prompts are powerful &#8212; but fragile.</p><ul><li><p>Too strict &#8594; the agent breaks or fails tasks</p></li><li><p>Too loose &#8594; the agent becomes unpredictable</p></li></ul><p>The balance defines whether an AI agent is useful or unreliable.</p><div><hr></div><h1>Multi-Agent Systems</h1><p>Once you go beyond a single agent, you enter multi-agent systems.</p><p>This is simply:</p><blockquote><p>Multiple AI agents working together as a system.</p></blockquote><p>Each agent may have:</p><ul><li><p>A specific role</p></li><li><p>A specific toolset</p></li><li><p>A specific objective</p></li></ul><p>Together, they form a coordinated intelligence layer capable of handling complex workflows.</p><div><hr></div><h1>Final Thought</h1><p>AI is not one thing.</p><p>It is a layered system:</p><ul><li><p>Tools &#8594; interaction layer</p></li><li><p>Models &#8594; intelligence layer</p></li><li><p>Agents &#8594; execution layer</p></li></ul><p>Understanding this separation is the key to building real AI systems &#8212; not just using chatbots.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[Connecting the Dots After 7 Years]]></title><description><![CDATA[How software engineering, automation, and AI finally made sense to me]]></description><link>https://www.codewithjiyo.com/p/connecting-the-dots-after-7-years</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/connecting-the-dots-after-7-years</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Wed, 08 Apr 2026 15:34:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!tmIA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.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_!tmIA!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!tmIA!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tmIA!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tmIA!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tmIA!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!tmIA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:179661,&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;:&quot;https://www.codewithjiyo.com/i/193584376?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!tmIA!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!tmIA!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!tmIA!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!tmIA!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F60d6dad3-02e3-4858-a816-e1a7c430f1ef_1920x1080.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></figure></div><p>After 7 years, I was finally able to connect the dots.</p><p>Between being a software engineer, using automation tools, and now working with AI.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>At first, they felt like completely different worlds.<br>Now, they feel like different layers of the same idea.</p><div><hr></div><h3>What Software Engineering Really Is</h3><p>Software engineering shines when you&#8217;re building highly customized applications.</p><p>You handle everything:</p><ul><li><p>The UI</p></li><li><p>The APIs</p></li><li><p>The database</p></li><li><p>The infrastructure</p></li><li><p>The internal logic</p></li></ul><p>Every part is tightly coupled and manually built.</p><p>You write the code.<br>You call APIs using HTTP libraries.<br>You design how everything connects.</p><p>It&#8217;s deep, detailed, and built for technical control.</p><div><hr></div><h3>What Automation Taught Me</h3><p>When I started learning automation tools, I noticed something familiar.</p><p>At the core, both software engineering and automation are about workflows.</p><p>But automation operates at a higher level.</p><p>If software engineering is embedded and deeply connected, automation is abstracted, reusable, and decoupled.</p><p>Instead of building components from scratch, you connect them.</p><p>Each piece exposes an input and an output.<br>The internal complexity is hidden.</p><p>It becomes plug and play.</p><p>You don&#8217;t need to code.<br>And more importantly, it&#8217;s designed for reuse by non-technical users.</p><div><hr></div><h3>AI in Both Worlds</h3><p>The difference becomes even clearer with AI.</p><p>In software engineering, integrating AI means setting up everything:</p><ul><li><p>A server</p></li><li><p>A framework like FastAPI</p></li><li><p>The model through a Python package</p></li></ul><p>In automation tools, AI is already there.</p><p>You just use a node.<br>Connect it.<br>And it works.</p><div><hr></div><h3>A Shift in Perspective</h3><p>Learning tools like n8n changed how I see software engineering.</p><p>Many of the things I struggled to build manually already exist in automation tools, just packaged differently.</p><p>It made me realize that what I&#8217;ve been doing in software engineering is often the lower-level version of what automation tools simplify.</p><div><hr></div><h3>Where Automation Falls Short</h3><p>But automation isn&#8217;t a replacement.</p><p>It has limits.</p><p>It lacks rich UI, fine-grained performance control, and support for highly specific use cases.</p><p>Most automation flows are linear: trigger to result.</p><p>Software engineering, on the other hand, supports multiple touchpoints:</p><p>Different interfaces.<br>Different workflows.<br>Different user interactions.</p><p>It&#8217;s not just backend. It&#8217;s a full system.</p><div><hr></div><h3>What I Realized</h3><p>Software engineering gives you control, flexibility, and granularity.<br>It&#8217;s built for complex and large-scale use cases.</p><p>Automation tools give you speed, simplicity, and focus.<br>They&#8217;re perfect for smaller, well-defined problems.</p><div><hr></div><h3>Final Thought</h3><p>Understanding both changed how I approach problems.</p><p>I no longer default to building everything from scratch.<br>And I don&#8217;t assume automation can solve everything.</p><p>The real skill is knowing when to use each.</p><p>That&#8217;s what makes the difference.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[How Software Engineers Fit Into a Business System]]></title><description><![CDATA[Every business runs on systems. Engineers build the part that runs itself]]></description><link>https://www.codewithjiyo.com/p/how-software-engineers-fit-into-a</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/how-software-engineers-fit-into-a</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sun, 05 Apr 2026 12:50:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!i9B-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.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_!i9B-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!i9B-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i9B-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i9B-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i9B-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!i9B-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:457284,&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;:&quot;https://www.codewithjiyo.com/i/193229492?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!i9B-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!i9B-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!i9B-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!i9B-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F679b785a-3774-4d09-b9d2-cbd79d20b04c_1920x1080.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></figure></div><p>A business runs on <strong>systems</strong>.</p><p>A system is just a set of <strong>processes</strong>.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>And every process is made of <strong>activities</strong>.</p><div><hr></div><h2>Activities Inside a Process</h2><p>Each activity needs to be executed.</p><p>There are only two ways it happens:</p><ul><li><p>A human does it</p></li><li><p>A system does it</p></li></ul><p>That&#8217;s it.</p><div><hr></div><h2>Human-Executed Activities</h2><p>Some activities require people:</p><ul><li><p>Making decisions</p></li><li><p>Handling exceptions</p></li><li><p>Communicating with customers</p></li></ul><p>Humans bring:</p><ul><li><p>Judgment</p></li><li><p>Context</p></li><li><p>Flexibility</p></li></ul><p>But they also have limits:</p><ul><li><p>They get tired</p></li><li><p>They make mistakes</p></li><li><p>They cannot scale infinitely</p></li></ul><div><hr></div><h2>Software-Executed Activities</h2><p>Other activities are better handled by software:</p><ul><li><p>Validating data</p></li><li><p>Processing transactions</p></li><li><p>Sending notifications</p></li><li><p>Running workflows</p></li></ul><p>Software brings:</p><ul><li><p>Speed</p></li><li><p>Consistency</p></li><li><p>Scalability</p></li></ul><p>It executes the same way every time.</p><div><hr></div><h2>Why Businesses Move Work to Software</h2><p>The goal isn&#8217;t just automation. It&#8217;s leverage.</p><p>One employee validates 50 sign-ups per hour. Eight hours a day. That&#8217;s 400 validations at $200 in daily labor cost.</p><p>Replace that with software. Now you&#8217;re processing 10,000 sign-ups per hour. Around the clock. No added cost per validation.</p><p>That&#8217;s a 25x increase in output. Same or lower spend.</p><p>You define the work once. The system runs it indefinitely.</p><div><hr></div><h2>The Split</h2><p>So every business system becomes a mix:</p><ul><li><p>Humans handle what requires thinking</p></li><li><p>Software handles what requires repetition</p></li></ul><p>The goal is simple:</p><p><strong>Move repeatable work to software.</strong></p><p>Not to replace humans</p><p>but to free them from work that does not require thinking.</p><div><hr></div><h2>Where Software Comes From</h2><p>Software does not appear on its own.</p><p>It is built.</p><p>By software engineers.</p><div><hr></div><h2>The Role of the Software Engineer</h2><p>A software engineer takes a business process</p><p>and turns parts of it into software.</p><p>They:</p><ul><li><p>Identify repeatable activities</p></li><li><p>Define rules for those activities</p></li><li><p>Translate them into code</p></li></ul><p>So instead of a human doing the work</p><p>the system does it.</p><div><hr></div><h2>Example</h2><p>Process:</p><ul><li><p>User signs up</p></li><li><p>Data is checked</p></li><li><p>Account is created</p></li><li><p>Email is sent</p></li></ul><p>Execution:</p><ul><li><p>User input &#8594; human</p></li><li><p>Validation &#8594; software</p></li><li><p>Account creation &#8594; software</p></li><li><p>Email &#8594; software</p></li></ul><p>One process.</p><p>Mixed execution.</p><div><hr></div><h2>The Real Responsibility</h2><p>Software engineers are not just coders.</p><p>They decide:</p><ul><li><p>What should be automated</p></li><li><p>What should remain human</p></li><li><p>How the system behaves</p></li></ul><p>They shape how the business runs.</p><div><hr></div><h2>The Direction of Change</h2><p>Over time, more activities move to software.</p><p>Because software is:</p><ul><li><p>Faster</p></li><li><p>Cheaper</p></li><li><p>More reliable</p></li></ul><p>Now with AI</p><p>even more complex activities can be automated.</p><div><hr></div><h2>Final Thought</h2><p>A business system is a combination of execution:</p><ul><li><p>Humans for judgment</p></li><li><p>Software for repetition</p></li></ul><p>And software engineers?</p><p>They build the part of the system</p><p>that can run without humans.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[How To Set Up n8n Locally with PostgreSQL and Ngrok Using Docker]]></title><description><![CDATA[Test and expose your local n8n instance without deploying to a server]]></description><link>https://www.codewithjiyo.com/p/how-to-set-up-n8n-locally-with-postgresql</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/how-to-set-up-n8n-locally-with-postgresql</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sun, 05 Apr 2026 02:23:20 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!o6Jp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.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_!o6Jp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!o6Jp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o6Jp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o6Jp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o6Jp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!o6Jp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:115415,&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;:&quot;https://www.codewithjiyo.com/i/193219106?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!o6Jp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!o6Jp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!o6Jp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!o6Jp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8c69083a-830e-40f1-b202-0b43cd766aed_1920x1080.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></figure></div><p>Want to test webhooks locally without paying for hosting or domain name? </p><p>This setup lets you run n8n on your machine, connect it to PostgreSQL, and expose it to the internet using Ngrok in just a few steps.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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><h2>1. Download the Project Files</h2><p>Download and extract the <a href="https://drive.google.com/file/d/1ff1o2gl4XMM2xUpIz25epgt5V-B8F0uy/view?usp=sharing">ZIP file</a> containing the Docker setup.</p><h2>2. Create an Ngrok Account</h2><p><strong>A.</strong> Sign up at Ngrok<br><strong>B.</strong> Copy your auth token from the dashboard<br><strong>C.</strong> Add your auth token to the <code>docker-compose.yml</code> file:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">ngrok:
    image: ngrok/ngrok:latest
    container_name: ngrok
    command: http n8n:5678
    environment:
      - NGROK_AUTHTOKEN=XXXX
    ports:
      - "4040:4040"
    depends_on:
      - n8n
    restart: always</code></pre></div><p>Ngrok provides a free way to expose your local services to the internet.</p><h2>4. Start the Services</h2><p>Run the following command:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker-compose up -d</code></pre></div><p>This starts four services: n8n, n8n-runner, PostgreSQL, and Ngrok.</p><h2>5. Access Ngrok Dashboard</h2><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">http://localhost:4040</code></pre></div><p>Go to the configuration section and look for a URL like:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">URL: https://abc123.ngrok.io</code></pre></div><p>This is your public URL</p><h2>6. Configure n8n Webhook URL (Important)</h2><p>Update the <code>WEBHOOK_URL</code> in your <code>docker-compose.yml</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"> n8n:
    image: docker.n8n.io/n8nio/n8n:${N8N_VERSION}
    restart: always
    environment:
      - ...
      - WEBHOOK_URL=https://abc123.ngrok.io
      - N8N_PUBLIC_URL=https://abc123.ngrok.io</code></pre></div><div><hr></div><p><em><strong>Updated:</strong> If </em><code>N8N_PUBLIC_URL</code><em> is not set, n8n generates the OAuth callback as </em><code>http://localhost:5678/...</code><em>, which the provider will reject. This means that signing up for Google Sheets, Gmail, Docs, Drive, or Calendar will fail even if the webhook URL is correct.</em></p><p><em>To test, access n8n using the <strong>ngrok public URL</strong>. Previously it did not work, but after setting the </em><code>N8N_PUBLIC_URL</code><em>, it now works correctly.</em></p><div><hr></div><p>Restart the services to apply changes:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker-compose up -d</code></pre></div><p>This allows external services such as Telegram or Slack to connect to your local n8n instance.</p><h2>7. Test webhook</h2><p>Create a Webhook node in n8n. Your endpoint will look like:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">https://abc123.ngrok.io/webhook/your-path</code></pre></div><p>You can test it using:</p><ul><li><p>Postman</p></li><li><p>Browser</p></li><li><p>External service (Stripe, Telegram, etc.)</p></li></ul><h3>&#9888;&#65039; Important Notes</h3><p>Free Ngrok URLs change every time the service restarts</p><p>You need to update WEBHOOK_URL each time the URL changes</p><p>For a fixed domain, use a paid Ngrok plan</p><h2>Conclusion</h2><p>You now have a working local setup for testing real webhooks. From here, you can start building and validating workflows before moving to production.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[25 Essential Documents Every High-Performing Dev Team Keeps]]></title><description><![CDATA[From onboarding to architecture, these guides, diagrams, and checklists keep teams aligned, productive, and moving fast]]></description><link>https://www.codewithjiyo.com/p/25-essential-documents-every-high</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/25-essential-documents-every-high</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Wed, 01 Apr 2026 03:05:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-Ac_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.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_!-Ac_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-Ac_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Ac_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Ac_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Ac_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-Ac_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:120657,&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;:&quot;https://www.codewithjiyo.com/i/192704643?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-Ac_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-Ac_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-Ac_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-Ac_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F66b01c4a-f3d7-463f-b264-a375ff91f411_1920x1080.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></figure></div><p>Ever joined a new dev team and had no idea where to start?</p><p>You&#8217;re not alone.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>The difference between a chaotic team and a high-performing one often comes down to documentation. The right documents don&#8217;t just inform&#8212;they accelerate onboarding, reduce confusion, and keep everyone aligned.</p><h2>Getting Started &amp; Daily Work</h2><h3>1. Local Development Setup</h3><p>Your first win: running the app locally.<br>A step-by-step guide to clone, install, and run the project.</p><h3>2. Repository Folder Structure</h3><p>No more &#8220;Where does this go?&#8221;<br>Defines how code is organized for easy navigation.</p><h3>3. Development Process</h3><p>From planning to release.<br>Explains sprints, ceremonies, and workflows.</p><h3>4. Board Workflow</h3><p>Your task tracking system explained.<br>Defines statuses, transitions, and WIP limits.</p><div><hr></div><h2>Collaboration &amp; Workflow</h2><h3>5. Git Branching Strategy</h3><p>Keeps your repo clean and predictable.<br>Defines branches, naming, commits, and PR flow.</p><h3>6. Ticket Guidelines</h3><p>Clear tickets = fewer misunderstandings.<br>Standardizes types, fields, and priorities.</p><h3>7. Slack Channels Guide</h3><p>Know where to post instantly.<br>Keeps communication structured.</p><h3>8. Roles and Responsibilities</h3><p>Who owns what?<br>Prevents overlap, delays, and confusion.</p><h3>9. Capabilities and Assignments</h3><p>Know the expert for each area.<br>Speeds up problem-solving and collaboration.</p><div><hr></div><h2>System Understanding</h2><h3>10. System Architecture</h3><p>The big picture of your system.<br>Shows how components connect.</p><h3>11. Architectural Decision</h3><p>Captures key design choices with context, options, rationale, and consequences.</p><p>Helps the team understand why decisions were made, trade-offs considered, and their impact on the system.</p><h3>12. Data Flow Diagram</h3><p>Tracks how data moves across the system.</p><h3>13. Swimlane Diagram</h3><p>Visualizes workflows across components (UI &#8594; API &#8594; DB &#8594; Queue &#8594; Worker).</p><h3>14. Entity Relationship Diagram (ERD)</h3><p>Explains database tables, columns, and relationships.</p><div><hr></div><h2>Database &amp; Infrastructure</h2><h3>15. Database Access Guide</h3><p>How to connect to local, dev, staging, and production environments.</p><h3>16. Database Backup &amp; Restoration</h3><p>How to safely back up and restore data.</p><h3>17. Database Management</h3><p>Covers fixtures, seed data, and schema handling.</p><div><hr></div><h2>Product &amp; Business Context</h2><h3>18. Business Rules</h3><p>Defines expected system behavior.<br>Helps distinguish bugs from intended logic.</p><h3>19. Feature List</h3><p>A prioritized list of all features.<br>Guides decision-making for cross-cutting work.</p><h3>20. Terminologies</h3><p>Defines domain-specific jargon (banking, commerce, etc.).<br>Ensures everyone speaks the same language.</p><div><hr></div><h2>Quality &amp; Consistency</h2><h3>21. Style Guide</h3><p>Standardizes UI/UX (colors, typography, spacing, components).<br>Prevents inconsistent design.</p><div><hr></div><h2>Delivery &amp; Planning</h2><h3>22. Blueprint (Roadmap)</h3><p>Your long-term vision (1&#8211;2 years).<br>Broken down into quarterly goals.</p><h3>23. Product Requirements Document (PRD)</h3><p>Defines short-term goals, requirements, stakeholders, and timelines.</p><h3>24. Release Checklist</h3><p>Avoid last-minute chaos.<br>Ensures all release steps are completed.</p><div><hr></div><h2>Support &amp; Stability</h2><h3>25. Troubleshooting Guide</h3><p>First line of defense for support teams.<br>Reduces unnecessary dev interruptions.</p><p></p><h2>Final Thought</h2><p>Great teams don&#8217;t just write code&#8212;they document how they think, build, and operate.</p><p>Because in the long run,</p><p>clarity scales better than talent.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[7 Common Ticket Writing Mistakes That Lead to Missed Deadlines (And How to Avoid Them)]]></title><description><![CDATA[Don&#8217;t let unclear tickets slow you down&#8212;spot these mistakes before they cost you time]]></description><link>https://www.codewithjiyo.com/p/7-ticket-anti-patterns-to-avoid</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/7-ticket-anti-patterns-to-avoid</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sat, 28 Mar 2026 08:14:03 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!BFif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.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_!BFif!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!BFif!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BFif!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BFif!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BFif!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!BFif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:171405,&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;:&quot;https://www.codewithjiyo.com/i/192384927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!BFif!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!BFif!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!BFif!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!BFif!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f3e7a57-c032-42dc-89dd-ffce1d17f0f0_1920x1080.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></figure></div><p>Struggling to complete tasks on time?</p><p>It&#8217;s often not about effort&#8212;it&#8217;s about <strong>how tickets are written</strong>. Poor tickets create confusion, delays, and unnecessary work.</p><p>Fix this, and you&#8217;ll deliver faster and build more trust with your team.</p><div><hr></div><h2>The Root Problem</h2><p>Every task goes through the same flow:</p><p><strong>Ticket &#8594; Planning &#8594; Designing &#8594; Development &#8594; Testing &#8594; Deployment &#8594; User</strong></p><p>If the ticket is unclear, the issue carries through every stage&#8212;leading to delays and wasted effort.</p><div><hr></div><h2>1. Vague Ticket</h2><p>A vague ticket lacks essential details, forcing the team to make assumptions.</p><h3>Fix:</h3><p>Make sure the ticket clearly answers:</p><ul><li><p>What problem are we solving?</p></li><li><p>Who is it for?</p></li><li><p>What does success look like?</p></li></ul><p>Use <strong>templates</strong> and gather details through discussions, research, and documentation.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!W-aj!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!W-aj!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!W-aj!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!W-aj!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!W-aj!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!W-aj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1004945,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codewithjiyo.com/i/192384927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!W-aj!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!W-aj!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!W-aj!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!W-aj!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5a98a98b-1349-4bc4-b427-84d3ed4ea296_3000x2000.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">Template for feature</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!-7Hh!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!-7Hh!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-7Hh!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-7Hh!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-7Hh!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!-7Hh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:768254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codewithjiyo.com/i/192384927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!-7Hh!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!-7Hh!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!-7Hh!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!-7Hh!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fecfa7879-cd28-4711-80ac-d8a7f749e634_3000x2000.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">Template for improvement</figcaption></figure></div><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!H_1j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!H_1j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H_1j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H_1j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H_1j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!H_1j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:516367,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codewithjiyo.com/i/192384927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!H_1j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!H_1j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!H_1j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!H_1j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4adb42af-28f5-41f8-99c7-71e33c2b0e92_3000x2000.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">Template for task</figcaption></figure></div><div><hr></div><h2>2. Oversized Ticket</h2><p>Large tickets are slow and hard to manage.</p><h3>Problems:</h3><ul><li><p>Slow development and reviews</p></li><li><p>Delayed feedback</p></li><li><p>Hard to estimate</p></li></ul><h3>Fix:</h3><p>Break work into small, independent tasks (1&#8211;2 days each).</p><div><hr></div><h2>3. Unplanned Ticket</h2><p>Tickets added mid-sprint disrupt priorities and timelines.</p><h3>Fix:</h3><ul><li><p>Plan thoroughly before the sprint</p></li><li><p>Push back on non-critical work</p></li><li><p>Leave buffer for unexpected tasks</p></li></ul><div><hr></div><h2>4. Untestable Ticket</h2><p>No clear acceptance criteria means no clear &#8220;done.&#8221;</p><h3>Fix:</h3><p>Write testable criteria:</p><ul><li><p><strong>Given</strong> a condition</p></li><li><p><strong>When</strong> an action occurs</p></li><li><p><strong>Then</strong> the expected result happens</p></li></ul><div><hr></div><h2>5. Undefined UI Ticket</h2><p>No design leads to misaligned expectations.</p><h3>Fix:</h3><p>Attach mockups or reference designs to the ticket.</p><div><hr></div><h2>6. Non-Reproducible Ticket</h2><p>Missing steps make bugs hard to verify and fix.</p><h3>Fix:</h3><p>Include:</p><ul><li><p>Steps to reproduce</p></li><li><p>Expected result</p></li><li><p>Actual result</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_!GTpP!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!GTpP!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GTpP!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GTpP!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GTpP!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!GTpP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:971,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:620080,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codewithjiyo.com/i/192384927?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!GTpP!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 424w, https://substackcdn.com/image/fetch/$s_!GTpP!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 848w, https://substackcdn.com/image/fetch/$s_!GTpP!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!GTpP!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F815594d2-5857-4d2f-8072-8f2da2f41122_3000x2000.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">Bug Template</figcaption></figure></div><div><hr></div><h2>7. Open-Ended Ticket</h2><p>No deadline leads to hidden delays.</p><h3>Fix:</h3><p>Set realistic deadlines and consider all current tasks before committing.</p><div><hr></div><h1>Key Takeaways</h1><ul><li><p>Delays are usually caused by <strong>unclear tickets, not lack of effort</strong></p></li><li><p>Clear tickets reduce rework and speed up delivery</p></li><li><p>Small, well-defined tasks are easier to complete and track</p></li></ul><p>&#128073; Better tickets = faster execution + fewer problems</p>]]></content:encoded></item><item><title><![CDATA[How to Set Up Multiple SSH Keys for Different GitHub and Bitbucket Accounts (Step-by-Step Guide)]]></title><description><![CDATA[Configure multiple SSH keys for GitHub and Bitbucket. Fix authentication errors and switch between work and personal accounts easily.]]></description><link>https://www.codewithjiyo.com/p/how-to-set-up-multiple-ssh-keys-for</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/how-to-set-up-multiple-ssh-keys-for</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sat, 28 Mar 2026 05:25:09 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!oI3a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.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_!oI3a!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!oI3a!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oI3a!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oI3a!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oI3a!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!oI3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:33461,&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;:&quot;https://www.codewithjiyo.com/i/192381126?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!oI3a!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!oI3a!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!oI3a!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!oI3a!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F97be216f-a21c-4df8-b770-0ce3537accf0_1024x576.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></figure></div><p>It all started when I was juggling two worlds &#8212; my work projects on Bitbucket and my personal experiments on GitHub.</p><p>My Bitbucket setup was running smoothly. I had my SSH keys configured, commits pushed, pipelines running &#8212; life was good.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>Then one day, I started a side project on GitHub. I made a few commits, felt proud, and hit:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git push origin main</code></pre></div><p>And then &#8212; boom &#128165; &#8212; &#8220;Permission denied.&#8221;</p><p>That&#8217;s when I realized my computer was still trying to use my Bitbucket SSH key to talk to GitHub. Time to fix that.</p><h2>Step 1: Creating a New SSH Key for GitHub</h2><p>I didn&#8217;t want to mess up my existing Bitbucket setup, so I decided to generate a brand-new SSH key just for GitHub.</p><p>In the terminal, I ran:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">ssh-keygen -t ed25519 -C &#8220;personal@gmail.com&#8221; -f ~/.ssh/id_ed25519_personal</code></pre></div><p>This created two files:</p><ul><li><p>id_ed25519_personal &#8594; my <strong>private key</strong></p></li><li><p>id_ed25519_personal.pub &#8594; my <strong>public key</strong></p></li></ul><p>Then, I copied the content of the public key using:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">cat ~/.ssh/id_ed25519_personal.pub</code></pre></div><p>I went to <strong>GitHub &#8594; Settings &#8594; SSH and GPG keys &#8594; New SSH key</strong>, pasted it in, and saved.</p><p>At this point, GitHub knew who I was.</p><p>But my <strong>local machine</strong> still didn&#8217;t know which key to use when connecting to which service.</p><h2>Step 2: Teaching My Computer Which Key to Use</h2><p>Inside my ~/.ssh directory, I had all my SSH keys:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/Users/jiyo/.ssh

&#9500;&#9472;&#9472; id_ed25519_work

&#9500;&#9472;&#9472; id_ed25519_work.pub

&#9500;&#9472;&#9472; id_ed25519_personal

&#9500;&#9472;&#9472; id_ed25519_personal.pub

&#9492;&#9472;&#9472; config</code></pre></div><p>That config file is the magic piece that tells SSH which key belongs to which host.</p><p>I opened it and added the following configuration:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"># GitHub account

Host github.com

HostName github.com

User git

IdentityFile ~/.ssh/id_ed25519_personal

IdentitiesOnly yes

# Bitbucket account

Host bitbucket.org

HostName bitbucket.org

User git

IdentityFile ~/.ssh/id_ed25519_work

IdentitiesOnly yes</code></pre></div><p>Now, whenever I connected to GitHub, it used my GitHub key.</p><p>And when I connected to Bitbucket, it used my Bitbucket key.</p><p>Simple, but powerful.</p><h2>Step 3: Testing the Setup</h2><p>Now comes the moment of truth. At this point, you&#8217;ll fall into one of two scenarios:</p><h3>A. You already have a local project that you want to push to a remote repository</h3><p>First, link your local repository to the remote one so Git knows where to push your changes. If you&#8217;re using GitHub, run:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git remote add origin git@github.com:user/repo.git</code></pre></div><p>To confirm that the remote link was added correctly, use:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git remote -v</code></pre></div><p>If you notice a typo or incorrect URL, simply remove and re-add the remote:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git remote rm origin

git remote add origin git@github.com:user/repo.git</code></pre></div><p>Next, ensure your local branch name matches the remote branch name. For example, if your remote branch is main but your local branch is master, rename it with:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git branch -M main</code></pre></div><p>Finally, push your local project to the remote repository:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git push origin main</code></pre></div><h3>B. You already have a remote repository and want to clone it locally</h3><p>To clone a repository from GitHub, run:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git clone git@github.com:user/repo.git</code></pre></div><p>Or, if you&#8217;re cloning from Bitbucket:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git clone git@bitbucket.org:user/repo.git</code></pre></div><p>Both methods should work perfectly. &#127881;</p><p>Your machine now knows which SSH key to use for each host.</p><h2>Step 4: Using Custom Host Aliases</h2><p>Here&#8217;s a neat trick I learned later &#8212; you can actually give each host a custom alias.</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">Host github_personal

    HostName github.com

    User git

    IdentityFile ~/.ssh/id_ed25519_personal

    IdentitiesOnly yes</code></pre></div><p>Then, when cloning:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git clone git@github_personal:user/repo.git</code></pre></div><p>This is super useful when you have <strong>multiple GitHub accounts</strong> (e.g., work, freelance, personal).</p><p>You could have entries like github_work, github_personal, and github_freelance, each tied to its own key.</p><h3>Common Mistakes</h3><p>You&#8217;ve set up a custom SSH host alias, but forgot to use it in your git clone or git remote add origin command.</p><p>For example, using:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git@github.com:user/repo.git</code></pre></div><p>instead of the correct alias:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git@github_personal:user/repo.git</code></pre></div><h2>Step 5: Don&#8217;t Forget </h2><p>This little line is more important than it looks:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">IdentitiesOnly yes</code></pre></div><p>It tells SSH to use only the key you specified &#8212; not to randomly try every key it finds.</p><p>Without it, you might get errors like:</p><blockquote><p>Too many authentication failures.</p></blockquote><p>So yes, make sure this line is there for each host.</p><h2>Step 6: Check Your Git User Info per Repository</h2><p>Everything was running perfectly now &#8212; but there was one last thing to remember.</p><p>Even though my SSH keys were properly separated, Git still needed to know who was making each commit.</p><p>In my work repo, I checked the configuration:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git config --local --list</code></pre></div><p>If my personal email appeared there, I fixed it:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git config --local user.name &#8220;Your Work Name&#8221;

git config --local user.email &#8220;your_work_email@company.com&#8221;</code></pre></div><p>And for my personal repo:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">git config --local user.name &#8220;Your Personal Name&#8221;

git config --local user.email &#8220;personal@gmail.com&#8221;</code></pre></div><p>This ensures I never commit to my company repository using my personal details (been there, done that &#128517;).</p><h2>The Final Setup</h2><p>By the end of it, my .ssh folder looked like this:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">/Users/jiyo/.ssh

&#9500;&#9472;&#9472; id_ed25519_work

&#9500;&#9472;&#9472; id_ed25519_work.pub

&#9500;&#9472;&#9472; id_ed25519_personal

&#9500;&#9472;&#9472; id_ed25519_personal.pub

&#9492;&#9472;&#9472; config</code></pre></div><p>My SSH configuration was clean, my commits were properly tagged, and switching between GitHub and Bitbucket was effortless.</p><p>No more &#8220;Permission denied.&#8221;</p><p>No more wrong email in commits.</p><p>Just smooth, clean Git operations across all my accounts.</p><h2>Lesson Learned</h2><p>If you ever find yourself juggling multiple Git accounts, remember this:</p><p>Give each account its own SSH key.</p><p>Use a .ssh/config file to tell SSH which key belongs to which host.</p><p>Set your Git name and email <strong>per repository</strong>.</p><p>It&#8217;s a small setup that saves you from a ton of future headaches.</p><p>Now every time I push, it feels like both my work and personal worlds are in perfect sync. </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[How Frameworks and Libraries Changed the Way I Build Software]]></title><description><![CDATA[Knowing how to code is not enough you need to learn how to deliver more value with less]]></description><link>https://www.codewithjiyo.com/p/how-frameworks-and-libraries-changed</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/how-frameworks-and-libraries-changed</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sat, 28 Mar 2026 05:10:26 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!M2uF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.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_!M2uF!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!M2uF!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M2uF!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M2uF!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M2uF!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!M2uF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:218443,&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;:&quot;https://www.codewithjiyo.com/i/192380306?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!M2uF!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!M2uF!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!M2uF!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!M2uF!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F12a22498-e698-4033-b88b-9285b24ff318_1920x1080.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></figure></div><p>Back in college, I used to think that a &#8220;real&#8221; programmer built everything from scratch.</p><p>If you didn&#8217;t write every line of code yourself, it somehow didn&#8217;t count.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>That, I believed, was what proved mastery.</p><p>But once I joined a professional development team, that belief quickly disappeared.</p><p>In the real world, time is money.</p><p>The longer it takes to build something, the more it costs &#8212; not just in hours, but in missed opportunities.</p><p>The goal isn&#8217;t to reinvent the wheel. It&#8217;s to deliver value efficiently.</p><h2>Frameworks Don&#8217;t Make You Less of a Developer</h2><p>Using frameworks and libraries doesn&#8217;t mean you don&#8217;t understand technology &#8212; it means you know how to leverage it.</p><p>You&#8217;re standing on the shoulders of those who&#8217;ve already solved the same problems, so you can move faster and focus on what truly matters.</p><p>Of course, understanding what&#8217;s happening under the hood is still important.</p><p>That knowledge helps you debug, optimize, and maintain your applications when things inevitably go wrong.</p><h2>My First Encounter with Frameworks</h2><p>In my early days as a developer, I worked with Angular, Ionic, and the Slim Microframework.</p><p>Before frameworks like Angular, we used to manipulate the DOM manually with plain JavaScript &#8212; a tedious, repetitive process that made codebases messy and hard to maintain.</p><p>Then came jQuery, which simplified DOM manipulation but still required us to manage everything by hand.</p><p>Modern frameworks like Angular, React, and Vue changed the game completely.</p><p>They abstracted away low-level DOM operations and introduced declarative programming &#8212; a mindset shift where we define what the UI should look like, not how to build it step by step.</p><p>Now, when the state changes, the UI updates automatically.</p><p>Without these frameworks, it would be much harder to build highly interactive web applications. Time that should be spent developing important features would instead be consumed by managing DOM manipulation &#8212; something that can be eliminated in the first place.</p><h2>Building Once, Deploying Everywhere</h2><p>Another example of a framework that sped up our development is Ionic.</p><p>It opened my eyes to hybrid app development.</p><p>Instead of writing separate codebases for iOS (Swift), Android (Kotlin/Java), and the web (JavaScript), we could build a single application that runs on all platforms.</p><p>From a business perspective, that meant faster delivery and lower costs &#8212; without sacrificing user experience.</p><p>Without Ionic, we would need to build multiple versions of the same application for different platforms.</p><p>Of course, there are many other frameworks and libraries you can use aside from the ones mentioned here to speed up solution delivery. Don&#8217;t hesitate to take advantage of them.</p><h2>The Takeaway</h2><p>Frameworks and libraries aren&#8217;t shortcuts &#8212; they&#8217;re accelerators.</p><p>They let developers focus on problem-solving rather than rebuilding solutions that already exist.</p><p>Looking back, frameworks didn&#8217;t make me less of a developer &#8212; they made me a more efficient one.</p><p>And that&#8217;s what real-world engineering is all about: building smarter, not slower.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[How Docker Changed the Way I Build and Think About Software]]></title><description><![CDATA[Ever wished you could run multiple apps on one machine&#8212;each with its own setup&#8212;without them breaking each other? That&#8217;s containerization.]]></description><link>https://www.codewithjiyo.com/p/how-docker-changed-the-way-i-build</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/how-docker-changed-the-way-i-build</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sat, 28 Mar 2026 04:18:24 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sVnT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.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_!sVnT!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sVnT!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sVnT!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sVnT!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sVnT!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sVnT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg" width="1024" height="576" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:576,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:65118,&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;:&quot;https://www.codewithjiyo.com/i/192378826?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sVnT!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 424w, https://substackcdn.com/image/fetch/$s_!sVnT!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 848w, https://substackcdn.com/image/fetch/$s_!sVnT!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!sVnT!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa5b2e443-bfda-4a3d-8d5d-21b3da63373b_1024x576.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></figure></div><h2>The Old Way: Installing Everything Manually</h2><p>Before Docker, setting up a development environment was a manual, messy process.</p><p>Back in college, I used XAMPP to get PHP, Apache, and MySQL running. My workflow? Install everything manually, configure it, and drop my project files into the public_html folder buried somewhere inside the OS.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>It worked &#8212; but barely. Every new project meant tweaking configs, reinstalling versions, or hunting down missing extensions. I thought that was just how web development worked.</p><p>Then I discovered Docker, and everything changed.</p><h2>The Pain of No Isolation</h2><p>Installing software directly into your operating system is like cooking different dishes in the same pan without washing it in between &#8212; things get messy fast.</p><p>For example:</p><p>Project A needed PHP 7.4, but Project B required PHP 8.2. Switching versions meant uninstalling one, reinstalling the other, and praying nothing else broke.</p><p>MySQL updates sometimes corrupted old databases.</p><p>Apache ports conflicted when running multiple projects.</p><p>Worse, every developer on the team had a slightly different setup. My code would run fine on my machine &#8212; but fail miserably on someone else&#8217;s.</p><p>That inconsistency killed productivity. Hours were wasted debugging environment problems instead of actual code issues.</p><p>We weren&#8217;t debugging logic &#8212; we were debugging our machines.</p><h2>Enter Docker: The Game Changer</h2><p>Docker flipped that entire workflow on its head.</p><p>Instead of installing everything manually, Docker lets you describe your setup in a simple text file called a Dockerfile. It&#8217;s like a recipe that defines exactly which versions, dependencies, and configurations your app needs.</p><p>You then build a Docker image from that file &#8212; and that image becomes a portable environment you can share.</p><p>Your teammates don&#8217;t need to install PHP or MySQL themselves. They just run a single command &#8212;</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">docker compose up</code></pre></div><p>&#8212; and everything spins up in seconds.</p><p>No version conflicts. No missing extensions. No &#8220;it works on my machine&#8221; nonsense.</p><h2>Docker in Simple Terms</h2><p>A Docker image is your project&#8217;s blueprint.</p><p>A Docker container is the running instance of that blueprint.</p><p>You can think of it like baking cookies: the image is your recipe, and each container is a cookie made from that recipe. Every cookie comes out the same &#8212; no surprises.</p><p>And since Docker runs on Windows, macOS, and Linux, your app behaves exactly the same everywhere.</p><h2>The Real Impact on Productivity</h2><p>Once our team adopted Docker, onboarding new developers went from days to minutes.</p><p>Before Docker, a new hire might spend an entire afternoon installing dependencies, fixing path issues, or asking why composer wasn&#8217;t recognized.</p><p>Now? They just clone the repo and run one command. Everything works instantly.</p><p>It also made code reviews and deployments smoother. When everyone runs the same environment, the only bugs left are in the code, not the setup.</p><h2>The Lesson: Code Alone Isn&#8217;t Enough</h2><p>Learning Docker taught me an important truth &#8212; writing code is only half the job.</p><p>The real challenge is making sure it runs reliably anywhere.</p><p>That&#8217;s when I started to understand the importance of environment consistency, automation, and DevOps.</p><p>Docker didn&#8217;t just simplify setup &#8212; it changed how I think about building software altogether.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[A Quiet Moment in a Meeting That Changed How I Build Software Forever]]></title><description><![CDATA[You can&#8217;t truly collaborate if you don&#8217;t understand the language&#8212;let alone the problem you&#8217;re trying to solve]]></description><link>https://www.codewithjiyo.com/p/a-quiet-moment-in-a-meeting-that</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/a-quiet-moment-in-a-meeting-that</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Fri, 27 Mar 2026 11:57:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!8QdI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.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_!8QdI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!8QdI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8QdI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8QdI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8QdI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!8QdI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:253270,&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;:&quot;https://www.codewithjiyo.com/i/192302803?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!8QdI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!8QdI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!8QdI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!8QdI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F918df547-0d75-438b-8c18-7ce9d39cc209_1920x1080.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></figure></div><h2>It Started Like Any Other Team Meeting</h2><p>It was a regular morning meeting. Everyone was gathered around the table while the organizer shared his screen.</p><p>As soon as the discussion started, the pace picked up.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>People began throwing around jargon, acronyms, and workflows that felt completely foreign to me.</p><p>From their tone, I could tell there was a real issue they were trying to solve &#8212; and I genuinely wanted to help.</p><p>But as the conversation went on, I realized something: I didn&#8217;t fully understand what they were talking about, or how all those pieces fit together.</p><p>Still, deep down, I knew I could build a solution &#8212; if only I understood what they meant.</p><p>I thought about asking questions, but I knew it would derail the meeting and take forever.</p><p>So I chose to listen and observe carefully.</p><p>The meeting ended, and I realized I needed more context before I could contribute meaningfully.</p><p>That moment stayed with me and pushed me to reflect.</p><h2>The Realization That Changed Everything</h2><p>Later that day, it dawned on me:</p><p>Even if you&#8217;re an expert in programming, frameworks, and clean code, your impact will always be limited if you don&#8217;t understand the business domain &#8212; the real world your software is meant to serve.</p><p>Without that understanding, collaboration suffers.</p><p>And even the most elegant code can completely miss the mark.</p><div class="pullquote"><p>Business domain drives communication.</p><p>Communication builds understanding.</p><p>Understanding shapes solutions.</p><p>Solutions come alive through implementation.</p></div><p>That realization changed the way I approached my work.</p><p>From that moment on, I made it my mission to truly understand the business domain.</p><h2>I Took Time to Understand Their Journey and Pain Points</h2><p>I didn&#8217;t have direct access to the end users, so I couldn&#8217;t simply ask them what they needed.</p><p>And honestly, I didn&#8217;t want to overwhelm the requirements analysts with a flood of questions.</p><p>Instead, I decided to do my own research first &#8212; to explore, learn, and come back to them only to confirm what I&#8217;d found. It felt like a more respectful and productive approach.</p><p>I started using online resources and AI tools to learn more about our business domain.</p><p>I asked about common pain points in this industry, then went deeper &#8212; why do those problems exist? What causes them?</p><p>To organize everything I was discovering, I started mapping it out visually using simple diagrams.</p><p>Step by step, I laid out the journey &#8212; each part beginning with a question, followed by the reasons behind it. Then I&#8217;d connect that reason to another question, repeating the process until the entire picture made sense.</p><p>By the end, I wasn&#8217;t just memorizing facts.</p><p>I was beginning to see the world through the users&#8217; eyes &#8212; and that changed everything.</p><h2>I Started Exploring Every Term I Didn&#8217;t Understand</h2><p>Once I had a clearer view of the user journey, I shifted my focus to how the business actually worked.</p><p>Any time I came across a term I didn&#8217;t understand, I looked it up &#8212; not just the definition, but the context around it.</p><p>Each explanation opened new insights.</p><p>And those insights led to better questions &#8212; questions that revealed how things truly operated beneath the surface.</p><p>It became a cycle: learn a term, uncover an insight, ask a deeper question, and repeat.</p><p>With each round, my understanding of the business grew more complete.</p><h2>Then I Tried to Connect the Dots</h2><p>But knowing all the terms wasn&#8217;t enough.</p><p>True understanding came when I started connecting everything together &#8212; the processes, the systems, the people, and the reasons behind each decision.</p><p>I built a sort of mental map &#8212; a hierarchy of terms and relationships &#8212; until the information I&#8217;d gathered formed a coherent structure.</p><p>That&#8217;s when it all clicked.</p><p>I could finally see how everything worked together &#8212; not just as isolated pieces, but as one living, interconnected system.</p><h2>The Quiet Lesson</h2><p>That morning meeting taught me something no course or tutorial ever could:</p><p>The best developers don&#8217;t just write great code &#8212; they understand the business behind it.</p><p>Because once you understand why something matters, the how becomes much easier to figure out.</p><p>And sometimes, understanding doesn&#8217;t start with speaking.</p><p>It starts with listening, observing, and connecting the dots.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[Who knew amazon Q Info session would lead me to build Git Analytics?]]></title><description><![CDATA[A late Amazon Q session sparked an idea that grew into Git Analytics &#8212; a tool revealing unseen stories in your team&#8217;s code.]]></description><link>https://www.codewithjiyo.com/p/who-knew-amazon-q-info-session-would</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/who-knew-amazon-q-info-session-would</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Tue, 24 Mar 2026 13:58:31 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!HSeQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.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_!HSeQ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!HSeQ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HSeQ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HSeQ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HSeQ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!HSeQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:73871,&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;:&quot;https://www.codewithjiyo.com/i/191982783?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!HSeQ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!HSeQ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!HSeQ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!HSeQ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5c45652d-525e-4c40-9322-a9223a1acfeb_1920x1080.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></figure></div><p><em>What if being late to a meeting sparked your next big project?</em></p><p>On October 12, 2025, after our quarterly release, I joined an Amazon Q info session hosted by a colleague.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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 was late.</p><p>By the time I got in, they were already installing Amazon Q on the CLI and VS Code. I just followed along at first&#8212;nothing special.</p><p>We built small things:</p><ul><li><p>a snake game</p></li><li><p>a car game</p></li><li><p>some unit tests</p></li></ul><p>But one thought kept coming back:</p><p><strong>&#8220;What if this CLI could automate things&#8230; or even plug into CI/CD?&#8221;</strong></p><p>That question didn&#8217;t leave me.</p><div><hr></div><h2>The Idea That Wouldn&#8217;t Go Away</h2><p>The CLI felt natural&#8212;like using Git. Fast. Simple. Powerful.</p><p>At the end of the session, everyone shared their demos.<br>Mine didn&#8217;t go well&#8212;I tried building an end-to-end test but hit authentication issues.</p><p>No impressive output.</p><p>But I left with something better: <strong>curiosity</strong>.</p><p>That night, I opened one of my repositories and started experimenting.</p><p>That&#8217;s when <strong>Git Analytics</strong> was born.</p><div><hr></div><h2>The Mistake That Changed Everything</h2><p>After hours of prompting, I finally got something working.</p><p>Then I broke it.</p><p>Worse&#8212;I accidentally closed my terminal.</p><p>Everything was gone.</p><p>No history. No context. No way to reproduce what I just built.</p><p>That moment taught me something important:</p><blockquote><p>Treat AI experiments like real software.</p></blockquote><p>So I changed how I worked:</p><ul><li><p>Create a new branch for every idea</p></li><li><p>Test outputs</p></li><li><p>Commit working results</p></li><li><p>Use the goal as the commit message</p></li></ul><p>Then I discovered Amazon Q&#8217;s <code>/save</code> and <code>/load</code>.</p><p>Now I had:</p><ul><li><p><strong>Git for code</strong></p></li><li><p><strong>Saved context for AI</strong></p></li></ul><p>That combination changed everything.</p><div><hr></div><h2>Learning to Work <em>With</em> AI</h2><p>At first, I was very step-by-step:</p><p>&#8220;Do this.&#8221;<br>&#8220;Now do that.&#8221;</p><p>It worked&#8212;but it was slow.</p><p>Then I changed one thing:</p><p>Instead of telling AI <strong>what to do</strong>,<br>I told it <strong>what I wanted</strong>.</p><p>That shift made a huge difference.</p><p>Suddenly:</p><ul><li><p>It generated better outputs</p></li><li><p>I refined instead of micromanaged</p></li><li><p>It felt like collaboration</p></li></ul><p>AI became the muscle.<br>I became the direction.</p><div><hr></div><h2>When AI Needs You</h2><p>As Git Analytics grew, things got messy.</p><p>Amazon Q started:</p><ul><li><p>forgetting features</p></li><li><p>breaking old code</p></li><li><p>getting confused</p></li></ul><p>That&#8217;s when it clicked:</p><blockquote><p>AI doesn&#8217;t replace developers&#8212;it needs them.</p></blockquote><p>It works best in small chunks.<br>For bigger systems, it still needs guidance.</p><p>My dev experience became essential:</p><ul><li><p>debugging</p></li><li><p>structuring</p></li><li><p>steering the direction</p></li></ul><p>Without it, I&#8217;d just be following the AI&#8212;not leading it.</p><div><hr></div><h2>Why I Built Git Analytics</h2><p>Simple:</p><blockquote><p><strong>Without metrics, we&#8217;re blind.</strong></p></blockquote><p>We can&#8217;t improve what we don&#8217;t see.</p><p>Git already has data&#8212;but it&#8217;s hard to understand.</p><p>So I built something simple:</p><ul><li><p>A <strong>multi-repo dashboard</strong></p></li><li><p>Runs with Docker</p></li><li><p>No backend setup</p></li><li><p>Just open and use</p></li></ul><p><strong>Insight without friction.</strong></p><div><hr></div><h2>What the Data Revealed</h2><p>Once I started using it, the insights were surprising.</p><h3>&#128101; Contributors</h3><p>Not just code volume&#8212;but patterns:</p><ul><li><p>who contributes consistently</p></li><li><p>when activity peaks</p></li><li><p>how the team moves</p></li></ul><div><hr></div><h3>&#127769; After-Hours Work</h3><p>Are we overworking?</p><p>This shows:</p><ul><li><p>night commits</p></li><li><p>weekend work</p></li><li><p>possible burnout signals</p></li></ul><div><hr></div><h3>&#128269; Peer Reviews</h3><p>Who reviews the most?<br>Is the workload balanced?</p><p>It made collaboration visible.</p><div><hr></div><h3>&#9881;&#65039; Features vs Bug Fixes</h3><p>A timeline of:</p><ul><li><p>building vs fixing</p></li><li><p>innovation vs stability</p></li></ul><div><hr></div><h3>&#129514; Test Coverage</h3><p>Which changes lack tests?</p><p>It&#8217;s not about numbers&#8212;it&#8217;s about accountability.</p><div><hr></div><h3>&#9201; Lead Time to Merge</h3><p>This became my favorite metric.</p><p>It shows:</p><ul><li><p>how fast work moves</p></li><li><p>where bottlenecks are</p></li><li><p>how smooth the process feels</p></li></ul><p>It&#8217;s not just speed&#8212;it&#8217;s <strong>flow</strong>.</p><div><hr></div><h3>&#9888;&#65039; Knowledge Risk</h3><p>This one is powerful.</p><p>If one person owns most of a system:</p><ul><li><p>it&#8217;s efficient</p></li><li><p>but risky</p></li></ul><p>If they leave, the team struggles.</p><p>This helps teams:</p><ul><li><p>share ownership</p></li><li><p>reduce dependency</p></li><li><p>stay resilient</p></li></ul><div><hr></div><h2>Key Takeaway</h2><p>AI tools like Amazon Q are not replacements.</p><p>They are <strong>multipliers</strong>.</p><p>They don&#8217;t remove the need for skill&#8212;<br>they make skill more powerful.</p><p>Git Analytics didn&#8217;t come from a plan.</p><p>It came from:</p><ul><li><p>curiosity</p></li><li><p>mistakes</p></li><li><p>experimentation</p></li></ul><p>And one late meeting.</p><div><hr></div><h2>Final Thought</h2><p>The future isn&#8217;t:</p><p><strong>Humans vs AI</strong></p><p>It&#8217;s:</p><p><strong>Humans who know how to use AI</strong></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://drive.google.com/file/d/1NpNNNq7_j3LZOlRlBqDAC72VGPD-upUM/view?usp=sharing&quot;,&quot;text&quot;:&quot;Download Git Analytics&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://drive.google.com/file/d/1NpNNNq7_j3LZOlRlBqDAC72VGPD-upUM/view?usp=sharing"><span>Download Git Analytics</span></a></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[Inside Git: The Two Concepts Every Developer Should Understand]]></title><description><![CDATA[A simple mental model of Git built on copying code and tracking changes]]></description><link>https://www.codewithjiyo.com/p/two-things-i-like-in-git</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/two-things-i-like-in-git</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Mon, 23 Mar 2026 15:12:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!bonN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.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_!bonN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!bonN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bonN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bonN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bonN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!bonN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:193323,&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;:&quot;https://www.codewithjiyo.com/i/191464914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!bonN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!bonN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!bonN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!bonN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4f0c6a77-1881-42e4-8005-489887cedc82_1920x1080.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></figure></div><p>If I had to explain why Git is so powerful in the simplest way possible, I&#8217;d boil it down to just two things:</p><ul><li><p>It makes copies of code easily</p></li><li><p>It tracks changes</p></li></ul><p>That&#8217;s it.</p><p>But behind these two simple ideas lies the foundation of modern software development.</p><div><hr></div><h2>Why Making Copies of Code Matters</h2><p>At first glance, &#8220;making copies&#8221; sounds trivial. But in software development, it&#8217;s everything.</p><div class="pullquote"><p>Modifying code directly is <strong>destructive</strong>.<br>Modifying a copy is <strong>safe</strong>.</p></div><p>This one distinction changes how we build software.</p><p>When you want to add a new feature, the workflow becomes:</p><ul><li><p>Create a copy</p></li><li><p>Modify it </p></li><li><p>Test it </p></li><li><p>Review it </p></li><li><p>Commit the changes back to the original</p></li></ul><p>Simple. Controlled. Safe.</p><div><hr></div><h2>#1 Making Mistakes Becomes Cheap</h2><p>Mistakes are inevitable. But Git makes them <strong>cheap</strong>.</p><p>If something goes wrong:</p><ul><li><p>You can discard your modified copy instantly</p></li><li><p>You can recreate it from the original with a single command</p></li></ul><p>Even better, you don&#8217;t have to throw everything away.</p><p>You can go back to a <strong>specific checkpoint</strong> in your code:</p><pre><code>Copy A
 &#8594; Checkpoint 1
 &#8594; Checkpoint 2
 &#8594; Checkpoint 3</code></pre><p>These checkpoints are called <strong>commits</strong>.</p><p>They act like save points in a game&#8212;you can always go back.</p><div><hr></div><h2>#2 Copies Enable Decoupling</h2><p>Copies don&#8217;t just make things safer&#8212;they make things <strong>organized</strong>.</p><p>They allow different parts of development to happen independently without interfering with each other.</p><p>A typical workflow might look like this:</p><ul><li><p><strong>Production Copy</strong> &#8211; Stable code used by real users</p></li><li><p><strong>Develop Copy</strong> &#8211; Where ongoing development is consolidated</p></li><li><p><strong>Release Copy</strong> &#8211; Prepared for upcoming releases</p></li><li><p><strong>Feature Copy</strong> &#8211; For building new features</p></li><li><p><strong>Bugfix Copy</strong> &#8211; For fixing issues</p></li><li><p><strong>Hotfix Copy</strong> &#8211; For urgent production fixes</p></li></ul><p>Without this separation, it would be chaos:</p><ul><li><p>Unfinished features would reach users</p></li><li><p>Untested code would mix with stable code</p></li><li><p>Bugs would be impossible to reproduce</p></li><li><p>The codebase would constantly be unstable</p></li></ul><p>Copies create <strong>order out of chaos</strong>.</p><div><hr></div><h2>What About Tracking Changes?</h2><p>If making copies is one half of Git, <strong>tracking changes</strong> is the other.</p><p>And it&#8217;s just as important.</p><p>Tracking changes builds a <strong>repository</strong></p><p>And a repository which makes making copies possible.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!C_dY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!C_dY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C_dY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C_dY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C_dY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!C_dY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:116495,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codewithjiyo.com/i/191464914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!C_dY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!C_dY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!C_dY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!C_dY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03a8935a-7e42-41a3-9d04-38bb08c82835_1920x1080.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>These copies are called <strong>branches</strong>.</p><div><hr></div><h2>The Lifecycle of a Repository</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hqv4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hqv4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Hqv4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Hqv4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Hqv4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hqv4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:114444,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpeg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.codewithjiyo.com/i/191464914?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Hqv4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Hqv4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Hqv4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Hqv4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa0356336-67e9-4473-bf79-0eeda418d617_1920x1080.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>Every repository follows a simple loop:</p><ul><li><p>You make changes</p></li><li><p>You choose which changes to keep</p></li><li><p>You commit those changes to a repository</p></li><li><p>Then you repeat</p></li></ul><p>Over and over again.</p><p>This cycle is powered by change tracking.</p><div><hr></div><h2>Why Tracking Changes Matters</h2><p>Without tracking:</p><ul><li><p>You wouldn&#8217;t know what changed</p></li><li><p>You couldn&#8217;t separate tested vs untested code</p></li><li><p>Every version would blur into one</p></li></ul><p>With tracking:</p><ul><li><p>Every change is recorded</p></li><li><p>Every version is recoverable</p></li><li><p>Every decision is intentional</p></li></ul><p>Tracking gives structure to your work.</p><div><hr></div><h2>Final Thoughts</h2><p>Git isn&#8217;t just a tool&#8212;it&#8217;s a system built on two powerful ideas:</p><ul><li><p><strong>Copying enables safety and flexibility</strong></p></li><li><p><strong>Tracking enables clarity and control</strong></p></li></ul><p>Together, they allow developers to move fast <strong>without breaking everything</strong>.</p><p>And without them?</p><p>It would be pure chaos.</p>]]></content:encoded></item><item><title><![CDATA[The Questions I Wish I Asked Before I Start Coding]]></title><description><![CDATA[How understanding your data early saves time, money, and rework]]></description><link>https://www.codewithjiyo.com/p/the-questions-i-wish-i-asked-before</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/the-questions-i-wish-i-asked-before</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Wed, 18 Mar 2026 12:08:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!kr6e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.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_!kr6e!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!kr6e!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kr6e!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kr6e!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kr6e!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!kr6e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:206646,&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;:&quot;https://www.codewithjiyo.com/i/191355833?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!kr6e!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!kr6e!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!kr6e!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!kr6e!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F489c8ee8-3c3c-46d1-bf39-064330b10d44_1920x1080.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></figure></div><p>When I first started building systems, I had a very simple mindset:</p><p>&#8220;Just make the feature work.&#8221;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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>So I did.</p><p>After one sprint, I built a table that displays data from an API. It worked. I felt great.</p><p>Then the next sprint came.</p><p>&#8220;Hey, the columns need to be dynamic.&#8221;</p><p>Alright&#8212;no problem. I refactored it. Still felt good.</p><p>Next sprint:</p><p>&#8220;Oh, by the way, this dataset is also used by another tool.&#8221;</p><p>Okay&#8230; now I had to rethink things. I ended up creating a working copy&#8212;users edit that, then merge it back into the original. More work, but still manageable.</p><p>Then, near the end of the project, things started slowing down.</p><p>Some datasets took forever to load.</p><p>At this point, I couldn&#8217;t just &#8220;fix it.&#8221; Most of the logic was already baked into the UI. Changing it meant major rework.</p><p>And then came another issue&#8212;saving data took too long.</p><p>So I added background processing.</p><div><hr></div><p>At this point, I realized something.</p><p>None of these problems were random.</p><p>They were all predictable.</p><p>And I had been reacting to them&#8230; one sprint at a time.</p><div><hr></div><p>The real problem?</p><p>I didn&#8217;t understand the data.</p><p>And I think it&#8217;s okay.</p><p>no one knows everything upfront you understand the business domain as you go on the sprint cycle.</p><div><hr></div><p>If I had known the data was dynamic, I would&#8217;ve designed the table that way from the start.</p><p>If I had known the data would be shared across tools, I would&#8217;ve planned for a safer editing flow&#8212;like a working copy.</p><p>If I had known the data would grow large, I wouldn&#8217;t have pushed all the logic into the UI. I would&#8217;ve used server-side pagination early on.</p><p>If I had known saving would involve large operations, I would&#8217;ve designed it with background processing from day one.</p><div><hr></div><p>Instead, I learned all of this the hard way:</p><p>Through rework.</p><p>Through delays.</p><p>Through &#8220;quick fixes&#8221; that weren&#8217;t actually quick.</p><div><hr></div><p>So if you&#8217;re building something right now, here&#8217;s a simple mindset shift:</p><p>Don&#8217;t just ask, &#8220;How do I build this feature?&#8221;</p><p>Ask:</p><ul><li><p>&#8220;Is the data dynamic?&#8221;</p></li><li><p>&#8220;Who else uses this data?&#8221;</p></li><li><p>&#8220;How big can this get?&#8221;</p></li><li><p>&#8220;Will users perform bulk updates?&#8221;</p></li></ul><p>Because features can be built in many ways&#8230;</p><p>But your understanding of the data will determine whether your system scales&#8212;or breaks later.</p><div><hr></div><p>If there&#8217;s one thing I&#8217;d tell my past self, it&#8217;s this:</p><p>You&#8217;re not just building features.</p><p>You&#8217;re designing around data.</p><p>And the earlier you understand it, the less you&#8217;ll have to rebuild later.</p><div class="pullquote"><p>A good software engineer isn&#8217;t just great at building features&#8212;it&#8217;s someone who knows how to ask smart questions.</p></div><p>The kind that seem simple at first, but when you think about them deeply, reveal hidden complexity.</p><p>Those questions are where the real value is&#8212;because they save you time, reduce rework, and prevent wasted resources.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[How to setup existing WordPress website on localhost using Docker]]></title><description><![CDATA[Enable local development, testing, versioning and minimize costs]]></description><link>https://www.codewithjiyo.com/p/how-to-setup-existing-wordpress-website</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/how-to-setup-existing-wordpress-website</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Tue, 17 Mar 2026 16:07:18 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!vLGx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.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_!vLGx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vLGx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vLGx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vLGx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vLGx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vLGx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145276,&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;:&quot;https://www.codewithjiyo.com/i/191261004?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vLGx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!vLGx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!vLGx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!vLGx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F865430b0-49b0-495f-924a-875d18dd6eb8_1920x1080.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></figure></div><p>If for some reason you are planning to cancel your current hosting renewal. Then decided to backup your files and database temporarily. </p><p>Don&#8217;t worry in this blog I will share how you can access those backup on your local </p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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><ul><li><p>You can refer to your previous content while migrating to newer hosting provider</p></li><li><p>Minimize costs and deploy only once you&#8217;re ready</p></li><li><p>Do development and testing locally for faster iteration</p></li><li><p>Version your changes locally</p></li></ul><h2>1. Download the existing files and database from your hosting provider</h2><p>Example</p><ul><li><p>public_html.zip</p></li><li><p>database.sql</p></li></ul><h2>2. Spin up the container</h2><p>Create a <code>docker-compose.yml</code> file</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:&quot;ce62c48c-0bf7-4935-95bc-ed8e1dff86a6&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml">services:

  wordpress:
    image: wordpress
    restart: always
    ports:
      - 8080:80
    environment:
      WORDPRESS_DB_HOST: db
      WORDPRESS_DB_USER: XXX
      WORDPRESS_DB_PASSWORD: XXX
      WORDPRESS_DB_NAME: XXX
    volumes:
      - wordpress:/var/www/html

  db:
    image: mysql:8.0
    restart: always
    environment:
      MYSQL_DATABASE: XXX
      MYSQL_USER: XXX
      MYSQL_PASSWORD: XXX
      MYSQL_RANDOM_ROOT_PASSWORD: '1'
    volumes:
      - db:/var/lib/mysql
    ports:
      - 3306:3306

volumes:
  wordpress:
  db:
</code></pre></div><p>When entering ENV variables values it is important to use the existing <strong>username</strong>, <strong>password</strong> and <strong>database</strong> <strong>name</strong> from your hosting provider. You want to simulate the existing wordpress on your local machine</p><p>We expose the port 3306 of the database so that we can access the database using Database GUI like MySQL Workbench or so on.</p><p>After checking the values run the command</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:&quot;870b500d-efcc-4dc8-8d6b-3d17d5b994ea&quot;}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker-compose up -d</code></pre></div><p></p><h2>3. Copy WordPress Files to Docker Container</h2><p>Assuming your files are in <code>~/hostinger_backup/public_html</code>:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker cp ~/hostinger_backup/public_html/. wordpress:/var/www/html</code></pre></div><p>Note: <em>wordpress</em> is the name of the wordpress container. Run <code>docker ps</code> to check the container name</p><p><strong>Tip</strong>: Use the dot <code>.</code> to copy contents, not the folder itself.</p><p>Then fix permissions inside the container:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker exec -it wordpress bash
chown -R www-data:www-data /var/www/html
chmod -R 755 /var/www/html
exit</code></pre></div><h2>4. Import Database into Docker MySQL</h2><p>a. Copy the sql file into the container</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker cp ~/hostinger_backup/backup.sql wp-db:/backup.sql</code></pre></div><p>Note: <em>wp-db</em> is the name of database container. Run <code>docker ps</code> to check the container name</p><p>b. Import it</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">docker exec -it wp-db bash
mysql -u XXX -p</code></pre></div><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext"> wordpress &lt; /backup.sql</code></pre></div><p>Enter the MySQL password</p><p>c. Update site URLs if domain changed:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">USE wordpress;
UPDATE wp_options SET option_value='http://localhost:8080' WHERE option_name='siteurl';
UPDATE wp_options SET option_value='http://localhost:8080' WHERE option_name='home';</code></pre></div><p>Adjust http://localhost:8080 to your new domain if needed.</p><h2>5. Update <code>wp-config.php</code></h2><p>Inside <code>/var/www/html/wp-config.php</code>, make sure the database credentials match your Docker setup:</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;plaintext&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-plaintext">define('DB_NAME', 'XXX');
define('DB_USER', 'XXX');
define('DB_PASSWORD', 'XXX');
define('DB_HOST', 'db');</code></pre></div><p>Common Mistakes when setting DB_HOST</p><ul><li><p>localhost or 127.0.0.1 is being used instead of db</p></li></ul><p>localhost refer to the wordpress container itself, by using <code>db</code> (service name) docker can resolve it to proper ip address</p><h2>6. Test your Local Setup</h2><p>Finally access the site using localhost:8080</p><p>Note: If you want to develop and test locally you can change</p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"> volumes:
      - wordpress:/var/www/html</code></pre></div><p>to </p><div class="highlighted_code_block" data-attrs="{&quot;language&quot;:&quot;yaml&quot;,&quot;nodeId&quot;:null}" data-component-name="HighlightedCodeBlockToDOM"><pre class="shiki"><code class="language-yaml"> volumes:
      - /path/to/your-folder/:/var/www/html</code></pre></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.codewithjiyo.com/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 Jiyo's Dev Journal! 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[AI-assisted engineers are the future]]></title><description><![CDATA[Your competition isn't AI. It's the engineer who already knows how to use it]]></description><link>https://www.codewithjiyo.com/p/ai-assisted-engineer-is-the-future</link><guid isPermaLink="false">https://www.codewithjiyo.com/p/ai-assisted-engineer-is-the-future</guid><dc:creator><![CDATA[Jiyo Pagtananan]]></dc:creator><pubDate>Sat, 07 Mar 2026 09:19:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!isBY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.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_!isBY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!isBY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!isBY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!isBY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!isBY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!isBY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:204757,&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;:&quot;https://www.codewithjiyo.com/i/190179197?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!isBY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!isBY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!isBY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!isBY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd3974ca0-9fc6-4108-84d6-f77fe47ef416_1920x1080.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></figure></div><h1>The AI Shift: Doing More With Less</h1><p>The rise of AI feels like a turning point.</p><p>Almost overnight, developers are expected to do more with fewer people.</p><p>At first, I didn&#8217;t think much of it. AI felt like a nice-to-have tool. Something you&#8217;d occasionally use when you got stuck. Helpful, sure, but not something that fundamentally changed how we worked.</p><p>Then reality hit.</p><p>Our organization went through layoffs, while some teammates moved on to other companies. Suddenly, the team that once felt complete UI/UX designers, frontend and backend developers, database engineers, DevOps, QA became much smaller.</p><p>What used to be a full team started to feel like a body missing several limbs.</p><p>For those of us who stayed, the question wasn&#8217;t just <em>how do we cope?</em></p><p>It was:</p><p><strong>How do we keep moving forward?</strong></p><div><hr></div><h1>What Actually Helped: Experience and Resourcefulness</h1><p>Looking back, two things helped me navigate that transition.</p><p><strong>Experience</strong> was the first.</p><p>Early in my career, I worked as a junior developer who was thrown into many different areas frontend, backend, infrastructure, and sometimes even things I wasn&#8217;t prepared for.</p><p>At the time, it felt messy and chaotic.</p><p>But in hindsight, that chaos built something valuable: <strong>adaptability</strong>.</p><p>The second thing was <strong>resourcefulness</strong>.</p><p>The ability to figure things out with whatever tools you have.</p><p>Both of these qualities are timeless.</p><p>Experience doesn&#8217;t expire. It just waits for the right moment to be applied again. And resourcefulness doesn&#8217;t disappear it evolves alongside the tools available to you.</p><div><hr></div><h1>How Engineers Have Always Found Answers</h1><p>If you think about it, software engineers have always relied on external tools to solve problems.</p><p>First, there were <strong>textbooks</strong>.</p><p>Then came <strong>forums and official documentation</strong>.</p><p>Later, we relied heavily on <strong>Google searches and YouTube tutorials</strong>.</p><p>Now we have <strong>AI tools</strong>.</p><p>The medium changed, but the skill behind it stayed the same:</p><p><strong>Knowing what to ask and how to evaluate the answer.</strong></p><p>That&#8217;s where experience becomes your edge.</p><p>Without a mental model of what a good solution looks like, AI can give you a confident-sounding wrong answer and you might never notice.</p><p>Prior knowledge isn&#8217;t obsolete in the age of AI.</p><p>If anything, it&#8217;s what makes AI truly useful.</p><div><hr></div><h1>The Hidden Advantage of AI: Faster Mistakes</h1><p>One thing I&#8217;ve realized is that AI doesn&#8217;t just make us faster at building things.</p><p>It also makes us faster at <strong>making mistakes</strong>.</p><p>And surprisingly, that&#8217;s an advantage.</p><p>Because mistakes happen sooner, feedback arrives sooner. We can iterate faster, learn faster, and adjust our approach earlier in the process.</p><p>A feature that might have taken days to implement can now be drafted in hours.</p><p>That means your teammates can review it sooner, test it sooner, and improve it sooner.</p><p>The development loop becomes dramatically shorter.</p><div><hr></div><h1>My New Role: The Orchestrator</h1><p>The biggest shift I&#8217;ve noticed in my own work is this:</p><p>I&#8217;ve gone from being primarily a <strong>doer</strong> to becoming more of an <strong>orchestrator</strong>.</p><p>Previously, most of my time was spent executing tasks manually:</p><ul><li><p>writing requirements</p></li><li><p>coding features</p></li><li><p>refactoring</p></li><li><p>writing tests</p></li><li><p>documenting systems</p></li><li><p>deploying infrastructure</p></li></ul><p>Now, my focus is shifting toward higher-level thinking:</p><ul><li><p>analyzing problems</p></li><li><p>designing solutions</p></li><li><p>defining system architecture</p></li><li><p>mapping workflows</p></li><li><p>evaluating output quality</p></li></ul><p>Once I&#8217;ve created a clear plan or pseudocode, I let AI handle much of the implementation.</p><p>Step by step.</p><div><hr></div><h1>What This Looks Like in Practice</h1><p>Here are some examples of how my workflow has changed.</p><h3>Meetings</h3><p>Before a meeting, I ask AI to help generate a meeting flow or agenda.<br>After the meeting, I feed the transcript into AI to generate summarized notes.</p><p>I still review everything but the heavy lifting is done faster.</p><div><hr></div><h3>Issue Management</h3><p>Instead of manually writing every detail in a ticket, I ask AI to help draft:</p><ul><li><p>requirements</p></li><li><p>acceptance criteria</p></li><li><p>potential solutions</p></li><li><p>expected value or impact</p></li></ul><p>Then I refine the output.</p><div><hr></div><h3>Implementation</h3><p>For coding tasks:</p><ol><li><p>I define the approach or pseudocode.</p></li><li><p>AI generates the initial implementation.</p></li><li><p>I review and test the output.</p></li><li><p>We iterate until it reaches production quality.</p></li></ol><div><hr></div><h3>Documentation</h3><p>AI can generate:</p><ul><li><p>code comments</p></li><li><p>technical documentation</p></li><li><p>summaries of complex logic</p></li></ul><p>I still verify everything for accuracy and clarity.</p><div><hr></div><h3>Testing</h3><p>AI can generate unit tests quickly.</p><p>Instead of spending hours writing boilerplate test cases, I review and refine what&#8217;s generated.</p><div><hr></div><h3>Infrastructure and Deployment</h3><p>Need infrastructure defined?</p><p>AI can generate infrastructure-as-code files like Terraform templates. I review the configuration before provisioning resources.</p><div><hr></div><h3>Releases</h3><p>Even release notes can be generated automatically based on commits and changes.</p><p>Again, the key step remains the same:</p><p><strong>Review.</strong></p><div><hr></div><h1>Why Mastering Every Detail Isn&#8217;t the Goal Anymore</h1><p>Software engineering moves fast.</p><p>Spending months mastering a specific language or framework only to switch stacks later can be exhausting.</p><p>But the <strong>fundamentals rarely change</strong>:</p><ul><li><p>variables</p></li><li><p>conditionals</p></li><li><p>loops</p></li><li><p>functions</p></li><li><p>data structures</p></li><li><p>core programming patterns</p></li></ul><p>Once you understand these principles, you can reason about almost any programming language.</p><p>AI can help fill in the implementation details.</p><div><hr></div><h1>Traditional Engineer vs AI-Assisted Engineer</h1><p>The traditional mindset was simple:</p><blockquote><p>Master everything. Build everything yourself.</p></blockquote><p>The new mindset is different:</p><blockquote><p>Understand the fundamentals and leverage AI effectively.</p></blockquote><p>AI doesn&#8217;t replace judgment.</p><p>It <strong>amplifies it</strong>.</p><p>The real skill now lies in deciding:</p><ul><li><p>what problem to solve</p></li><li><p>what solution to design</p></li><li><p>what output is good enough</p></li></ul><div><hr></div><h1>Different Ways to Work With AI</h1><p>In practice, I&#8217;ve found three approaches useful.</p><h3>Vibe Coding</h3><p>Great for experimentation and quick prototyping.</p><p>You move fast, explore ideas, and get unstuck quickly.</p><div><hr></div><h3>Spec-Driven Development</h3><p>Better suited for production environments where clear specifications and predictable outcomes matter.</p><div><hr></div><h3>AI Agents</h3><p>Autonomous assistants that can execute multi-step tasks toward a defined goal.</p><div><hr></div><p>Each approach has its place.</p><p>The new skill is knowing <strong>when to use which one.</strong></p><div><hr></div><h1>The Real Shift: Supply and Demand</h1><p>Traditionally, the most valuable skill in software engineering was the ability to <strong>build solutions</strong>.</p><p>But AI is rapidly lowering the barrier to building.</p><p>Today, more people can:</p><ul><li><p>write code</p></li><li><p>switch tech stacks</p></li><li><p>generate unit tests</p></li><li><p>access best practices</p></li><li><p>create documentation</p></li></ul><p>&#8230;without spending months learning every detail.</p><p>This shifts the value of engineering work.</p><p>The emphasis is gradually moving toward:</p><ul><li><p><strong>designing the right solutions</strong></p></li><li><p><strong>ensuring system quality</strong></p></li><li><p><strong>delivering meaningful impact</strong></p></li></ul><p>Implementation is becoming easier.</p><p><strong>Judgment is becoming more valuable.</strong></p><div><hr></div><h1>Final Thought</h1><p>AI didn&#8217;t remove the need for engineers.</p><p>But it <strong>changed the shape of the job</strong>.</p><p>The future developer may write less code manually but will spend far more time thinking about problems, designing solutions, and orchestrating systems.</p><p>In a world where building is easier than ever, the real advantage isn&#8217;t typing faster.</p><p>It&#8217;s <strong>thinking better.</strong></p>]]></content:encoded></item></channel></rss>