<?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[DevKoan]]></title><description><![CDATA[The tools, path, and mindset to go from zero to your first app.]]></description><link>https://devkoan.substack.com</link><image><url>https://substackcdn.com/image/fetch/$s_!Q59U!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5346a1-68d1-48fb-bf0a-aeff5889f55b_400x400.png</url><title>DevKoan</title><link>https://devkoan.substack.com</link></image><generator>Substack</generator><lastBuildDate>Tue, 07 Apr 2026 01:52:03 GMT</lastBuildDate><atom:link href="https://devkoan.substack.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[DevKoan]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[devkoan@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[devkoan@substack.com]]></itunes:email><itunes:name><![CDATA[DevKoan]]></itunes:name></itunes:owner><itunes:author><![CDATA[DevKoan]]></itunes:author><googleplay:owner><![CDATA[devkoan@substack.com]]></googleplay:owner><googleplay:email><![CDATA[devkoan@substack.com]]></googleplay:email><googleplay:author><![CDATA[DevKoan]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Why Your First Project Should Be Embarrassingly Bad]]></title><description><![CDATA[My first project crashed on rotation, had a hardcoded API key, and an icon I made in PowerPoint. It was the most important thing I ever built.]]></description><link>https://devkoan.substack.com/p/why-your-first-app-should-be-embarrassingly</link><guid isPermaLink="false">https://devkoan.substack.com/p/why-your-first-app-should-be-embarrassingly</guid><dc:creator><![CDATA[DevKoan]]></dc:creator><pubDate>Mon, 06 Apr 2026 11:42:47 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Q59U!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8d5346a1-68d1-48fb-bf0a-aeff5889f55b_400x400.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>#3 &#183; &#129504; Mindset &#183; <a href="https://devkoan.substack.com/p/start-here?r=84w2xe">See the full roadmap &#8594;</a></p><div><hr></div><p>My first project had a hardcoded API key in the source code. The navigation crashed if you rotated your phone. The icon was something I made in PowerPoint.</p><p>I shipped it anyway. It got maybe 12 downloads, most of them from my family. I&#8217;m pretty sure my mom downloaded it twice because she thought the first one didn&#8217;t work.</p><p>That project was terrible. It was also the most important thing I ever built.</p><h2>The perfectionism trap</h2><p>I talk to a lot of junior developers who have been &#8220;working on&#8221; their first project for six months, a year, sometimes longer. They&#8217;re still tweaking it. Still refactoring. Still reading about the &#8220;correct&#8221; architecture before writing more code.</p><p>They&#8217;re not building. They&#8217;re hiding.</p><p>I get it. Putting something out there with your name on it is scary. What if people judge it? What if other developers look at the code and think you&#8217;re bad at this? What if it gets a one-star review &#8212; or worse, no reaction at all?</p><p>Here&#8217;s what actually happens: nobody cares. Not in a mean way. In a freeing way. Whether it&#8217;s an app on the store, a tool on GitHub, or a side project on your portfolio &#8212; your first one will be invisible. Nobody is going to find it and judge you.</p><h2>What shipping teaches you that building doesn&#8217;t</h2><p>There&#8217;s a set of skills you can only learn by actually releasing something. Not by reading about releasing. Not by planning to release. By doing it.</p><p>You learn how deployment works &#8212; the real version, not the documentation version. You learn that your project breaks in environments you didn&#8217;t test in. You learn that the feature you spent two weeks on doesn&#8217;t get used, and the thing you threw in last-minute is the one people mention.</p><p>You learn that real users do things you never imagined. They click things you didn&#8217;t expect. They enter text in fields you thought were obvious. They find bugs in features you were sure were solid.</p><p>None of this happens while it&#8217;s sitting in a private repo.</p><h2>&#8220;But it&#8217;s not ready&#8221;</h2><p>It&#8217;s not. It won&#8217;t be. That&#8217;s fine. Ship it anyway.</p><p>Your code six months from now won&#8217;t be good enough either, by the standards of you-in-two-years. This never stops. If you wait until your code is good enough, you will wait forever, because the finish line keeps moving as you improve.</p><p>The developer who shipped ten bad projects and learned from each one is in a completely different place than the developer who spent the same time perfecting one project that nobody ever used.</p><p>I still cringe when I look at my old code. That cringing is evidence that I&#8217;ve grown. If you look at code you wrote six months ago and you&#8217;re NOT embarrassed, that&#8217;s the worrying sign &#8212; it means you haven&#8217;t improved.</p><h2>Just ship the thing</h2><p>If you have a side project sitting in a private repo right now &#8212; half-finished, messy, not quite ready &#8212; I want you to seriously consider shipping it. This week. As-is.</p><p>It doesn&#8217;t need to be good. The act of shipping it will teach you things that six more months of building never will.</p><p>Your second project will be better. Your third will be better than that. But none of them happen until the first one is out the door.</p><p>Make it embarrassingly bad. Ship it. Move on. That&#8217;s how this works.</p><div><hr></div><p>&#8592; Previous: <a href="https://devkoan.substack.com/p/git-in-20-minutes-the-safety-net?r=84w2xe">Git in 20 minutes</a> &#8594; Next: The #1 reason junior devs burn out <em>(coming soon)</em></p><p>&#128204; <a href="https://devkoan.substack.com/p/start-here?r=84w2xe">See the full roadmap &#8594;</a></p><div><hr></div><p><em>devkoan &#183; Build it. Ship it. Earn from it.</em> <em>Every week: one tool, one lesson, one step forward.</em> <em>Hit reply if something here helped. I read every one.</em></p><p><em>I&#8217;ve shipped over 20 projects in the past decade. The first few were awful. I wrote down every mistake I made along the way &#8212; 100 of them, collected into a free guide for junior developers. Download it &#8594; <a href="https://devkoan.gumroad.com/l/wtxarn">devkoan.gumroad.com</a></em></p>]]></content:encoded></item><item><title><![CDATA[Git in 20 Minutes: The Safety Net You’ll Wish You Had Sooner]]></title><description><![CDATA[I lost two weeks of work before I learned this. You don&#8217;t have to.]]></description><link>https://devkoan.substack.com/p/git-in-20-minutes-the-safety-net</link><guid isPermaLink="false">https://devkoan.substack.com/p/git-in-20-minutes-the-safety-net</guid><dc:creator><![CDATA[DevKoan]]></dc:creator><pubDate>Mon, 06 Apr 2026 11:31:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!4j3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic" 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_!4j3S!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!4j3S!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!4j3S!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!4j3S!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!4j3S!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!4j3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:588304,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://devkoan.substack.com/i/193147265?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!4j3S!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!4j3S!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!4j3S!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!4j3S!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2f937e0c-8938-4d9e-a91d-54bb1527939f_2752x1536.heic 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>#2 &#183; &#128736; Build it &#183; <a href="https://devkoan.substack.com/p/start-here?r=84w2xe">See the full roadmap &#8594;</a></p><div><hr></div><p>Last week I gave you the map. Four steps to go from &#8220;I want to build an app&#8221; to actually building one. The third step was Git. And I promised I&#8217;d explain it properly.</p><p>So here it is. No jargon tour. No history lesson about Linus Torvalds. Just what Git does, why you need it before you write anything you care about, and how to start using it today.</p><h2>What Git actually is</h2><p>Git is a save system for your code. That&#8217;s it.</p><p>You know how in a video game you save before a boss fight? So if you die, you don&#8217;t have to replay the whole level? Git does that for your project.</p><p>Every time you reach a point where things are working &#8212; or even just a point where you want to remember what you did &#8212; you create a save point. Git calls these &#8220;commits.&#8221; You can have hundreds of them. And you can go back to any of them at any time.</p><p>I didn&#8217;t use Git for my first six months of coding. During that time, I broke my app so badly that I couldn&#8217;t undo it. I lost two weeks of work. Then I did it again three weeks later. Different project, same gut-punch feeling of watching your progress disappear.</p><p>After the second time, I spent 20 minutes learning Git. I haven&#8217;t lost work since.</p><h2>Why beginners skip it</h2><p>Because it feels like extra work. You&#8217;re already struggling to learn Swift or Python or whatever language you picked. Adding another tool on top feels like overhead.</p><p>I get that. But Git doesn&#8217;t slow you down. It makes you faster. Because once you have it, you can experiment freely. You can try something wild, and if it breaks everything, you roll back to your last save point in ten seconds.</p><p>Without Git, every experiment is risky. You start second-guessing yourself. &#8220;What if I break something?&#8221; So you play it safe. You don&#8217;t try things. That fear quietly slows down your learning more than any tool ever will.</p><h2>The only five commands you need</h2><p>There are hundreds of Git commands. You need five. Maybe six if you&#8217;re feeling adventurous.</p><p><code>git init</code> &#8212; Run this once, in your project folder. It tells Git to start watching this folder. You&#8217;ll never run it again for that project.</p><p><code>git add .</code> &#8212; This stages your changes. Think of it as putting files into a box before you seal it. The dot means &#8220;everything that changed.&#8221;</p><p><code>git commit -m "your message"</code> &#8212; This seals the box. The message is your note to your future self. &#8220;Added login screen&#8221; or &#8220;Fixed crash on rotate&#8221; or &#8220;I have no idea why this works but it does.&#8221; Be honest. Nobody grades these.</p><p><code>git log</code> &#8212; Shows you all your save points. Newest first. Each one has your message, a timestamp, and a long ugly ID you can use to go back to it.</p><p><code>git checkout</code> &#8212; Go back to an earlier save point. This is the undo button. The one that saves you at 11 PM when you&#8217;ve broken everything and you just want to go back to the version that worked an hour ago.</p><p>That&#8217;s the whole workflow. <code>init</code> once, then <code>add</code>, <code>commit</code>, repeat. Check <code>log</code> when you need to see where you&#8217;ve been. Use <code>checkout</code> when you need to go back.</p><h2>The 20-minute setup</h2><p>Here&#8217;s exactly what to do. Right now, if you have a project.</p><p>Open Terminal on your Mac. If you&#8217;ve never opened it before, hit Command + Space and type &#8220;Terminal.&#8221;</p><p>Go to your project folder. If your project is on your Desktop in a folder called MyApp, type:</p><pre><code><code>cd ~/Desktop/Document/MyApp</code></code></pre><p>Then:</p><pre><code><code>git init
git add .
git commit -m "first save"</code></code></pre><p>You&#8217;re done. You have your first save point. Your project is now protected. If you break something tomorrow, you can come back to this exact moment.</p><p>Going forward, every time you finish something &#8212; a feature, a bug fix, even just an hour of work &#8212; run:</p><pre><code><code>git add .
git commit -m "describe what you did"</code></code></pre><p>That&#8217;s the habit. Two commands. Takes five seconds. Saves you hours of pain.</p><h2>What about GitHub?</h2><p>GitHub is not Git. This confuses everyone.</p><p>Git lives on your computer. It&#8217;s local. GitHub is a website where you can upload your Git history so it&#8217;s backed up online and other people can see it.</p><p>You don&#8217;t need GitHub right now. Git alone is enough. When you&#8217;re ready to share your code or back it up to the cloud, GitHub is the natural next step. But don&#8217;t let that stop you from using Git locally today.</p><p>One thing at a time.</p><h2>The commit message that saved me</h2><p>I want to tell you a quick story about why good commit messages matter.</p><p>About three years in, I was working on an app and something broke. A feature that had been working for weeks suddenly wasn&#8217;t. I opened my git log and scrolled through my commits. Most of them said things like &#8220;update&#8221; or &#8220;fix&#8221; or &#8220;changes.&#8221; Useless.</p><p>Then I found one that said &#8220;added background refresh &#8212; works but needs error handling.&#8221; That was the one. I&#8217;d added background refresh, and the error handling I&#8217;d skipped was now causing the crash.</p><p>I found the bug in two minutes because past-me had written a decent commit message. If that commit had just said &#8220;update,&#8221; I would have spent an hour hunting.</p><p>Write messages for future-you. Future-you is tired and confused and just wants to find the problem. Help them out.</p><h2>Next week</h2><p>We&#8217;ve covered the map (what to learn), and the safety net (how to save your work). Next: building something. Your first small, ugly, functional app &#8212; and why it matters more than any tutorial you&#8217;ll ever watch.</p><div><hr></div><p>&#8592; Previous: <a href="https://devkoan.substack.com/p/the-map-nobody-gave-me?r=84w2xe">The map nobody gave me</a> &#8594; Next: Why your first app should be embarrassingly bad</p><p>&#128204; <a href="https://devkoan.substack.com/p/start-here?r=84w2xe">See the full roadmap &#8594;</a></p><div><hr></div><p><em>devkoan &#183; Build it. Ship it. Earn from it.</em> <em>Every week: one tool, one lesson, one step forward.</em> <em>Hit reply if something here helped. I read every one.</em></p><p><em>I&#8217;ve documented 100 mistakes from 10 years of building apps &#8212; the ones I made and the ones I watched junior developers make. Grab the free guide &#8594; <a href="https://devkoan.gumroad.com/l/wtxarn">devkoan.gumroad.com</a></em></p>]]></content:encoded></item><item><title><![CDATA[The Map Nobody Gave Me]]></title><description><![CDATA[I had the idea. I had the laptop. I had no idea where to start.]]></description><link>https://devkoan.substack.com/p/the-map-nobody-gave-me</link><guid isPermaLink="false">https://devkoan.substack.com/p/the-map-nobody-gave-me</guid><dc:creator><![CDATA[DevKoan]]></dc:creator><pubDate>Sat, 04 Apr 2026 09:01:46 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!sVbe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic" 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_!sVbe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!sVbe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!sVbe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!sVbe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!sVbe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!sVbe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:591875,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://devkoan.substack.com/i/193149069?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!sVbe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!sVbe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!sVbe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!sVbe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F11156ba7-dbaa-45f5-b039-7f1dbf3ad325_2752x1536.heic 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>#1 &#183; &#128736; Build it &#183; <a href="https://devkoan.substack.com/p/start-here?r=84w2xe">See the full roadmap &#8594;</a></p><div><hr></div><p>The first time I wanted to build an app, I sat down, opened my MacBook, and thought: okay. Let&#8217;s do this.</p><p>Then I opened Google.</p><p>Four hours later I had 47 tabs open. Three different programming languages downloaded. Two YouTube tutorials paused halfway through. And zero lines of code.</p><p>I wasn&#8217;t lazy. I wasn&#8217;t stupid. I just didn&#8217;t have a map.</p><p>Nobody had shown me what the territory looked like before I started walking into it.</p><div><hr></div><p>The problem with googling &#8220;how to make an app&#8221; &#8212; you get answers meant for people who already know the shape of the thing.</p><p>Swift or Objective-C? Xcode or VS Code? UIKit or SwiftUI? Bootcamp or self-taught? Start with fundamentals or just build something?</p><p>Every single one of those is a real question with a real answer. But when you don&#8217;t know what any of those words mean yet, the answer to each question just opens three more questions. You spend four hours clicking and reading and watching and at the end of it you feel less ready than when you started.</p><p>That&#8217;s not a knowledge problem. That&#8217;s a sequencing problem.</p><p>The information exists. There&#8217;s more of it than you&#8217;ll ever need. The problem is nobody tells you what order to learn it in.</p><div><hr></div><p>I&#8217;ve been building iOS apps solo for 10 years. Twenty-something shipped. I&#8217;ve made every mistake you can make in this process and kept notes on most of them.</p><p>The thing I wish someone had told me on day one isn&#8217;t a tip or a trick. It&#8217;s this: the tools matter less than the order you learn them in.</p><p>Most beginners try to learn everything at once. Or they pick the &#8220;best&#8221; tool before they understand what any of the tools do. That&#8217;s like buying the best hiking boots before you know whether you&#8217;re going to the mountains or the beach.</p><p>Figure out where you&#8217;re going first. Then pick the tools.</p><div><hr></div><p>If I were starting over today and wanted to build iOS apps, here&#8217;s the exact order I&#8217;d go:</p><p><strong>First: get somewhere to write.</strong> Download Xcode. It&#8217;s free. It&#8217;s made by Apple. It lives on your Mac. This is where you&#8217;ll spend most of your time for the next few years so you might as well meet it now. Don&#8217;t try to understand it yet. Just install it and open it. That&#8217;s the whole step.</p><p><strong>Second: learn one language.</strong> Swift. Not Objective-C, not Python, not JavaScript. Swift. It&#8217;s what Apple uses, it&#8217;s what iOS apps are written in, and it&#8217;s well-designed for beginners. The debate about which language to learn first is real and completely irrelevant to you right now. Swift. One thing.</p><p><strong>Third: learn to save your work properly.</strong> This is Git. It creates checkpoints in your code so that when you break something (you will, constantly, that&#8217;s normal) you can go back. I skipped this when I started. Lost two weeks of work. Then did it again. Then I started using Git and I&#8217;ve never lost work since. Set this up before you write anything you care about.</p><p><strong>Fourth: build something small and ugly.</strong> Not impressive. Not portfolio-worthy. Just something that runs on your phone and does one thing. A timer. A list. A button that plays a sound. The goal isn&#8217;t the app. The goal is going through the full process once so it stops feeling like a mystery.</p><p>That&#8217;s the map. Four steps. Everything else builds on top of those four things.</p><div><hr></div><p>Over the next few issues I&#8217;m going to go deep on each piece of this.</p><p>Next week: Git. What it actually is, why it matters more than most beginners think, and how to get started with it in under 20 minutes even if you&#8217;ve never used a command line before.</p><p>If you know someone who&#8217;s been saying &#8220;I want to build an app&#8221; for the past year and hasn&#8217;t started yet, forward this to them. This is exactly where they need to begin.</p><div><hr></div><p>&#8594; Next: Git in 20 minutes: the safety net you&#8217;ll wish you had sooner</p><p>&#128204; <a href="https://devkoan.substack.com/p/start-here?r=84w2xe">See the full roadmap &#8594;</a></p><div><hr></div><p><em>devkoan &#183; Build it. Ship it. Earn from it.</em> <em>Every week: one tool, one lesson, one step forward.</em> <em>Hit reply if something here helped. I read every one.</em></p><p><em>I&#8217;ve documented 100 mistakes from 10 years of building apps &#8212; the ones I made and the ones I watched junior developers make. Grab the free guide &#8594; <a href="https://devkoan.gumroad.com/l/wtxarn">devkoan.gumroad.com</a></em></p>]]></content:encoded></item><item><title><![CDATA[Start here]]></title><description><![CDATA[The complete roadmap from idea to earning app &#8212; every article in order.]]></description><link>https://devkoan.substack.com/p/start-here</link><guid isPermaLink="false">https://devkoan.substack.com/p/start-here</guid><dc:creator><![CDATA[DevKoan]]></dc:creator><pubDate>Sat, 04 Apr 2026 08:58:12 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!7XCf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic" 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_!7XCf!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!7XCf!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!7XCf!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!7XCf!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!7XCf!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!7XCf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic" width="1456" height="813" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:813,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:599820,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/heic&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://devkoan.substack.com/i/193148874?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!7XCf!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 424w, https://substackcdn.com/image/fetch/$s_!7XCf!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 848w, https://substackcdn.com/image/fetch/$s_!7XCf!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 1272w, https://substackcdn.com/image/fetch/$s_!7XCf!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc6755d2f-77b3-441e-bdce-7db0edd1dec6_2752x1536.heic 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></p><p>You have an app idea. Maybe you&#8217;ve had it for months. Maybe you&#8217;ve started and stopped three times. Maybe you just don&#8217;t know what to do first.</p><p>This newsletter is the map.</p><p>I&#8217;m a solo iOS developer with 10 years and 20+ shipped apps behind me. I write one article a week covering everything from writing your first line of code to making your first dollar on the App Store. No fluff. Just what I actually did and what I learned from getting it wrong.</p><p>Here&#8217;s the full roadmap. Read in order, or jump to whatever you&#8217;re stuck on right now.</p><div><hr></div><h3>&#128736; Build it &#8212; how to actually make the thing</h3><p>The tools, the setup, the implementation. In the order you&#8217;ll need them.</p><ol><li><p>The map nobody gave me &#128736;</p></li><li><p>Git in 20 minutes: the safety net you&#8217;ll wish you had sooner &#128736;</p></li><li><p>StoreKit in plain English <em>(coming soon)</em> &#128736;</p></li><li><p>Push notifications without annoying your users <em>(coming soon)</em> &#128736;</p></li><li><p>CloudKit vs Firebase &#8212; what I actually use <em>(coming soon)</em> &#128736;</p></li></ol><div><hr></div><h3>&#129504; Mindset &#8212; how to think like a developer</h3><p>These aren&#8217;t pep talks. They&#8217;re the mental shifts that took me years to figure out and minutes to explain.</p><ol start="3"><li><p>Why your first app should be embarrassingly bad &#129504;</p></li><li><p>The #1 reason junior devs burn out &#8212; and it&#8217;s not the workload &#129504;</p></li><li><p>Why copying code from Stack Overflow is a skill (not a shame) &#129504;</p></li><li><p>The meeting skill no coding bootcamp teaches you &#129504;</p></li><li><p>Stop asking &#8220;is this the right way?&#8221; &#8212; here&#8217;s what to ask instead &#129504;</p></li></ol><div><hr></div><h3>&#128640; Ship it &#8212; how to get it out the door</h3><p>Building is half the work. The other half is everything between &#8220;it works on my phone&#8221; and &#8220;it&#8217;s live on the App Store.&#8221;</p><ol start="4"><li><p>The only App Store listing that actually converts <em>(coming soon)</em> &#128640;</p></li><li><p>The week before launch checklist <em>(coming soon)</em> &#128640;</p></li><li><p>How to get reviews without begging <em>(coming soon)</em> &#128640;</p></li></ol><div><hr></div><h3>&#128176; Earn from it &#8212; how to make money</h3><p>The part nobody talks about until it&#8217;s too late.</p><ol start="8"><li><p>How to price your app &#8212; I got this wrong twice <em>(coming soon)</em> &#128176;</p></li><li><p>How I got my first 100 users without ads <em>(coming soon)</em> &#128176;</p></li><li><p>Making your first dollar on the App Store <em>(coming soon)</em> &#128176;</p></li></ol><div><hr></div><p>New here? Start with #1 and work down. Already building? Jump to wherever you&#8217;re stuck.</p><p>Every article ends with a link to my free guide &#8212; 100 mistakes from 10 years of building apps. Grab it anytime &#8594; <a href="https://devkoan.gumroad.com/l/wtxarn">devkoan.gumroad.com/l/wtxarn</a></p><div><hr></div><p><em>devkoan &#183; Build it. Ship it. Earn from it.</em> <em>Every week: one tool, one lesson, one step forward.</em> <em>Hit reply if something here helped. I read every one.</em></p>]]></content:encoded></item></channel></rss>