<?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[tomdev's notes]]></title><description><![CDATA[hey im tom de villiers otherwise known as tomdev, im a software engineer at amazon. these are my notes on software engineering, systems, learning at scale, what i did right, what i'd do differently and occasionally my thoughts on life]]></description><link>https://www.tomdev.blog</link><image><url>https://substackcdn.com/image/fetch/$s_!-7Mv!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe5fff54-446a-4ce9-8a75-ecf69a4985ec_500x500.png</url><title>tomdev&apos;s notes</title><link>https://www.tomdev.blog</link></image><generator>Substack</generator><lastBuildDate>Fri, 03 Apr 2026 17:32:26 GMT</lastBuildDate><atom:link href="https://www.tomdev.blog/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Thomas De Villiers]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[tomdev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[tomdev@substack.com]]></itunes:email><itunes:name><![CDATA[Tom De Villiers]]></itunes:name></itunes:owner><itunes:author><![CDATA[Tom De Villiers]]></itunes:author><googleplay:owner><![CDATA[tomdev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[tomdev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Tom De Villiers]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[exactly how i'd escape tutorial hell if i had to do it again]]></title><description><![CDATA[step by step - full guide]]></description><link>https://www.tomdev.blog/p/exactly-how-id-escape-tutorial-hell</link><guid isPermaLink="false">https://www.tomdev.blog/p/exactly-how-id-escape-tutorial-hell</guid><dc:creator><![CDATA[Tom De Villiers]]></dc:creator><pubDate>Sat, 21 Feb 2026 08:28:17 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a80fdcb0-0d67-4899-b769-b5bdff055add_1063x505.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>watching &amp; following tutorials feels productive and that is the problem, at least it was for me.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VIfo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VIfo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 424w, https://substackcdn.com/image/fetch/$s_!VIfo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 848w, https://substackcdn.com/image/fetch/$s_!VIfo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 1272w, https://substackcdn.com/image/fetch/$s_!VIfo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VIfo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png" width="1456" height="430" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:430,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:150988,&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.tomdev.blog/i/188692158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.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_!VIfo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 424w, https://substackcdn.com/image/fetch/$s_!VIfo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 848w, https://substackcdn.com/image/fetch/$s_!VIfo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.png 1272w, https://substackcdn.com/image/fetch/$s_!VIfo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F61bbcf12-d560-409f-a296-f75f9393502f_1611x476.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><p>i felt like every tutorial was going to be the last one and that once i&#8217;d completed this last 6 hour react tutorial i&#8217;d be able to build anything, obviously that was not the case.</p><p>i would grind through the tutorial, copying the code step by step, even typing along with the video to feel extra productive but alas the second i start building my own project and i ran into a bug i was stuck, straight to chatgpt for an answer (which is a whole other topic on its own btw). </p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iP4W!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iP4W!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 424w, https://substackcdn.com/image/fetch/$s_!iP4W!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 848w, https://substackcdn.com/image/fetch/$s_!iP4W!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 1272w, https://substackcdn.com/image/fetch/$s_!iP4W!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iP4W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png" width="1456" height="361" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:361,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:101718,&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;:false,&quot;internalRedirect&quot;:&quot;https://www.tomdev.blog/i/188692158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.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_!iP4W!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 424w, https://substackcdn.com/image/fetch/$s_!iP4W!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 848w, https://substackcdn.com/image/fetch/$s_!iP4W!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 1272w, https://substackcdn.com/image/fetch/$s_!iP4W!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd8b340ac-f5f8-441c-8041-5cef09478b55_1579x391.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>dont get me wrong though, this can be a great way to get the absolute basics of language or topic, a high level overview is always a great way to begin learning something new but if you really want to deeply understand something tutorials that guide you every step of the way are not the way i&#8217;d go.</p><p>so what now? no tutorials? yes that&#8217;s right. im going to limit you to at absolute maximum 2 tutorials when you are starting to learn something new, lets take react as an example. there are hundreds of javascript basics tutorials all over the internet, watch two of those and then come back here. no more than two, okay?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!AIP5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!AIP5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 424w, https://substackcdn.com/image/fetch/$s_!AIP5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 848w, https://substackcdn.com/image/fetch/$s_!AIP5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 1272w, https://substackcdn.com/image/fetch/$s_!AIP5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!AIP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png" width="1456" height="502" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/bc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:502,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57979,&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;:false,&quot;internalRedirect&quot;:&quot;https://www.tomdev.blog/i/188692158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.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_!AIP5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 424w, https://substackcdn.com/image/fetch/$s_!AIP5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 848w, https://substackcdn.com/image/fetch/$s_!AIP5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 1272w, https://substackcdn.com/image/fetch/$s_!AIP5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fbc4ad9a5-26ce-40f3-bf52-6a27850d1033_1492x514.png 1456w" sizes="100vw"></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><br>now that we&#8217;ve got the basics out of the way, you have a high level overview of the language, we are still going with javascript, so you understand the basics of javascript and now you need to solidify this knowledge in your brain. in a past life i&#8217;d jump straight into another tutorial and follow it step by step and feel super productive, or so i thought&#8230;</p><p>the next step is something i learnt a while ago from another blog i read and its called question driven development, it sounds odd but give me a chance. what you&#8217;re going to do is think of a problem and then break it up into small, meaningful questions and then google (dont ask chatgpt) the answers to these questions to help you solve the overall problem. if you&#8217;re confused dont worry let&#8217;s do an example.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!E3_K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!E3_K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 424w, https://substackcdn.com/image/fetch/$s_!E3_K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 848w, https://substackcdn.com/image/fetch/$s_!E3_K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 1272w, https://substackcdn.com/image/fetch/$s_!E3_K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!E3_K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png" width="1456" height="256" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:256,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:93254,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.tomdev.blog/i/188692158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.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_!E3_K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 424w, https://substackcdn.com/image/fetch/$s_!E3_K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 848w, https://substackcdn.com/image/fetch/$s_!E3_K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 1272w, https://substackcdn.com/image/fetch/$s_!E3_K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F55159429-c3c8-4334-ada3-551ca7057bb6_1863x327.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>you google &#8216;beginner programming problems javascript&#8217; and tons of lists of projects and problems come up, to start off with try to keep the number of unique lines of code written to about 100 or so. now after scrolling through websites and problems i find one called &#8216;palindrome checker&#8217; for example, so now i&#8217;ll break this problem into smaller questions that will help me solve this problem.</p><p>if you&#8217;re very new your questions could be &#8216;how do i run javascript on my laptop&#8217; or &#8216;which is the best ide for javascript&#8217;, but once you&#8217;ve done this a few times, and i recommend doing it with at least 50 different problems if you&#8217;re serious about learning, then you could start asking questions like &#8216;how do i read in a string in javascript&#8217; and &#8216;how do i store a string in an array in javascript&#8217;, these questions are small parts of the full problem that will eventually lead you to an working solution for the &#8216;palindrome checker&#8217; problem. </p><p>something very important that i strongly believe is at the start of learning anything new chatgpt is not your friend, a large amount of the learning process occurs when you&#8217;re brain has to piece bits of information together to make it make sense to you since stackoverflow answers are not directly related to your problem.</p><p>the problem with chatgpt is it does all the hard work for you of simplifying information down to easy to understand, digestible parts. this is bad. its fine when you&#8217;ve forgotten how to do something but not when you&#8217;re trying to learn it and engrain it into your mind. this deserves a whole new blog in itself.</p><p>now that you&#8217;ve solved 50 small problems, its time to move onto the big leagues&#8230; i want you to go find 3-4 already existing websites that you think are cool and clone them. yes you heard that correctly, the nice thing about cloning already existing websites is that it leaves very little room for procrastination. no need to think of a good idea or design the UI from scratch. lets do another example.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YfGo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YfGo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 424w, https://substackcdn.com/image/fetch/$s_!YfGo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 848w, https://substackcdn.com/image/fetch/$s_!YfGo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 1272w, https://substackcdn.com/image/fetch/$s_!YfGo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YfGo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png" width="1456" height="259" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:259,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:94326,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.tomdev.blog/i/188692158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.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_!YfGo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 424w, https://substackcdn.com/image/fetch/$s_!YfGo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 848w, https://substackcdn.com/image/fetch/$s_!YfGo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 1272w, https://substackcdn.com/image/fetch/$s_!YfGo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb27b7a38-2bc1-4a83-a7d3-f15949895af3_1835x327.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>say i decide i want to clone the youtube homepage, what i&#8217;ll start doing is coming up with a plan and making use of question driven developer aka QDD again. i&#8217;m sure we are all familiar with youtube&#8217;s UI. i&#8217;ll start breaking it down into small parts.</p><p>so for starters there is the search bar, using QDD i&#8217;ll ask questions like &#8216;how do i create a search bar using html &amp; css&#8217; and then &#8216;how do i make a search bar functional using javascript&#8217; etc. and then ill continue to do this for each part of the homepage until i&#8217;ve got a solid plan, then ill just get to work. googling, implementing, fixing bugs, googling more, implementing more, and googling even more. no chatgpt.</p><p>once you&#8217;ve done this a couple times and i officially release you from your tutorial hell rehab, you can start building some more original projects from scratch.</p><p>but lets face it you are always going to need tutorials so the best way is to build a healthy relationship with them instead of becoming dependent on them.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!vJHb!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!vJHb!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 424w, https://substackcdn.com/image/fetch/$s_!vJHb!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 848w, https://substackcdn.com/image/fetch/$s_!vJHb!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 1272w, https://substackcdn.com/image/fetch/$s_!vJHb!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!vJHb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png" width="728" height="345.8513640639699" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:505,&quot;width&quot;:1063,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:42403,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.tomdev.blog/i/188692158?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!vJHb!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 424w, https://substackcdn.com/image/fetch/$s_!vJHb!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 848w, https://substackcdn.com/image/fetch/$s_!vJHb!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 1272w, https://substackcdn.com/image/fetch/$s_!vJHb!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef7acc04-8d66-43c1-a7c1-03e26e41050b_1063x505.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>generally what i like to do is make sure i&#8217;m always learning and then building right after, lets say im watching a video on how to build a navbar with react, right afterwards ill go build 3 very average navbars just to solidify it in my mind.</p><p>learn and then build. simple. if you learnt something subscribe!</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://www.tomdev.blog/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://www.tomdev.blog/subscribe?"><span>Subscribe now</span></a></p>]]></content:encoded></item><item><title><![CDATA[exactly how i'd get my first software engineering internship if i had to start from scratch]]></title><description><![CDATA[the zero bullshit guide - no gatekeeping.]]></description><link>https://www.tomdev.blog/p/exactly-how-id-get-my-first-software</link><guid isPermaLink="false">https://www.tomdev.blog/p/exactly-how-id-get-my-first-software</guid><dc:creator><![CDATA[Tom De Villiers]]></dc:creator><pubDate>Wed, 18 Feb 2026 18:07:30 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!-7Mv!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffe5fff54-446a-4ce9-8a75-ecf69a4985ec_500x500.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>honestly there was 2 ways i could approach this, option 1 would&#8217;ve been to just give super generic advice that seems like its helpful but when you really start trying to apply it it&#8217;s not and option 2, what i have decided to go with is to give incredibly practical, semi-unethical advice on how&#8217;d id go about getting my first software engineering internship if i had to start from scratch</p><p>firstly, just some of my credentials, im currently a software engineer at amazon web services, my team is responsible for this: <a href="https://health.aws.amazon.com/health/status">https://health.aws.amazon.com/health/status</a> and i interned at amazon last year where i worked on the algorithms behind amazon&#8217;s insane customer support experience, routing cases to the correct agent&#8217;s etc.</p><p>so since i said we are starting from scratch that is exactly where im going to start. i&#8217;m going to do this from my POV but obviously apply this to your own life.</p><p>since i&#8217;ve currently got absolutely nothing on my CV there are 2 places i&#8217;m going to start. firstly i&#8217;m going to start working on projects, and yes in 2026 i understand AI has increased the expectations of what a side project looks like but what i&#8217;ve found really impresses employers is having a project that is 1) deployed - meaning it&#8217;s live on a domain &amp; people can access it. even if absolutely nobody ever accesses it that does not matter. what matters is that for some reason when an employer can actually go to your site and use what you built it tends to get them all excited. 2) if i can manage to get a couple of people using it then that&#8217;s just extra points.</p><p>so by now i&#8217;ve worked on a couple projects, i&#8217;ve built a custom version of chess which im going to call obstacle chess where you are allowed to place bombs, walls and trap doors throughout the match, this has been deployed and can be accessed. i&#8217;ve used my creativity to show that i&#8217;m not just re-creating what can easily be found on google but adding my own spin to it.</p><p>now what i&#8217;m going to do is start looking for tangential jobs that don&#8217;t require software engineering experience, i&#8217;ve decided to start tutoring maths &amp; computer science to people in the year below me in university, initially i&#8217;ll offer to do it for free but then eventually i&#8217;ll start charging. this will look great on my CV.</p><p>something else i&#8217;m going to start doing is contacting every single person i know and asking them if they&#8217;d like me to re-do their website for free, i&#8217;m going to ask my uncle since he owns a construction business and his website could use some work, but i could genuinely ask anybody. great, I can now add &#8220;Junior Web Developer - Scribante Construction&#8221; to my CV, wow!</p><p>now that i&#8217;ve got a basic CV together, i&#8217;ve got 2 different work experiences listed, ive got a couple projects, i&#8217;ve got the degree im currently studying and all the technologies &amp; languages i know this is when i&#8217;ll start personally contacting small companies in my area, make sure you stay very local for now, asking if they&#8217;re consider hiring you to help with their IT, bonus points if there&#8217;s an software company near you. try to find the email&#8217;s of the higher up&#8217;s and send them an email directly with a short message and attach your CV.</p><p>realistically nobody&#8217;s first internship is that enjoyable, i know mine wasn&#8217;t, but its a stepping stone to getting into the big leagues.</p><p>once i&#8217;ve worked at around 2-3 local business during the holidays, potentially doing pretty lame, probably useless, but very valuable for my CV work this is when you have a good enough CV for it to stop being the bottle neck.</p><p>if you can check everything off this check list i&#8217;d say you&#8217;re good to start applying to proper software engineering internship roles.</p><ul><li><p>2-3 tangential roles related to software engineering at local/no-name companies</p></li><li><p>3-4 projects that are deployed (or were at a point)</p></li></ul><p>now the next step would be to start applying for roles and getting interviews.</p><p>genuinely i am going to just start applying everywhere, looking through linkedin, going to the career fair and socialising with recruiters, straight up just googling or asking chatgpt to find you roles to apply for. dont feel scared to apply for roles you think you aren&#8217;t cut out for, let them reject you instead of you rejecting yourself.</p><p>patience is definitely key here but throughout this process of applying for roles i&#8217;d be preparing for the interview when i eventually get one.</p><p>what that looks like for me is first following this blog post to the tee: </p><p><a href="https://interviewguide.dev/">https://interviewguide.dev/</a></p><p>not even going to lie and say i can explain how to interview better than the guide above can, go give it a read after this, it helped me so much. so much value in one blog post.</p><p>another great resource for getting cracked at leetcode is </p><p><a href="https://neetcode.io/">https://neetcode.io/</a></p><p>i paid for the pro-subscription and i was on the fence initially but that investment has produced 100x returns since it helped me eventually secure a full-time role at amazon.</p><p>once you&#8217;ve smashed the interview and secured the role you&#8217;ve basically got your foot in the door.</p><p>building up your CV and experience is a long process but one that will pay you back 100s of times over in the future. you are front-loading the effort now in order to reap the benefits later in life.</p><p>i hope this guide was semi-helpful and a break from the generic bullshit you normally see online from people trying to explain how to get your first internship. i am not gate-keeping any information. i want you to succeed as bad as i want myself to succeed</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.tomdev.blog/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 making it this far, this was my first ever post so if you&#8217;d like to motivate me to write more please consider subscribing xD</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></channel></rss>