<?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[Mohamed Ashour]]></title><description><![CDATA[A Generalist's perspective on Software Engineering, Space, and Philosophy in one place. Some from experience, others from random ideas while I'm walking around.]]></description><link>https://blog.m-ashour.space</link><image><url>https://substackcdn.com/image/fetch/$s_!_Ssp!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7adf6629-5d83-4712-aefe-d54ad34f3ab5_853x853.png</url><title>Mohamed Ashour</title><link>https://blog.m-ashour.space</link></image><generator>Substack</generator><lastBuildDate>Tue, 05 May 2026 05:09:39 GMT</lastBuildDate><atom:link href="https://blog.m-ashour.space/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Mohamed Ashour]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[mashour94@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[mashour94@substack.com]]></itunes:email><itunes:name><![CDATA[Mohamed Ashour]]></itunes:name></itunes:owner><itunes:author><![CDATA[Mohamed Ashour]]></itunes:author><googleplay:owner><![CDATA[mashour94@substack.com]]></googleplay:owner><googleplay:email><![CDATA[mashour94@substack.com]]></googleplay:email><googleplay:author><![CDATA[Mohamed Ashour]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[False: Why Dwight Schrute Is a Great Engineer in this Age of LLMs]]></title><description><![CDATA[This might sound like a joke at first.]]></description><link>https://blog.m-ashour.space/p/false-why-dwight-schrute-is-a-great</link><guid isPermaLink="false">https://blog.m-ashour.space/p/false-why-dwight-schrute-is-a-great</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 22 Feb 2026 19:34:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RE4o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.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_!RE4o!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RE4o!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 424w, https://substackcdn.com/image/fetch/$s_!RE4o!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 848w, https://substackcdn.com/image/fetch/$s_!RE4o!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 1272w, https://substackcdn.com/image/fetch/$s_!RE4o!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RE4o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png" width="1240" height="655" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:655,&quot;width&quot;:1240,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:965590,&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://blog.m-ashour.space/i/188818801?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.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_!RE4o!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 424w, https://substackcdn.com/image/fetch/$s_!RE4o!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 848w, https://substackcdn.com/image/fetch/$s_!RE4o!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.png 1272w, https://substackcdn.com/image/fetch/$s_!RE4o!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc1110d0a-4067-4208-aba6-9e87bcb77ff9_1240x655.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>This might sound like a joke at first. But if you think about it, In these days, we tend to celebrate the Michael Scotts of the tech world - the enthusiastic early adopters, the ones who hype every new tool and move fast. But in the age of LLMs, I'd argue the engineer you actually need is Dwight Schrute.</p><p>Dwight Schrute would be an insufferable person to work with in the age of LLMs. He'd question every output, verify every claim, refuse to trust anything the model says without cross-referencing it himself, and probably have a 40-page threat model for your company chatbot. And honestly? That's exactly the kind of engineer I want on my team right now.</p><p>Let&#8217;s dive a bit deeper into each side of his character.</p><h3>Dwight questions everything.</h3><p>One of the good characteristics of Dwight is that he trusts verification over assumptions; he doesn&#8217;t take stuff at face value. If an LLM tells him information about something, he would verify it either with his own knowledge or his great research ability. You know who would take anything that an LLM gives without a second thought? Michael! </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CSkl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CSkl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 424w, https://substackcdn.com/image/fetch/$s_!CSkl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 848w, https://substackcdn.com/image/fetch/$s_!CSkl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 1272w, https://substackcdn.com/image/fetch/$s_!CSkl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CSkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png" width="500" height="470" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/fc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:470,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:400761,&quot;alt&quot;:&quot;Dwight schrute false - dwight schrute post - Imgur&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Dwight schrute false - dwight schrute post - Imgur" title="Dwight schrute false - dwight schrute post - Imgur" srcset="https://substackcdn.com/image/fetch/$s_!CSkl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 424w, https://substackcdn.com/image/fetch/$s_!CSkl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 848w, https://substackcdn.com/image/fetch/$s_!CSkl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.png 1272w, https://substackcdn.com/image/fetch/$s_!CSkl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ffc56edc7-1fd4-4f94-a246-ba7d517733ac_500x470.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>If you remember, Dwight has his famous word &#8220;False&#8221; when he fact-checks something. And that instinct is exactly what working with AI requires. LLMs are famously confident even when they&#8217;re completely wrong. The major labs are working into decrease the hallucinations in these LLMS but that problem is still not solved. For example, they&#8217;ll cite papers that don&#8217;t exist, write code with subtle bugs baked in, and summarize things from the sources you provide even in the times that they couldn&#8217;t open these sources.Every output deserves a &#8220;False&#8221; until you&#8217;ve verified it yourself.</p><p>Michael would screenshot the response and paste it straight into the proposal. Dwight would fact-check it first.</p><h3>Dwight understands the fundamentals</h3><p>Beside being a top employee at Dunder Mifflin, he has side hustles that he operates with deep knowledge. For example, the Schrute farm, that he operates with deep expertise in farming. He has always the urge to learn things in depth and to be competent in them. This is key now when dealing with mass production machines like LLMs. Understanding the fundamentals makes you able to better drive and use these tools. If you are good at your craft, these tools will help you magnify that; if you are bad, it will magnify that as well.</p><h3>Dwight is skeptical of hype.</h3><p>In an industry that is drowning in AI hype, with all of these headlines saying AI will replace everything, Dwight will not buy this without looking more into it. He would be the total opposite of Michael in this situation, who will believe any hype and act on it as soon as he hears it.</p><h3>Dwight is always prepared (sometimes too seriously).</h3><p>Dwight's threat assessments were absurd, but the instinct was right. In the LLM era, prompt injection, data leakage, and model misuse are real attack surfaces. Dwight would be prepared for that, just as he was prepared for all the worst-case scenarios that could happen in the office. He would understand that as his work and systems, and daily routines started to rely on a third-party AI API, he needs to be prepared. And using his knowledge and abilities, he would be able to carry on if these tools failed to operate or started to fall behind in quality.</p><h3>He refuses to be replaced without a fight.</h3><p>When his job was threatened, Dwight didn&#8217;t panic or give up. He made sure to double down on what made him unique and valuable. This is a great trait that we need to look deeply into these days. AI is automating the generic; if that is all you have, then you need to search for your Schrute Farm equivalent or your deep expertise and Dwight-level depth of experience.</p><div><hr></div><p>The broader lesson Dwight teaches is that being genuinely, deeply competent in a rigorous way is what survives technological hype cycles and disruption. He&#8217;s not the coolest person in the room. But when things actually go wrong, everyone needs Dwight.</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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[The Pre-commit stage and the Defect cost in the world of AI]]></title><description><![CDATA[Quality Gates in the AI Code Generation Era]]></description><link>https://blog.m-ashour.space/p/the-pre-commit-stage-and-the-defect</link><guid isPermaLink="false">https://blog.m-ashour.space/p/the-pre-commit-stage-and-the-defect</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 04 Jan 2026 14:30:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!YGt2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>One broad truth you would see when you work on big enough systems is that finding problems earlier in the developer workflow usually reduces cost. The cost here is not only money, it is also time, customer impact, and the hidden tax of interrupts, context switching, and rushed fixes.</p><p>An engineering workflow mostly goes like the following </p><ol><li><p>Concept</p></li><li><p>Design</p></li><li><p>Development &amp; Testing</p></li><li><p>Commit &amp; Push</p></li><li><p>Integration and regression testing</p></li><li><p>Deployment</p></li></ol><p>The longer a problem stays undetected, the more more costly it becomes to your system, team, and the product. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!YGt2!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!YGt2!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 424w, https://substackcdn.com/image/fetch/$s_!YGt2!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 848w, https://substackcdn.com/image/fetch/$s_!YGt2!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 1272w, https://substackcdn.com/image/fetch/$s_!YGt2!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!YGt2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png" width="853" height="622" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d936e8af-561f-4f57-a227-47ce5344f127_853x622.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:622,&quot;width&quot;:853,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:35467,&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://blog.m-ashour.space/i/183437968?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.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_!YGt2!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 424w, https://substackcdn.com/image/fetch/$s_!YGt2!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 848w, https://substackcdn.com/image/fetch/$s_!YGt2!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.png 1272w, https://substackcdn.com/image/fetch/$s_!YGt2!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd936e8af-561f-4f57-a227-47ce5344f127_853x622.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></p><p>This is why in serious development life cycles and teams there is focus on tools to catch various types of problems as early as possible. Something like Pre-Commit hooks, linters, type checking, tests, and CI pipelines enforces the same standards and safety every time a change being added. Of course it would be perfect if we even can catch these issues before that.</p><p>I even argue that this matters even more now. With the current advancement of the AI tools, the speed and quantity of producing code started to surpass our ability to read and review the code with keen and careful eyes.</p><p>This situation requires us to put more time and effort into creating well established, strict guidelines and quality checks more than ever. This can be started with <a href="https://pre-commit.com/">pre-commit hooks</a> that watch both the correctness and style and carry through to the CI/CD.</p><p>Aside that, you also need to put guidelines on your code generation machine which is one step upstream. Right now, you can setup agent rules and instructions in every major AI coding agent available. Many are converging on shared conventions like <a href="https://agents.md/">AGENTS.md</a>. A step further would be to create a separate agent that can read and review the generated code from your code generation agent and thus help you with finding problems at the same speed of the code generation.</p><p>This is a new era of the software development tools. AI reduces the cost of producing code, but it can increase the cost of validating it unless you move validation earlier. Treat your quality checks as part of the product: explicit standards, automated enforcement, and feedback that arrives while developers still have context.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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[My Notes on the Pursuit of Maturity as a Software Engineer.]]></title><description><![CDATA[As I grow in my career, I look more and more for ways to learn from experienced engineers and from their journeys.]]></description><link>https://blog.m-ashour.space/p/my-notes-on-the-pursuit-of-maturity</link><guid isPermaLink="false">https://blog.m-ashour.space/p/my-notes-on-the-pursuit-of-maturity</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 27 Dec 2025 15:02:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!ST-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.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_!ST-K!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ST-K!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ST-K!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ST-K!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ST-K!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ST-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png&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;:1831505,&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://blog.m-ashour.space/i/182225019?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.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_!ST-K!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!ST-K!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!ST-K!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!ST-K!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fec0b463e-31f5-4b49-add0-d8f5efe40f13_1536x1024.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></p><p>As I grow in my career, I look more and more for ways to learn from experienced engineers and from their journeys. One way is by asking people in my circle for advice and perspective. For those I do not know personally, I rely on what they share online, books, or conferences.</p><p>While I look for content focused on experience, philosophy, and the nontechnical side of engineering, I have found that writing about engineering maturity is harder to find than technical tutorials.</p><p>What is maturity, and how do we define it in engineering? Is it simply being a senior engineer with a lot of system knowledge, or does it require something else?</p><p>To be honest with you, I don&#8217;t know the full set of requirements for being a &#8220;mature engineer&#8221;. But I&#8217;d recognize certain traits when I see them. This set of traits I look for in my teammates, and in candidates I interview. </p><h4>Admit what you don&#8217;t know</h4><p>One of the clearest signs of maturity is the ability to admit when you do not know something, or when you need to research and learn more. In my experience, this quality is a strong signal of maturity. Being a senior engineer does not mean you know everything in your field. Admitting what you do not know does not diminish you, it often earns trust. For me, this is one of the most important traits I look for in someone I want to work with.</p><h4>Seek Constructive critique early</h4><p>One trait I try to develop in myself, and that I see in many great software engineers I respect, is actively seeking constructive criticism. When I design a system, I share it with peers, provide context and background, and encourage them to challenge it and poke holes in it.</p><p>This is not because I do not trust my abilities. It is because good systems are hard to build from a single perspective. Even with experience, I am still vulnerable to bias, and that bias can show up in my designs. Constructive peer reviews often improve the design and lead to better decisions.</p><p>Also, if you are proposing something, make sure to study it well and have an argument you can passionately argue for it. Being passionate, prepared, and genuinely interested is an admirable quality!</p><h4>Be a Multiplier for others</h4><p>Multipliers elevate their colleagues. Do you help less experienced engineers learn and grow? Do you make the people around you better? This goes beyond being good at your craft. It elevates the team and increases its impact across the organization.</p><h4>Respond well to mistakes </h4><p>I believe that making mistakes is part of being alive. Learning how to deal with mistakes is part of growing up and maturing. In software engineering, mistakes happen. We try to catch them before they reach production, but some will still slip through.</p><p>I have made my fair share of mistakes throughout my career. When I reflect on how I handled them early on versus how I handle them now, the contrast is stark.</p><p>Back then, I tended to panic, and sometimes I would simply stop thinking straight. I focused on managing the blame (which I often just imagined) rather than the issue at hand. As I have grown, I&#8217;ve learned to replace that fear with structure. Now, I prioritize mitigating the damage and fixing the problem first, then calmly investigating the cause later. This shift from &#8216;fear of blame&#8217; to &#8216;focus on solution&#8217; has been a major part of my growth.</p><p>Mature engineers handle these moments effectively. They stay calm, focus on fixing the issue, learn from it, and help the team move forward. Later, when it is safe, they can even laugh about it and move on without blame.</p><h4>Understand the importance of context </h4><p>This is something I touched a bit in my <a href="https://open.substack.com/pub/mashour94/p/best-practices-arent-always-the-best?utm_campaign=post-expanded-share&amp;utm_medium=web">previous blog</a>. Context is the key component when proposing a solution, rather than blindly throwing out one-liner rules or principles. Knowing lots of terminology, principles, design patterns is great, but learning that &#8220;best practices&#8221; are not always best. You need to learn about the context of the situation and take it into consideration when you decide or propose something is such an essential part.</p><p>Some of the hardest decisions are the compromises based on the current reality of your team, organization, project, and timeline.</p><h4>Have a business awareness</h4><p>Understanding the code and the system architecture is very important and crucial for the engineering team. However, adding business awareness takes you to another level. Asking &#8220;why are we building this product?&#8221;, &#8220;who are our customers?&#8221; and &#8220;what does the customer need most?&#8221; brings more understanding from the product side which increases your effectiveness and helps bridge between the deep technical understanding and the product understanding.</p><h4>Read the room and communicate for your audience</h4><p>Earlier in my career, when I was a junior engineer, I used to go deep into technical details with people who were not interested in them. Then I would complain that they did not understand the background, and I would naively wonder why they were not interested in those details. That version of me was missing the point.</p><p>Another crucial part is understanding that higher-level managers are rarely interested in specific technical details. They are interested in the product&#8217;s development state, how it affects the timeline, and how we are mitigating risks.</p><p>Having the self awareness when it comes to communication takes your presence and room reading into another level. Being intentional about how you deliver opinions and criticism, learning how to present to each group, what they are interested in and what parts that they aren&#8217;t, makes you able to reach to multiple audience.</p><h4>Adapt calmly to change</h4><p>Personally, I&#8217;m not a big fan of lots of changes happening, I love to have systems around me. I usually sleep at the same time no matter it&#8217;s a work day coming or a holiday. I wake up at the same time. have a similar routine in the morning, buy the same shoes or similar if I couldn&#8217;t find them. You get the idea. </p><p>Ironically, I spent most of my career working at startups and mid-sized companies which have a higher frequency of change happening than the big tech companies (at least in general). As a result, I started to learn how to adapt to that and learn how to build my systems around it. The changing nature of requirements and focus in startups, and the need to deliver fast and iterate, makes learning how to adapt with that is absolutely necessary!</p><p>I still have some stuff to adjust and figure out in that regard. The uncertainty of change is not comfortable by nature. The main goal is not to make it look and feel better, the main goal is to learn how to react calmly and correctly when it happens. Life is built on change, it&#8217;s unavoidable.</p><h4>Conclusion</h4><p>These traits are not developed in a day or two; they are the result of scars, mistakes, and lessons learned over years.</p><p>True maturity isn&#8217;t about having all the answers or building the perfect system on the first try. It is about having the resilience to handle the moments when you don&#8217;t know the answer, the humility to ask for help, and the wisdom to prioritize the team&#8217;s success over your own ego. It&#8217;s not a destination you reach, but a mindset you choose every day.</p><p>I don&#8217;t know the full set of requirements for being a &#8216;mature engineer,&#8217; but these are the traits that have signaled growth in my own journey. It is a mix of technical context, business empathy, and emotional intelligence.</p><p>As I continue to learn, I am sure this list will grow. I&#8217;d love to hear from you. What is the one non-technical trait you value most in a senior engineer? How do you define maturity in our field?</p><p></p><h4>Further readings</h4><ul><li><p>https://www.kitchensoap.com/2012/10/25/on-being-a-senior-engineer/</p></li><li><p>https://blog.codinghorror.com/the-ten-commandments-of-egoless-programming/</p></li></ul><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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["Best Practices" aren't always the best]]></title><description><![CDATA[If you&#8217;ve been in the software industry for any length of time, you&#8217;ve definitely encountered the phrase &#8220;Best Practices.&#8221; It&#8217;s everywhere, in documentation, conference talks, code reviews, and architectural discussions.]]></description><link>https://blog.m-ashour.space/p/best-practices-arent-always-the-best</link><guid isPermaLink="false">https://blog.m-ashour.space/p/best-practices-arent-always-the-best</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 28 Sep 2025 15:45:11 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!_Ssp!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7adf6629-5d83-4712-aefe-d54ad34f3ab5_853x853.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>If you&#8217;ve been in the software industry for any length of time, you&#8217;ve definitely encountered the phrase &#8220;Best Practices.&#8221; It&#8217;s everywhere, in documentation, conference talks, code reviews, and architectural discussions. These guidelines represent the &#8220;supposedly&#8221; optimal way to implement services, follow conventions, or design systems. And honestly? Reading them isn&#8217;t a bad thing. It&#8217;s actually recommended.</p><p>Best practices give you valuable insight into how the creators of a tool or framework envisioned its use. They offer battle-tested approaches that have worked well in many situations. Think of them as the collective wisdom of the community, a starting point for understanding what &#8220;good&#8221; looks like.The wrong way to read the Best Practices, is to instantly consider them the best for your context or use case. I have seen many people fall in this trap, once they read that something is best practice, they stop thinking anymore and take it as a face value without even taking sometime and examining if their usecase fit this best practice or not.</p><p> For example, they read that microservices are a best practice, so they break apart a perfectly functioning monolith. They see that event-driven architecture is recommended, so they introduce unnecessary complexity to a simple CRUD application.</p><p>The problem isn&#8217;t the practices themselves, it&#8217;s the lack of judgment, context-free adoption of them.</p><h2>Context Is Key</h2><p>Engineering problems, especially those involving system architecture for business needs, don&#8217;t exist in a vacuum. They live within a web of constraints and requirements:</p><ul><li><p>What are your actual performance requirements?</p></li><li><p>Who are your customers and how do they use your product?</p></li><li><p>What&#8217;s your team&#8217;s expertise and bandwidth?</p></li><li><p>What&#8217;s your budget and timeline?</p></li><li><p>How critical is this system to your business?</p></li></ul><p>When you ignore these factors and architect in isolation, you risk solving someone else&#8217;s problem while completely missing your own. That scalable, fault-tolerant, highly-available system might be impressive, but was it what you needed? If all you needed was something simple and maintainable delivered quickly, you&#8217;ve failed miserably.</p><p><em>Best practices can be the best for some situations, maybe good for others, and doesn&#8217;t work for many. Use your brain, evaluate and choose the parts that works for your situation.</em></p><p>Before you decide to follow one, ask yourself: <br><em>Does this practice address a problem I actually have? Does it align with my constraints? Will the benefits outweigh the added complexity in my situation?</em></p><p></p>]]></content:encoded></item><item><title><![CDATA[The Design Loop: My Notes on How Initial System Designs Evolve]]></title><description><![CDATA[The process of design is similar to me to the process of writing.]]></description><link>https://blog.m-ashour.space/p/the-design-loop-my-notes-on-how-initial</link><guid isPermaLink="false">https://blog.m-ashour.space/p/the-design-loop-my-notes-on-how-initial</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 13 Sep 2025 17:18:02 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3RVU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><p>The process of design is similar to me to the process of writing. I can&#8217;t confirm or deny that I&#8217;m good at it. To be honest, I&#8217;m not sure if there is a definitive way to align on a certain definition of &#8220;good&#8221; in that context. </p><p>But I know the process that makes me able to draft a better version than the previous one. and that&#8217;s what I&#8217;m here to discuss.</p><h2>The Process: Everything starts from a problem</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!3RVU!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3RVU!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 424w, https://substackcdn.com/image/fetch/$s_!3RVU!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 848w, https://substackcdn.com/image/fetch/$s_!3RVU!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 1272w, https://substackcdn.com/image/fetch/$s_!3RVU!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3RVU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png" width="616" height="667" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:667,&quot;width&quot;:616,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:38471,&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://blog.m-ashour.space/i/173513902?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.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_!3RVU!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 424w, https://substackcdn.com/image/fetch/$s_!3RVU!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 848w, https://substackcdn.com/image/fetch/$s_!3RVU!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.png 1272w, https://substackcdn.com/image/fetch/$s_!3RVU!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F584dcaed-f42b-4a1e-8fd5-0537e6b42684_616x667.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><h3>1. Study the Problem</h3><p>The beginning is usually simple: a big problem everyone is staring at. From the outside, it looks clear from the outside. It can range from fixing a brownfield project to creating a new greenfield one. What&#8217;s missing for most people is the detail. What are we actually facing? </p><p><em>Your first step: do your homework and study the problem.</em></p><p>Studying the problem goes beyond reading whatever document exists. You need to draft the details yourself and create a starting point&#8212;a shared definition of what the problem is, how it started, and what caused it. Understand the past and present to set the stage for the future.</p><p>Sometimes the details feel shallow and scattered. Don&#8217;t worry; that&#8217;s common. Your best tool here is documentation. The one you write after gathering every relevant piece of information.</p><h3>2. Think, Digest, and Decide</h3><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!CBUr!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!CBUr!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CBUr!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CBUr!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CBUr!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!CBUr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.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;:null,&quot;alt&quot;:&quot;House Series Ending Explained&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="House Series Ending Explained" title="House Series Ending Explained" srcset="https://substackcdn.com/image/fetch/$s_!CBUr!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 424w, https://substackcdn.com/image/fetch/$s_!CBUr!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 848w, https://substackcdn.com/image/fetch/$s_!CBUr!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!CBUr!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff0719a0d-377e-426d-92c1-c5d9682b304d_1825x1217.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>Once you&#8217;ve collected enough information to organize your thoughts, start the thinking process. Put everything in front of you and start connecting the dots.</p><p>What helps me is printing the key documents and studying, marking, and taking notes with pen and paper. This might differ in your case. The important step is to connect the dots. </p><p>Imagine Dr. House sketching on the whiteboard, brainstorming with his team about possible diseases based on the symptoms.</p><h3>3. Start drafting an initial design</h3><p>Draft an initial design that captures your initial thoughts. It probably won&#8217;t be the final one, but it&#8217;s crucial to move forward.</p><p>This initial draft becomes the basis for all next steps; it&#8217;s the one that you will iterate on. It may be abstract and light on details. Don&#8217;t worry about that. The most important thing is to draft this design in a format that you can edit and adjust. There are plenty of tools out there that you can use, for example <a href="https://www.drawio.com/">draw.io</a> . Pick what suits you and your company&#8217;s style. The tool matters less than its ease of iteration.</p><h3><strong>4. Challenge the design</strong></h3><p>Before moving on, challenge the design using what you know about the problem. Does it work for basic cases? What about edge cases? When does it fail? Does it address everything you currently know, or did something drift?</p><p>If you find something that you missed, try adding it to the draft. If you find yourself stuck or can&#8217;t see what&#8217;s missing, it&#8217;s time for the next step.</p><h3><strong>5. Talk to people</strong></h3><p>You have challenged your own design with the information you had; now it&#8217;s time to talk to people and make them challenge it and give you different views. and maybe additional context that can help you evolve this design.</p><p>This step is tricky. Who do you talk to? How do you give them context?</p><p>What works for me is 1:1 conversations with people who have more experience or a different perspective&#8212;often stakeholders or adjacent teams. People from outside usually provide great insights and ask sharp questions that can help reveal blind spots.</p><p>Why 1:1s? They create focus and usually end with clear action items. They&#8217;re more controllable and productive than larger meetings. Don&#8217;t get me wrong, the wide audience meetings are useful but mostly for later stages. From my observations, once you exceed 3&#8211;4 people in a meeting, it gets harder to steer and often end without clear outcomes.</p><p>I prefer the wide range one in the latter stages of the design, when things become more solid, and I need alignment with the wider team on the final touches.</p><h3>6. Take the feedback and repeat</h3><p>After challenging your draft and talking to people, collect the feedback and update the design to the next version.</p><p>As you repeat this loop, watch and observe how your understanding of the problem and your solution evolve. That evolution is one of my favorite parts: witnessing your steps toward the solution.</p><p>This process may seem simple, but it requires effort and the right mindset. The key here is <strong>Don&#8217;t get attached to your design, and don&#8217;t take anything personally.</strong></p><p>The goal is to build the right feedback loop and iterate until you reach alignment with the objective, the problem, the primary and edge use cases, and the stakeholders.</p><h3>7. It&#8217;s time</h3><p>Here you start the journey of implementation. At this stage, If you iterated enough, changes should be minimal. There are cases when you will find changes needed during implementation. Document them and ask yourself, what did you miss? Why did this appear now and not earlier?</p><p>This will make you evolve as well. It&#8217;s your feedback loop driven by actual experiences in the battlefield.</p><p>Good design isn&#8217;t a one-shot thing; it&#8217;s a loop. Study, draft, challenge, talk, iterate, ship&#8212;then learn and repeat.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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[I don't like TDD, and this is why]]></title><description><![CDATA[But I still like tests]]></description><link>https://blog.m-ashour.space/p/i-dont-like-tdd-and-this-is-why</link><guid isPermaLink="false">https://blog.m-ashour.space/p/i-dont-like-tdd-and-this-is-why</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Thu, 10 Jul 2025 15:32:10 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<blockquote><p>Test-driven development is a way of writing code that involves writing an automated unit-level test case that fails, then writing just enough code to make the test pass, then refactoring both the test code and the production code, and repeat.</p><p>&gt; https://en.wikipedia.org/wiki/Test-driven_development</p></blockquote><p>One of Test-Driven Development (TDD) main goals is to make sure you write tests and don't skip them. While this goal is good, I don't think TDD is the best way to achieve it. Why?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="5184" height="3456" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3456,&quot;width&quot;:5184,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a close up of a computer screen with code numbers&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a close up of a computer screen with code numbers" title="a close up of a computer screen with code numbers" srcset="https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1576444356170-66073046b1bc?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHx1bml0JTIwdGVzdHN8ZW58MHx8fHwxNzUyMTYxMzUwfDA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 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><figcaption class="image-caption">Photo by <a href="true">Ferenc Almasi</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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><h3>Strategic Design vs. Test-Driven Tactics</h3><p>Software projects, especially medium to large ones, need strong designs to handle inevitable changes. To do this, we begin by strategically designing the project. </p><p>Software design looks at the whole system first, then digs into how each part will work together. This requires thinking about the structure (big picture- Stratigic) before digging into the smallest parts (which the unit tests are concerned about). As design ideas mature, the structure becomes clearer and more detailed.</p><p>Software Design is a continous process, it usually starts with diagrams, RFCs, and (God forbid) UML. As you explore the problem deeper, more details emerge, you find another aspect that you need to take into consideration. This growth isn't always smooth, but it generally expands over time. During this evolving process, code is always being written, changed, and reused. The TDD approach would make us less adaptable, slowing us down and hurting productivity.</p><p>TDD can be showcased as a guide for small-scale design decisions, and in some reallife situations requires you've already or mostly solved the problem in your head (even if it&#8217;s in theory says it&#8217;s not). It&#8217;s &#8220;test-first&#8221; requirement is not suitable when the design is bigger and changing in scale.</p><p>With over seven years in software (which is not much, I know, but also not little), working on various projects for many companies, I can barely recall a single project that was fully figured out or even most of it from the start. Things constantly changed. Starting with tests first makes the primary goal of development simply passing tests. The focus shifts to getting "green checks" on the screen, losing sight of solving the overall product design.</p><p></p><h3>I Still Like Unit Tests</h3><p>That said, I love unit tests! I use them to make sure to protect my code ( or at least a considerable part of it) from the mysterious future, and immature changes.</p><p>And yes, they aren't much fun to write (at least for me). But I don't need to enjoy them to see their value. My favorite part is when a test I wrote fails after I mess something up during coding. It's a great safeguard, preventing minor mistakes from becoming major production outages. I'd much rather see red text on my screen than a massive problem for my silly bugs.</p><p>For me, unit tests typically emerge <em>after</em> the initial code for a module or feature has been drafted, or sometimes in very tight cycles <em>alongside</em> the code as its design solidifies, but never as the initial driving force. </p><p>I like my development to be drivin by strategy not green text.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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[LLMs Are Powerful, But Only If You Stay Sharp]]></title><description><![CDATA[Don't lose your touch. Use LLMs but don't imitate them.]]></description><link>https://blog.m-ashour.space/p/llms-are-powerfulbut-only-if-you</link><guid isPermaLink="false">https://blog.m-ashour.space/p/llms-are-powerfulbut-only-if-you</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Mon, 07 Jul 2025 16:56:03 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" 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://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080" width="8192" height="5464" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:5464,&quot;width&quot;:8192,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;a person holding a cell phone in their hand&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="a person holding a cell phone in their hand" title="a person holding a cell phone in their hand" srcset="https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1712002641088-9d76f9080889?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxhaXxlbnwwfHx8fDE3NTE4NTcwMjR8MA&amp;ixlib=rb-4.1.0&amp;q=80&amp;w=1080 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><figcaption class="image-caption">Photo by <a>Solen Feyissa</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>No, this isn't another article about the advances in LLMs. As much as I'm interested in the AI space, I'm far more concerned with human intelligence and keeping my own mind as sharp as possible.</p><p>Throughout history, humans have used tools: knives to cut, cars to travel, calculators to compute, and pens to write. The greatest invention of the last century, however, was the computer. It's a phenomenal machine that gives us the ability to innovate, transforming our thoughts into executable creations. This magic was amplified when we connected computers, creating the internet and unlocking their seemingly infinite potential.</p><p>Every invention requires new skills to operate it in return for its power. You learn to drive to travel far and take others with you. You learn to type to harness a computer's computational power and access a universe of applications through its vast network.</p><p>Until now, every app and invention has focused on providing an advantage in a limited domain. A car promises to take you from one place to another. Computers are more versatile, but they are still limited to what you explicitly tell them to do; they don't hold knowledge on their own.</p><p>LLMs are different because they use language as their primary interface&#8212;the very tool we invented to communicate and formulate thoughts. Languages are designed to be only limited by their user. The more words you know, the more ideas you can communicate. </p><p>An LLM is designed to be powered by text, a huge amount of it, with a huge number of examples in different shapes and forms. Unlike other tools, It doesn't confine itself to a specific domain. It's designed to answer any question on any topic, as long as it's phrased in a language it has seen before. </p><p>To do it justice, it's one of the best search tools available, in my opinion, not only fetching what you asked for but also reformulating it in styles and shapes that didn't exist in the original sources.</p><p>When you look at it, It behavior feels like that person we all know who answers every question with supreme confidence, but without any process for verifying the accuracy or factuality of their statements. </p><p>Submitting to it completely will mean erasing your ideas and replacing them with its output. This will not only change what&#8217;s is being presented at the moment, but it also stops any chance of you evolving your style, ideas, and mental muscles. You will be binding your thought process to a cloud-based service that changes over time and is controlled by one of the big companies that has zero connection to who you are and what makes you, you!. Is that something that seems pleasant to you?</p><p>This is where you must stand guard. Your ability to distinguish fact from fiction depends entirely on your own critical thinking. If you blindly accept what an LLM provides without being aware of its limitations, you risk degrading your own intellect and losing your edge. Keep your eyes open and your mental muscles trained. Use these tools to accelerate your work, but always be the one at the gate, checking what comes through and securing your mental castle.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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[The Four Ingredients-Blend for Senior Level Jobs]]></title><description><![CDATA[It's more than just tech skills.]]></description><link>https://blog.m-ashour.space/p/the-four-ingredients-blend-for-senior</link><guid isPermaLink="false">https://blog.m-ashour.space/p/the-four-ingredients-blend-for-senior</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 01 Jun 2025 09:39:54 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!yqLp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The more senior you get in your career, the more you recognize the evolving nature of your responsibilities. A blend of 4 core skills starts to shape your day-to-day work, decisions, and overall career development</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!yqLp!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!yqLp!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 424w, https://substackcdn.com/image/fetch/$s_!yqLp!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 848w, https://substackcdn.com/image/fetch/$s_!yqLp!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 1272w, https://substackcdn.com/image/fetch/$s_!yqLp!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!yqLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png" width="1456" height="778" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:778,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:344329,&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://blog.m-ashour.space/i/164924084?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.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_!yqLp!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 424w, https://substackcdn.com/image/fetch/$s_!yqLp!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 848w, https://substackcdn.com/image/fetch/$s_!yqLp!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.png 1272w, https://substackcdn.com/image/fetch/$s_!yqLp!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64452aa3-01c5-4a32-b032-cbd28d4c03a0_3582x1914.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></p><h3>1. Your Core Tech skills</h3><p>Every role demands a specific foundational skill set. For a Software Engineer, this includes coding and system design. For a Chef, it's cooking; for a Driver, it's driving. These core tech skills shine as the main ingredient, especially at the beginning of your career. As they hold the keys to entering the domain</p><h3>2. Product management</h3><p>Nope, this isn&#8217;t about the meaningless, endless meetings discussing hypotheticals and wasting time. I mean here the true product management, the one that involves consistently maintaining a clear vision for the project: understanding precisely what needs to be done, why it's important, where the next steps should lead, and how to get there effectively. </p><h3>3. Project management</h3><p>Sometimes, it gets tricky to differentiate it from the previous point. I don't blame you. </p><p>The main objective of this skill is one word, <em><strong>"Delivery"</strong></em>. removing obstacles from the way to ensure that work is completed and key milestones are reached.</p><h3>4. People management and skills</h3><p>Building a successful team is not as simple as gathering employees under one name. The more senior you get in your career, the more you need to think about how to make the team work efficiently and how to help them grow. This involves understanding their needs, communicating effectively, and helping to resolve challenges.</p><p></p><div><hr></div><p>As you advance, the importance of these four ingredients becomes increasingly clear. The expectations from you as a senior get broader, requiring you to fluidly apply these skills in varying proportions depending on the specific situation. <em><strong>Fluidity is key</strong></em>.</p>]]></content:encoded></item><item><title><![CDATA[Stop DoS-ing Your Own Team]]></title><description><![CDATA[How to Avoid Overwhelming Your Colleagues]]></description><link>https://blog.m-ashour.space/p/stop-dos-ing-your-own-team</link><guid isPermaLink="false">https://blog.m-ashour.space/p/stop-dos-ing-your-own-team</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 24 May 2025 10:04:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.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_!0qK9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!0qK9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0qK9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0qK9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0qK9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!0qK9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg" width="960" height="640" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:640,&quot;width&quot;:960,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:145550,&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://blog.m-ashour.space/i/164294242?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e0b2b0d-d778-4b59-a82a-c35fb8aaaf5d_960x640.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_!0qK9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 424w, https://substackcdn.com/image/fetch/$s_!0qK9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 848w, https://substackcdn.com/image/fetch/$s_!0qK9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!0qK9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69ddcd1b-6e3c-44ab-8801-3db396e5b6ab_960x640.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></p><p>DoS (Denial of Service) is an attack that overwhelms a resource or service with a ton of fake or meaningless requests. Imagine a website suddenly getting flooded with so many empty requests that it can't handle the real ones from actual users. It either slows down to a crawl, denies legitimate access, or completely crashes, making it unusable.</p><p>You can achieve this in the tech world by setting up a job that repeatedly calls a resource a massive number of times all at once. This pushes the resource past its limits (whether by scaling up or out) and makes it slow down, increasing the time it takes to respond. Eventually, it becomes unusable for real users or even stops responding entirely.</p><h3><strong>How to DoS Humans:</strong></h3><p>This attack isn't just for software and servers; it applies to people, too. We all have limited energy and capacity. If you want to "DoS" someone, you essentially flood them with so many requests and tasks that their time and mental capacity are fully occupied. When this happens, they start falling behind on important tasks, can't respond to new requests, and quickly burn out.</p><h3>How to unintentionally DoS your team:</h3><p>I bet you're seeing where I'm going with this. DoSing your own team can happen quite easily, even without you realizing it. In the past, common ways to unintentionally overwhelm your teammates included:</p><ul><li><p>Asking your teammates about every little thing before even trying to find the answer yourself.</p></li><li><p>Scheduling a ridiculous number of unnecessary meetings in the name of "super duper scrum."</p></li><li><p>Sending really long messages about something that could have been said in just a line or two.</p></li></ul><p>But now, there's a new set of "DoS" attacks emerging, especially with the rise of AI tools:</p><ul><li><p>Submitting Pull Requests that are entirely AI-generated without you even reviewing them properly.</p></li><li><p>Generating huge, complicated chunks of code that are a nightmare to read, maintain, and review.</p></li><li><p>Writing long, AI-generated messages that sound professional but totally lack your personal touch and clarity. </p></li></ul><p>These actions can seriously exhaust your team's capacity. They'll perform less, become less tolerant of your future requests, and this negative impact will eventually loop back and affect you too.</p><p></p><h3>Be responsible:</h3><p></p><p>I'm not trying to be a hypocrite here, telling you to stop using AI in your work!. I use AI in my work. My point is to use it responsibly and always keep your hands on the steering wheel. Don't just hand over your brain and judgment to the AI. And most importantly, don't confuse generating more code faster with being truly productive. Productivity is a mix of both quality <strong>and</strong> quantity. If you lose quality, you are just producing lots of bad code very fast.</p><p>Stop DoSing your team and try to use these new powerful tools in the best responsible way you can.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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[Technical Debt: The Good, The Bad, The Disastrous. A Guide for Non-Technical Managers]]></title><description><![CDATA[This guide explains technical debt in simple terms, its impact on business, and how non-technical managers can effectively manage it.]]></description><link>https://blog.m-ashour.space/p/technical-debt-the-good-the-bad-the</link><guid isPermaLink="false">https://blog.m-ashour.space/p/technical-debt-the-good-the-bad-the</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 06 Apr 2025 17:34:38 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wF5j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.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_!wF5j!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wF5j!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!wF5j!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!wF5j!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!wF5j!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wF5j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png&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;:2751616,&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://blog.m-ashour.space/i/160659506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.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_!wF5j!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!wF5j!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!wF5j!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!wF5j!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F69d8e399-d1dc-490a-956d-88d0a9584b0e_1536x1024.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>Technical debt can be tough to wrap your head around. In its core, it&#8217;s like any kind of debt. It has interest that represent the cost of borrowing!</p><p>In conventional debt schemes, you borrow money that you don&#8217;t have to afford something that you normally can&#8217;t afford on your own at that moment of time.</p><div class="pullquote"><p><em>In tech debt, we borrow time and effort that we don&#8217;t have, to afford deadlines and timelines that we normally can&#8217;t afford with our current resources.</em></p></div><p>Imagine using a credit card to buy a new laptop. You get the laptop now, but you'll pay interest later. <em>Technical debt is similar: you get the feature out quickly, but you'll pay for it in increased maintenance and bug fixes later.</em></p><h2>The Cost of Rapid Growth</h2><p>Technical debt manifests differently depending on the company's context and stage. In fast-paced startups, it often arises from the need to quickly adapt to changing requirements. There is always the push for shipping new things and changing requirements and directions. </p><p>Usually a small to medium team of talented engineers is hired to convert the vision of the company from words and logos into products, user-base and revenue.</p><div class="pullquote"><p>Engineers excel at breaking down large goals into manageable tasks. Executives view the company's vision as a whole, while engineers see it as interconnected components.</p></div><p>When you work in a rapidly changing and growing field, change is a main actor. When priorities shift, engineers have to scramble and readjust their plans, sometimes cutting corners in design and implementation that introduce technical debt.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!JgKO!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!JgKO!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JgKO!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JgKO!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JgKO!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!JgKO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg" width="800" height="450" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:450,&quot;width&quot;:800,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:42078,&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://blog.m-ashour.space/i/160659506?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.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_!JgKO!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 424w, https://substackcdn.com/image/fetch/$s_!JgKO!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 848w, https://substackcdn.com/image/fetch/$s_!JgKO!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!JgKO!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F099bee4c-931c-407f-8137-33ec7fb294e3_800x450.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> This approach can work in the short term to meet current timelines, but it will bite the business later, either by breaking or by slowing down any further development, which can affect the business's fate and finances badly if not properly addressed</p><div class="pullquote"><p>Building software is like constructing a house. You need a solid foundation before adding features. Rushing to add features without a strong base leads to structural problems.</p></div><p></p><h2>How Ignoring Tech-Debt Can Affect Non-Tech Manager</h2><p>Let's explore how technical debt, often seen as a technical issue, can impact the real-world problems that non-technical managers care about</p><p>A typical timeline would be like this:</p><p><strong>Initial Change:</strong> </p><p>The company changes timelines and wants to release something earlier than intended. Executives inform managers about the updated plan and ask them to make it happen. Managers reach out to tech leads and ask them to expedite the process. Tech leads try to explain the cost and drawbacks of releasing things earlier than planned, mentioning technical debt briefly. Managers, focused on immediate goals, often overlook these warnings.</p><p><strong>Short-Term Success:</strong> </p><p>After a few months, the product is successful and needs to grow more, adding new features and building new products on top of it. Tech leads explain that they need to address the technical debt generated by the first iteration to confidently build on top of it. Ignoring this might risk the whole project becoming unusable or requiring a huge re-write.</p><p><strong>Long-Term Consequences:</strong> </p><p>Managers, recalling that ignoring technical debt warnings worked out fine the first time, decide to ignore them again. This time, the product updates are shipped with more problems than new functional features, and fixing them takes more time than before. As a manager, you face problems with the engineering teams who tried to warn you and with the upper management and executive team because you are unable to deliver on promises and manage things properly.</p><p><strong>All of this add up and compiles into </strong></p><ul><li><p>Decreased development velocity</p></li><li><p>Reduced product quality</p></li><li><p>Engineering team frustration</p></li><li><p>Missed deadlines and commitments</p></li><li><p>Loss of trust from upper management</p></li><li><p>Increased maintenance costs</p></li></ul><p>Dealing with technical debt as a non-technical manager requires understanding how it can affect the entire chain. Ignoring it is a recipe for failure. </p><p>A classic example of the impact of technical debt is the Southwest Airlines shutdown. The airline's failure to address technical debt in their crew scheduling software led to losses exceeding $1 billion and severe reputation damage <a href="https://www.netguru.com/blog/managing-technical-debt#:~:text=The%20Southwest%20Airlines%20shutdown,in%20their%20crew%20scheduling">[source]</a></p><p><em>But how should we deal with it? No no, how we can prevent tech debt from the start?</em></p><p>You can&#8217;t prevent technical debt entirely, and you shouldn&#8217;t think this way. </p><h2>The Good Side of Technical Debt</h2><p>Technical debt is often seen as a villain that eats time and effort that could be used to build useful things instead. But this is not the full story. </p><p>Technical debt is a natural result when you need to move faster and deal with real-life conditions of moving and changing environments. It allows you to borrow from the future to achieve things in the present like</p><ul><li><p>Faster initial delivery</p></li><li><p>Market opportunity capture</p></li><li><p>Flexibility in development (in the short term)</p></li><li><p>Creates space for real-world adaptation</p></li><li><p>Can be a strategic tool when managed properly</p></li></ul><p>It becomes problematic when you ignore the increasing interest and don&#8217;t pay it off as soon as possible. Without this ability, your business can miss opportunities that might cost a lot. </p><div class="pullquote"><p>Think of technical debt as a strategic tool, like borrowing money to invest in a high-growth opportunity. If you invest wisely and repay the debt promptly, you can reap significant rewards. But if you ignore the debt, the interest will compound and eventually cripple you.</p></div><p>A good management of tech debt requires good engineering and leadership. Learning when to go for it and when to stop a bit to take a breath and fix things. </p><p>Dealing with Tech debt is not a luxury; it&#8217;s a necessity!</p><h2>How to deal with tech debt in a healthy way?</h2><p>Dealing with technical debt requires a collaborative effort between management and engineering.</p><p><strong>Engineering</strong></p><p>Engineers need to keep things simple and maintainable. They should track technical debt and allocate part of their time to keep it minimal. Tech leads need to keep things in check and communicate the full status to managers, informing them about the team&#8217;s needs and challenges.</p><p><em>To effectively measure and manage technical debt, consider using metrics like code complexity, code churn, and defect density. Tools like SonarQube and CAST Highlight can help you track and analyze these metrics</em>.</p><p><em>Also, good coding practices, regular code reviews, and automated testing can significantly minimize its accumulation</em></p><p><strong>Management </strong></p><p>Managers need to listen to technical leads and not ignore their updates and advice. They should keep the team updated on potential changes from the executive team and work on setting reasonable expectations that the team can meet, along with a plan to minimize future issues. </p><ul><li><p>Prioritize technical debt repayment during sprint planning. </p></li><li><p>Allocate specific time for addressing technical debt. </p></li><li><p>Foster open communication between engineering and management.</p></li></ul><p><em>By understanding the strategic value and potential risks of technical debt, non-technical managers can work collaboratively with their technical teams to ensure project success and long-term business health.</em></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/p/technical-debt-the-good-the-bad-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="CaptionedButtonToDOM"><div class="preamble"><p class="cta-caption">Thanks for reading! This post is public so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/p/technical-debt-the-good-the-bad-the?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://blog.m-ashour.space/p/technical-debt-the-good-the-bad-the?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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">And 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[Space meets AI - Onboard and on Ground]]></title><description><![CDATA[Exploring the Growing Role of Artificial Intelligence in Space]]></description><link>https://blog.m-ashour.space/p/space-meets-ai-onboard-and-on-ground</link><guid isPermaLink="false">https://blog.m-ashour.space/p/space-meets-ai-onboard-and-on-ground</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 22 Mar 2025 21:10:55 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!wzis!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.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_!wzis!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!wzis!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!wzis!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!wzis!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!wzis!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!wzis!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!wzis!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!wzis!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!wzis!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!wzis!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F73072554-6416-4fb1-a597-1a36a3e2d9fc_1024x608.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><figcaption class="image-caption"></figcaption></figure></div><p>Humans are curious by nature&#8212;it&#8217;s part of what drives us to learn and explore. When we look up, we see a mysterious sky filled with the sun, moon, stars, and endless darkness. To satisfy our curiosity about the mysteries above, we had two options: </p><ol><li><p>wait patiently until we evolved wings</p></li><li><p>invent ways to reach space ourselves. </p></li></ol><p>While I'd love to have a pair of wings and strong lungs, I certainly wouldn't bet my life waiting for such evolution!</p><p>In the last century, human civilizations raced each other toward the dark skies above. We built rockets, satellites, and spaceships. Some were more successful than others, but nearly all played essential roles in writing humanity&#8217;s history as we broke the barrier between our planet&#8217;s surface and the stars beyond.</p><p>I&#8217;m here to explore with you our journey (so far) to our next step. We've already built swarms of eyes around our planet to gather data&#8212;it's now time to add intelligence to them.</p><p>The History of AI in space is not long, but not shallow as well, we are still in the beggining of it. let&#8217;s take this as a chance to reflect on</p><ul><li><p>The AI Applications in the space industry</p><ul><li><p>On board</p></li><li><p>On ground</p></li></ul></li><li><p>Challenges and future </p></li></ul><p>Let&#8217;s dive in</p><h3>AI applications in the space industry</h3><p>Think of satellites as flying computers equipped with sensors, floating wirelessly in space. Since we can't physically sit beside them and watch their screens, we need a mechanism to interact with the data they collect. This interaction happens through "downlinking" and "uplinking." Downlinking occurs when satellites send data down to our ground stations, while uplinking is when we send commands or data back up. </p><p>Unfortunately, this process isn't as fast as your home WiFi&#8212;it requires complicated equipment and takes considerably longer.</p><p>Currently, satellites collect data much faster than they can transmit it back to Earth. We face a gap between onboard computational power and communication speeds. So what can we do about it?.</p><p>Here comes the first application:</p><h3>Onboard AI Applications</h3><h4>Smart Filtering and prioritization for data collection </h4><p></p><p>In November 2000, NASA launched the Earth Observing-1 (EO-1) satellite. EO-1 showcased an onboard AI software called the Autonomous Sciencecraft Experiment (ASE). ASE analyzed images onboard and filtered scientifically interesting events&#8212;like volcanic eruptions, floods, and wildfires. This dramatically improved data collection efficiency.</p><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!_8Or!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!_8Or!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_8Or!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_8Or!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_8Or!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!_8Or!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg" width="500" height="500" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:500,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:70060,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.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_!_8Or!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 424w, https://substackcdn.com/image/fetch/$s_!_8Or!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 848w, https://substackcdn.com/image/fetch/$s_!_8Or!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!_8Or!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc2e6b7c4-adc7-4f19-a28e-90b2109e7281_500x500.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">NASA EO-1</figcaption></figure></div><p></p><p>More recently, ESA's &#934;-sat-1 (launched in 2020 as part of the FSSCat mission) used onboard deep learning models to detect clouds in Earth images. By doing this, the satellite only transmitted clear and valuable images, significantly saving communication resources.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ewzg!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ewzg!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ewzg!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ewzg!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ewzg!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ewzg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg" width="1024" height="512" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/f1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:512,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:57904,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.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_!ewzg!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ewzg!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ewzg!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ewzg!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Ff1331537-1452-4ed0-a015-fbca5fbe9720_1024x512.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">ESA Phi-Sat-1</figcaption></figure></div><h4>Smart Navigation and Autonomous decision making</h4><p>Another great application of the on-board AI applications on satellites is the navigation. Satellites are like semi-self-driving cars that drive itself (most of the times) on the roads (we call it orbits). As the space around us has many other objects coming and going, some of them we don&#8217;t control, like astroids, others we do, like other satellites. It&#8217;s not totally safe out there and we need a smart way to handle that.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!Hzyy!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Hzyy!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 424w, https://substackcdn.com/image/fetch/$s_!Hzyy!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 848w, https://substackcdn.com/image/fetch/$s_!Hzyy!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!Hzyy!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Hzyy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png" width="986" height="1002" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1002,&quot;width&quot;:986,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:458173,&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://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.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_!Hzyy!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 424w, https://substackcdn.com/image/fetch/$s_!Hzyy!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 848w, https://substackcdn.com/image/fetch/$s_!Hzyy!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.png 1272w, https://substackcdn.com/image/fetch/$s_!Hzyy!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f6f6e1f-f3d2-45ed-879f-1d9f6810e6d4_986x1002.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><figcaption class="image-caption">Curious about active satellites orbiting Earth? check: https://in-the-sky.org/</figcaption></figure></div><p>NASA's OSIRIS-REx mission employed a system called Natural Feature Tracking (NFT) to autonomously guide the spacecraft to asteroid Bennu's surface for sample collection. NFT allowed OSIRIS-REx to achieve a precision landing within one meter of the target area&#8212;a remarkable feat of autonomous navigation.</p><p>More recently, ESA's Hera mission (launched October 2024) is another example. Hera autonomously navigates around the Didymos asteroid system, using onboard AI to map surfaces, adjust orbits, and perform close maneuvers&#8212;all without continuous ground control intervention.</p><p></p><h3>Satellite Autonomous Operations</h3><p>Usually, satellites get to know what it should do at a certain point of time by tasking. The ground stations send information about what tasks to do and at which order. </p><p></p><p>NASA tested a new approach with its ASTERIA CubeSat, using multi-mission, goal-based, onboard, integrated planning and execution software called <a href="https://ai.jpl.nasa.gov/public/projects/mexec/">MEXEC</a> (Multi-mission EXECutive). MEXEC leverages <strong>Hierarchical task network (HTN) planning</strong> is an approach to <a href="https://en.wikipedia.org/wiki/Automated_planning">automated planning</a> in which the dependency among actions can be given in the form of hierarchically structured networks.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!D2qJ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!D2qJ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 424w, https://substackcdn.com/image/fetch/$s_!D2qJ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 848w, https://substackcdn.com/image/fetch/$s_!D2qJ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 1272w, https://substackcdn.com/image/fetch/$s_!D2qJ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!D2qJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png" width="1186" height="783" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:783,&quot;width&quot;:1186,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1753355,&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://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F3d0151c5-fcd7-45a7-90a8-3f6012a83439_1800x1011.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_!D2qJ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 424w, https://substackcdn.com/image/fetch/$s_!D2qJ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 848w, https://substackcdn.com/image/fetch/$s_!D2qJ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.png 1272w, https://substackcdn.com/image/fetch/$s_!D2qJ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fef6af47a-a0fe-4c0f-aa0a-682421acbbf2_1186x783.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><figcaption class="image-caption">ASTERIA cubesat</figcaption></figure></div><h3>AI Specialized hardware on spacecrafts</h3><p>Companies have recently begun developing low-power, radiation-hardened AI processors designed specifically for satellites. For instance, <a href="https://www.kplabs.space/">KP Labs' Leopard System</a>, A CubeSat-compliant Data Processing Unit (DPU) utilizes Deep Neural Networks for onboard data processing. With a throughput of up to 3 Tera Operations per second, it enhances the satellite's ability to process data autonomously, improving efficiency and reducing the need for extensive ground-based data handling. </p><h3>AI on the Ground</h3><p>Moving back to the ground side, we will find a variety of applications waiting for us, starting from the ground station and mission control and moving towards the satellite data processing and modeling</p><h3>Mission Control and Ground Station Operations</h3><p>Mission Control Centers (MCCs) are facilities that manage space missions from launch to landing or mission completion. They serve as the central hub for monitoring and controlling spacecraft, ensuring mission success through real-time data analysis and decision-making. If you've watched any rocket launch online, you've seen them&#8212;they're the rooms filled with screens and engineers monitoring live data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!6AZn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!6AZn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6AZn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6AZn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6AZn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!6AZn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg" width="500" height="332" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:332,&quot;width&quot;:500,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:67458,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.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_!6AZn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 424w, https://substackcdn.com/image/fetch/$s_!6AZn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 848w, https://substackcdn.com/image/fetch/$s_!6AZn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!6AZn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1c9fd82c-edb2-40df-b206-76dee2350436_500x332.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>One example of the AI applications in this area is <strong><a href="https://www.nasa.gov/organizations/ocio/dt/ai/2024-ai-use-cases/#:~:text=%2D%20ASPEN%20Mission%20Planner%3A,and%20scheduling%2C%20optimizing%20mission">NASA's ASPEN Mission Planner.</a></strong> An AI-driven system that optimizes mission efficiency by automating complex scheduling tasks and resource allocation for various space missions</p><h3>Earth Digital Twin</h3><p>Imagine gathering all of the earth observations that we are collecting and creating a model that understands the past of the planet, watches the present and predicting the future?</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!QgVq!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QgVq!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QgVq!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QgVq!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QgVq!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QgVq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg" width="970" height="720" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:970,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:460572,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.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_!QgVq!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QgVq!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QgVq!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QgVq!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0505225a-0c91-4863-9854-37d48e82d8b0_970x720.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>This is one of the projects that ESA is working on. <a href="https://www.esa.int/Applications/Observing_the_Earth/Working_towards_a_Digital_Twin_of_Earth">An AI-driven Digital Twin</a> of Earth, Continuously fed with Earth observation data, this digital twin could help us visualize and forecast natural and human activities on our planet.</p><p></p><h3>Weather Monitoring and Forecasting</h3><p>When you open a weather app on your phone, you see current weather conditions and Forecasts across the day and the week. </p><p>Traditionally, these forecasts rely on physics-based models built upon fundamental equations of fluid mechanics and thermodynamics.Utilizing numerical techniques to solve complex partial differential equations (PDEs). However, these models are resource-intensive and require supercomputers or High-Performance Computing (HPC)</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!pfol!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!pfol!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pfol!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pfol!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pfol!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!pfol!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg" width="1456" height="818" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:818,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:168094,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/159287025?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.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_!pfol!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 424w, https://substackcdn.com/image/fetch/$s_!pfol!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 848w, https://substackcdn.com/image/fetch/$s_!pfol!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!pfol!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa8c1a49f-377b-44c1-a21b-3af8a8de23a6_1536x863.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>Today, Companies and institutions are exploring deep learning-based weather models. These AI Models capture complex, nonlinear relationships without explicit physical equations and learn patterns and relationships from historical weather data. potentially matching or surpassing traditional methods at a fraction of the operational cost.  Although, the machine learning models requires a big amount of computation powers in the training phase, It require much less while running it, which eventually should be much cheaper to run and maintain than the Physics model.</p><p></p><p>Companies like <a href="https://spire.com/weather-climate/model-ai/">Spire Global</a> are already creating their own AI-based Weather models utilizing their Earth Observation data like <a href="https://spire.com/blog/weather-climate/decoding-radio-occultation-the-cornerstone-of-accurate-weather-forecasting/">GNSS Radio Occultation (RO)</a> and other data to make it as good as or even better than the traditional models</p><p>Institutions like <a href="https://science.nasa.gov/open-science/ai-model-weather-climate/">NASA</a>, and <a href="https://www.ecmwf.int/en/about/media-centre/news/2024/anemoi-new-framework-weather-forecasting-based-machine-learning">ECMWF</a> are investing as well in that area. This kind of investment will help pushing the boundaries for a better weather forecasting which is a crucial element in all of our lives</p><h3>Challenges and the Future</h3><p>While AI offers great promise, integrating it onboard satellites isn't without difficulties. Missions like ESA&#8217;s &#934;-sat-1 face challenges such as limited computational power and tight energy budgets, highlighting current technological constraints.</p><p>But challenges indicate room for growth and innovation. we can see institutions like <a href="https://esoc.esa.int/index.php/a2i-roadmap-0">ESA putting roadmaps for AI utilization</a> in their projects and missions. Meanwhile, private companies increasingly recognize AI's potential to revolutionize their business models, driving further innovation.</p><p>We stand at an exciting crossroads. As AI technology rapidly evolves, the space industry will surely follow&#8212;propelling humanity toward ever-greater exploration and discovery</p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://blog.m-ashour.space/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! 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></p>]]></content:encoded></item><item><title><![CDATA[You are not your stories]]></title><description><![CDATA[We are lost in translation]]></description><link>https://blog.m-ashour.space/p/you-are-not-your-stories</link><guid isPermaLink="false">https://blog.m-ashour.space/p/you-are-not-your-stories</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 16 Mar 2025 17:08:37 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!G4yZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!G4yZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!G4yZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 424w, https://substackcdn.com/image/fetch/$s_!G4yZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 848w, https://substackcdn.com/image/fetch/$s_!G4yZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!G4yZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!G4yZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg" width="736" height="691" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:691,&quot;width&quot;:736,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:293119,&quot;alt&quot;:&quot;&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!G4yZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 424w, https://substackcdn.com/image/fetch/$s_!G4yZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 848w, https://substackcdn.com/image/fetch/$s_!G4yZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!G4yZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fea0fccc1-ce8d-4c60-a02e-de5ccc09f34a_736x691.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>"What a day!" your friend sighs, sinking into the sofa. "It began with me nearly missing my train&#8212;I had to sprint like a maniac, and everyone stared at me like I'd lost my mind. Then, at work, we had an essential meeting with a crucial client we've been trying to land for months. Usually, he's enthusiastic and engaged, but today, he seemed distracted and uninterested. Definitely not my best day."</p><p>You're listening carefully, genuinely trying to give your friend your undivided attention. Yet, as their words flow, you notice something strange happening: every detail your friend describes is replaying in your mind, but with a different voice&#8212;yours. Without even noticing, you're creating your own version of the story. And here's the irony: neither your friend's narrative nor your interpretation fully matches reality.</p><h3>Stories have countless shapes</h3><p> Stories have countless shapes, depending entirely on our unique perspectives. It's similar to that classic optical illusion you might have seen&#8212;the image that can appear as either a duck or a rabbit, depending on who's viewing it. But life is far more nuanced and complex than a simple drawing.</p><p>Think about how differently two coworkers might describe the same meeting: one might say, "That went horribly, the boss clearly didn't like my idea," while another might recall, "What a productive meeting! Everyone was really engaged." The actual meeting didn't change; only their perceptions differed, shaped by their past experiences, feelings, and viewpoints. Or consider how siblings can recall completely different childhood memories of the same family vacation&#8212;one remembers laughter and adventure, and another recalls boredom and discomfort. Both stories are true, yet neither fully captures reality.</p><h3>We are not our Stories</h3><p><strong>We are not our stories.</strong> Our perception doesn't just shape how we see external events&#8212;it profoundly influences how we see ourselves. Imagine someone complimenting your work: one day, you might take pride and confidence from the praise; another day, feeling insecure or doubtful, you might dismiss it as mere politeness. The compliment itself didn't change, but your perception&#8212;the story you told yourself&#8212;did.</p><p>Learning to recognize that each of us carries these unique lenses, shaped by our emotions, beliefs, and past experiences, helps us gain compassion and understanding. <strong>Acknowledging different perceptions and trying to look at the world from their view expands our world, making it richer, deeper, and more connected.</strong></p><h3>Looking through different lenses</h3><p>Pause for a moment and imagine all the different perspectives around you: your own, your parents', your coworkers', your friends', the barista who served your coffee this morning, or the stranger with whom you briefly made eye contact on the train. Every single person you meet interprets the world uniquely, creating their own narratives&#8212;some similar, others vastly different.</p><p>The next time you're having a conversation, especially one that sparks strong feelings or reactions, ask yourself: <strong>"How else could this story be told? What might I see if I looked from another angle?"</strong> Remember, you are not your story&#8212;your stories are merely glimpses through your lens. Reality is larger and far more complex than any single perception can capture. Learning to leave our perception for a second and examine our stories using different ones is a great skill.</p><p><strong>Don't limit yourself to a single narrative. Step outside your story and look again. You might be surprised by what you discover.</strong></p>]]></content:encoded></item><item><title><![CDATA[The Physics of Software Projects]]></title><description><![CDATA[Imagine you're working on a project as part of a 5-person team.]]></description><link>https://blog.m-ashour.space/p/the-physics-of-software-projects</link><guid isPermaLink="false">https://blog.m-ashour.space/p/the-physics-of-software-projects</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 08 Mar 2025 09:58:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QvcN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.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_!QvcN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QvcN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QvcN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QvcN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QvcN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QvcN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg" width="1179" height="940" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:940,&quot;width&quot;:1179,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:100613,&quot;alt&quot;:&quot;No alt text provided for this image&quot;,&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;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="No alt text provided for this image" title="No alt text provided for this image" srcset="https://substackcdn.com/image/fetch/$s_!QvcN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QvcN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QvcN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QvcN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8eb4544d-669a-4246-843a-30044658b8e7_1179x940.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><figcaption class="image-caption">From &#8220;The Software Engineer&#8217;s Guidebook&#8221; book</figcaption></figure></div><p>Imagine you're working on a project as part of a 5-person team. You&#8217;ve broken the project into milestones, features, components, epics, and stories and set an estimated timeline. Everything seems planned out&#8212;until one of these scenarios happens: <br></p><ol><li><p>A team member leaves the project.</p></li><li><p>The company faces challenges and needs the project completed earlier than planned.</p></li><li><p>The project scope expands, with more features being requested. <br></p></li></ol><p><br>If you analyze each scenario, you&#8217;ll notice they each impact one of three critical factors: </p><ol><li><p>People </p></li><li><p>Timeline </p></li><li><p>Scope</p></li></ol><p>When one of these factors changes, it inevitably disrupts the balance. To address the issue, you have to adjust at least one of the other factors. Let&#8217;s break it down: <br><br>- Fewer people mean the work will take longer to complete. <br>- Less time requires reducing the scope or adding more people to meet the deadline (though this isn&#8217;t always effective). <br>- An expanded scope may require either more time or additional team members. <br><br>Why Adding More People Isn&#8217;t Always the Solution <br><br>You might wonder: Why not just add more people to solve the problem? The answer lies in Brook&#8217;s Law, which states: <br>&#8220;Adding manpower to a late software project makes it later.&#8221; <br><br>Adding new team members, especially late in a project, incurs hidden costs. Time is required for onboarding, aligning with the team, and catching up on the project context. By the time these new team members are fully productive, the project might already be near completion, making the payoff minimal. <br><br>Mitigating These Challenges <br><br>One way to reduce the impact of these scenarios is to split the project into smaller, independent components that don&#8217;t rely heavily on each other. This way, team members can work in parallel with less dependency. However, achieving this level of separation is often easier said than done, especially early in the planning phase. <br><br>If these challenges resonate with you, I highly recommend checking out The Software Engineer&#8217;s Guidebook. The image I&#8217;ve attached comes from this great read<br><br>Let me know your thoughts&#8212;have you experienced similar scenarios in your projects?</p>]]></content:encoded></item><item><title><![CDATA[The Pragmatic Programmer: Notes on Estimations]]></title><description><![CDATA[A usual scenario in your day to day is to get asked this question]]></description><link>https://blog.m-ashour.space/p/the-pragmatic-programmer-notes-on-estimations</link><guid isPermaLink="false">https://blog.m-ashour.space/p/the-pragmatic-programmer-notes-on-estimations</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Mon, 20 May 2024 14:55:00 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!3jZn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.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_!3jZn!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!3jZn!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 424w, https://substackcdn.com/image/fetch/$s_!3jZn!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 848w, https://substackcdn.com/image/fetch/$s_!3jZn!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 1272w, https://substackcdn.com/image/fetch/$s_!3jZn!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!3jZn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png" width="2373" height="1483" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1483,&quot;width&quot;:2373,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:6820830,&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://blog.m-ashour.space/i/158609359?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe2b81369-ae41-4a7f-bde7-d45ab8ae9a7e_2816x1536.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_!3jZn!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 424w, https://substackcdn.com/image/fetch/$s_!3jZn!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 848w, https://substackcdn.com/image/fetch/$s_!3jZn!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.png 1272w, https://substackcdn.com/image/fetch/$s_!3jZn!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8204d9b1-801b-4e58-b411-5d8d269a31d1_2373x1483.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></p><p>A usual scenario in your day to day is to get asked this question </p><blockquote><p><em>How long will it take to finish this?</em></p></blockquote><p>For some people, the question seem straight forward, especially the people that are not building this product. But for you as a Software Engineer (The Builder), It&#8217;s one of the most hard question to answer.</p><p>In this article, I&#8217;m exploring more on that front, exploring a methodology that was presented in <a href="https://pragprog.com/titles/tpp20/the-pragmatic-programmer-20th-anniversary-edition/">The Pragmatic Programmer</a> book.</p><h2>Where Do Estimates Come From?</h2><p>The process of estimating the time required for a specific task is data-driven. The accuracy of these estimates depends mainly on the data's quality and the task's understanding.</p><ul><li><p>The nature of the problem</p></li></ul><ul><li><p>The nature of the available resources</p><ul><li><p>Experiences and Team Capacity</p></li><li><p>infrastructure</p></li><li><p>Time</p></li><li><p>Money/Budget</p></li></ul></li><li><p>The outside factors (unplanned, uncontrolled surprises)</p></li></ul><p>To create an accurate enough model, you need to consider these factors. Let's break down each one of them</p><h3>First, understand the problem better than your customer</h3><p>The customer here is not just someone from outside. The customer can be a CEO, a manager, or anyone requesting the task. Often, people don't fully understand what they are asking for. But you need to know and understand it well!</p><p>Start by asking questions about the requirements and scope of this task. What are the expected outcomes, and what use cases need to be covered?</p><p>Asking these questions and gathering information about the problem should help you start working on a mental model of it.</p><p>Sometimes, people ask for <em>X</em>, but after they explain what they want, you find out they only need <em>Y</em>. Figuring this out early is crucial for making accurate estimates and avoiding wasting time and resources on the wrong thing!</p><h3>Understanding the nature of the available resources</h3><p>Any task requires some sort of resources, for example</p><ul><li><p><strong>Human resources:</strong> people working on it</p></li><li><p><strong>Architectural resources:</strong> Servers, Databases, ..etc</p></li><li><p><strong>Time:</strong> The time that will be dedicated to researching, developing, and maintaining this problem instead of another one</p></li><li><p><strong>Money:</strong> the cost of all of that to get this done and how that align with the budget</p></li></ul><p>In a perfect world, we would have an infinite supply of these resources. But as you already know, our world is far from perfect! After understanding the problem, you can start assessing how many of these resources you need and how many you have. It's also important to consider the big picture. How will this affect your other projects and commitments? Make sure to communicate this to the project manager and the team or department manager.</p><h3>Taking the bad day into consideration!</h3><p>After you assign a reasonable value for each parameter and feel confident in your initial estimate, you need to consider a buffer for unexpected events. I know it's hard to plan for these, but they happen often.</p><p>Always add an extra buffer; you will need it. The only way to get better at estimating this buffer is through experience. At least, this is the only way I know! If you know a better way, I would love to hear about it! Please!</p><h3>Adding all of this together</h3><p>After you go through these three steps, gather the information from each and use it to make an estimate.</p><p>One method we can use is called the "Program Evaluation Review Technique" or "PERT." It works like this:</p><blockquote><p><em>"So now, How long will it take to finish this?"</em></p><p>"Well. <strong>If everything goes right</strong>, and we are sure that we covered all the requirements and usecases, this should take from the team having Member1 and Member2 focusing on it about 1 sprint (2 weeks). But that's unlikely the case, So I would guess a more realistic figure is close to 2 sprints (4 weeks). And of course, if we happen to have a huge blocker or urgent critical issues regarding the other operational systems that we currently have and needs the efforts of these members, we would need an extra sprint or a bit more"</p></blockquote><p>As you can see, this method expresses 3 main scenarios</p><ul><li><p><strong>Optimistic</strong></p></li><li><p><strong>Most likely</strong></p></li><li><p><strong>Pessimistic</strong></p></li></ul><p>With this approach, you spread the range of the uncertainty to levels, which helps to get a better estimation of the project as a whole</p><p>I know, people usually don't like this answer because it doesn't match the wall-sized charts they expect. Some think they have a formula for an accurate estimate. In my experience, the likelihood that they don't is high, and the chances that they've never done this before are even higher!</p><h3>Track, Improve, Repeat</h3><p>You probably went through this process, got an estimate, and found it inaccurate. Now what?</p><p>This process is ineffective if you don't track your estimates, learn from what went wrong, and apply those lessons next time. It's a feedback loop, an iterative cycle of improvement. Start somewhere and aim to get better each time!</p><p>Remember, it all starts with not rushing to give estimates the first time you're asked. Take the time to think it through. Don't forget the magic words.</p><blockquote><p><em><strong>I will get back to you.</strong></em></p></blockquote><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[My 20s: A Journey of Personal Growth and Lessons Learned]]></title><description><![CDATA[Hello there!]]></description><link>https://blog.m-ashour.space/p/my-20s-a-journey-of-personal-growth-and-lessons-learned</link><guid isPermaLink="false">https://blog.m-ashour.space/p/my-20s-a-journey-of-personal-growth-and-lessons-learned</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Mon, 01 Jan 2024 19:29:34 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Gte0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.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_!Gte0!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Gte0!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gte0!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gte0!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gte0!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Gte0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/b4772421-9702-49a1-939c-07b208c125c4_5472x3648.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;:null,&quot;alt&quot;:&quot;My 20s: A Journey of Personal Growth and Lessons Learned&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="My 20s: A Journey of Personal Growth and Lessons Learned" title="My 20s: A Journey of Personal Growth and Lessons Learned" srcset="https://substackcdn.com/image/fetch/$s_!Gte0!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 424w, https://substackcdn.com/image/fetch/$s_!Gte0!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 848w, https://substackcdn.com/image/fetch/$s_!Gte0!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!Gte0!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fb4772421-9702-49a1-939c-07b208c125c4_5472x3648.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>Hello there! As I look back on my 20s, I realize I've gone through a lot, and it's a great opportunity to reflect and gather the lessons that have shaped me. Let's walk through them together, and remember, these are my lessons. Your experiences, goals, and values might lead you to different conclusions.</p><h2>Don't blindly follow others' life lessons.</h2><p>It's tempting to take other people's life lessons as universal truths, but remember, we all have unique life experiences. We all lead different lives, influenced by unique events and times. Our goals and values also differ significantly. Hence, what worked for someone else might not necessarily work for you. It's always important to reflect on advice and adapt it to your personal circumstances.</p><h2>One Size Doesn't Fit All</h2><p>Let's talk about learning methods. I've noticed that success isn't always about following a prescribed path. Two people can employ radically different learning strategies yet achieve the same score. If they were to swap methods, their success might plummet. This reinforces the idea that we all have distinct ways of absorbing and processing information. Embrace your unique learning style and tweak it as you evolve.</p><h2><strong>The Power of 'Why?'</strong></h2><p>Never underestimate the power of asking "Why?" This simple question can unlock deeper understanding and insight. The backstory behind a concept or decision often reveals the context and factors that influenced it. However, it's important to strike a balance - don't barrage people with "whys" without doing your own research first.</p><h2>A healthy Mind is in a healthy body</h2><p>Prioritize your physical health. It's the foundation upon which all other aspects of your life are built. Even something as simple as a regular walk can significantly improve your well-being.</p><h2>Approach New Topics with an Open Mind</h2><p>Approach new topics or concepts with a fresh, unbiased mind. It's easy to carry preconceived notions and second-hand ideas into our learning process. However, these can sometimes obscure the truth. Instead, strive to build your own perspective based on your experiences. This doesn't mean dismissing experts' insights, but rather understanding their perspectives fully - the what, how, and why - before incorporating them into your own worldview.</p><h2>Don't compare yourself with others, but yourself</h2><p>Stop comparing yourself to others. It's crucial to understand that everyone's life journey is as unique as their fingerprints. Different circumstances, different goals, and different timelines mean that comparing yourself to someone else is not just unhelpful, it's often misleading. Focus on your progress. Are you better than you were yesterday? That's the comparison that truly matters and the one that will help you move forward.</p><h2>Embrace the fact that you will be wrong sometimes, and remain open to change and growth.</h2><p><strong>Being wrong is not a dead end; it's a detour to improvement</strong>. Just as software evolves through updates, so do we. Each version of ourselves can be better than the last, with fewer bugs and more features. When you accept that being wrong is an inevitable part of the human experience, you open yourself up to growth and learning. It's a brave step to take but a necessary one on the path to personal excellence.</p><h2><strong>Invest in Yourself</strong></h2><p>Your twenties are a goldmine of opportunity, the perfect time to invest in yourself and your education. The efforts you put into personal development during this decade can define your future. Don't hold back on investing time, effort, and yes, even money into expanding your knowledge and skill set. With the vast array of learning resources available online, the world truly is your classroom. Through your twenties, you mostly have the advantage of less risk and more time to try and explore new things. Embrace it!</p><h2><strong>People Skills Matter</strong></h2><p>You will often work in a team, and learning how to collaborate with others and communicate effectively is a crucial skill. Mastering the art of listening, explaining, leading, and discussing is essential.</p><p>In our interconnected world, social skills are just as important as technical know-how. Whether it's in the workplace or personal relationships, the ability to work in a team, communicate effectively, and empathize with others is invaluable. These skills enable you to connect, collaborate, and lead fundamental actions for success in any field.</p><h2>Don't waste your time searching for "the best resource/course/book/etc."</h2><p>The quest for the "best" resource can be an endless and unproductive pursuit. What's best for one may not be for another. Instead, be resourceful. Choose a resource that resonates with you and start learning. Real progress comes from application, so take what you learn and put it into practice. It's in doing that we truly understand and retain knowledge.</p><h2>Life moves quickly; ensure you take time to reflect on your actions and goals.</h2><p>Life moves quickly, and in the hustle, it's easy to lose sight of where we're headed. That's why it's essential to regularly pause and reflect. Are your actions still aligned with your goals? Does what you're chasing reflect what's truly important to you? These moments of reflection can recalibrate your direction, ensuring your speed is taking you where you actually want to go.</p><h2><strong>Your Life &gt; Your Career</strong>:</h2><p>Lastly, remember that your life is much more than your career. Yes, professional advancement is significant, but it's not the total sum of your existence. Your life's tapestry is woven with threads of family ties, friendships, hobbies, and passions. Make sure you're dedicating time to these aspects as well. They provide balance, happiness, and a sense of wholeness.</p><div><hr></div><h2><strong>In Summary</strong></h2><p>These are the lessons that have guided me through my 20s. Take what resonates with you, and remember to keep learning, growing, and embracing the journey of life. Here's to the next 20 years!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Python Arguments: Passed by Reference or Value? A Brief Explanation.]]></title><description><![CDATA[This is one aspect of Python that may not be straightforward, particularly for beginners.]]></description><link>https://blog.m-ashour.space/p/python-arguments-passed-by-reference-or-value-a-brief-explanation</link><guid isPermaLink="false">https://blog.m-ashour.space/p/python-arguments-passed-by-reference-or-value-a-brief-explanation</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Tue, 25 Jul 2023 17:39:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eFd4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.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_!eFd4!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eFd4!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eFd4!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eFd4!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eFd4!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eFd4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg" width="1456" height="753" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/d910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:753,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:269382,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/158609363?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.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_!eFd4!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eFd4!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eFd4!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eFd4!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fd910c970-4d58-4077-b54b-d1243f24300b_1750x905.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>This is one aspect of Python that may not be straightforward, particularly for beginners. When passing a parameter to a function, is it passed by value (a copy of the variable) or by reference (a pointer/reference to the variable)?</p><h2>It depends on the variable type</h2><p>We have 2 main types of variables in Python, <code>mutable</code> and <code>immutable</code> .</p><p><strong>Mutable variables,</strong> such as lists, dictionaries, and sets, can have their content altered without the need for re-initialization.</p><p><strong>Immutable variables</strong>, including tuples, strings, and integers, are not designed to have their content changed without re-initialization, which involves creating a new variable.</p><p>Let me show you what I mean by a simple example</p><pre><code>&gt;&gt;&gt; x = 5
&gt;&gt;&gt; id(x)
4323140904
&gt;&gt;&gt; x += 1
&gt;&gt;&gt; id(x)
4323140936
&gt;&gt;&gt; #You can see how the id of the variable x has changed
&gt;&gt;&gt; l = [1]
&gt;&gt;&gt; id(l)
4308117184
&gt;&gt;&gt; l.append(2)
&gt;&gt;&gt; id(l)
4308117184
&gt;&gt;&gt; #while appending new values to the list, it still maintains the same id
&gt;&gt;&gt; l = [1, 2]
&gt;&gt;&gt; id(l)
4308119552
&gt;&gt;&gt; # But after re-initializing it, it changes

</code></pre><h2>How does that work when passing as arguments?</h2><p>When you pass a variable to a function, it takes into consideration the type of this variable, and from here, it behaves accordingly</p><p><strong>Example: Passing an immutable variable to a function</strong></p><pre><code>&gt;&gt;&gt; x = 1
&gt;&gt;&gt; def add_2(a):
...     print(f"id(a):{id(a)}")
...     a +=2
...     print(f"id(a):{id(a)}")
...     print(a)    
...
&gt;&gt;&gt; id(x)
4323140776
&gt;&gt;&gt; add_2(x)
id(a):4323140776
id(a):4323140840
3
&gt;&gt;&gt; x
1
</code></pre><p><em>As you can see in the previous example, the</em> <code>id</code> <em>of the argument</em> <code>a</code> <em>was the same as</em> <code>x</code> <em>before we changed its value, but it changed after! and the value of</em> <code>x</code> hasn't changed!</p><p><strong>Example: Passing a mutable variable to a function</strong></p><pre><code><code>&gt;&gt;&gt; def append_2(a):
...     print(f"id(a):{id(a)}")
...     a.append(2)
...     print(f"id(a):{id(a)}")
...     print(a)
&gt;&gt;&gt; ls = [1]
&gt;&gt;&gt; append_2(ls)
id(a):4308118656
id(a):4308118656
[1, 2]
&gt;&gt;&gt; id(ls)
4308118656
&gt;&gt;&gt; ls
[1, 2]</code>
</code></pre><p><em>As you can see here, things are a little bit different!</em></p><p><em>The reference to the list didn't change even after appending a new value to the list, and the</em> <code>append</code> operation reflected on the original <code>ls</code> <em>list!</em></p><p>&#128161;</p><p><strong>In simpler terms,</strong> <em>consider the main rule here is that Python passes variables by Reference.</em> <strong>if the variable is immutable, any change you apply to it will not affect the original variable, so it will look like you are</strong> <strong>passing by value</strong>, <strong>but if it is mutable, it will keep acting like passing-by-reference as it is.</strong></p><p>]]&gt;</p>]]></content:encoded></item><item><title><![CDATA[4 Effective CLI Tools to Simplify Your Daily Tasks as a Software Engineer]]></title><description><![CDATA[Throughout your career as a Software Engineer, working with the Shell (Command Line) is a daily routine and an essential skill.]]></description><link>https://blog.m-ashour.space/p/4-effective-cli-tools-to-simplify-your-daily-tasks-as-a-software-engineer</link><guid isPermaLink="false">https://blog.m-ashour.space/p/4-effective-cli-tools-to-simplify-your-daily-tasks-as-a-software-engineer</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 16 Jul 2023 16:57:50 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/9cecfb82-f5c9-4cef-85b3-ecd00de8e1c6_889x303.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_!T-bB!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!T-bB!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!T-bB!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!T-bB!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!T-bB!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!T-bB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!T-bB!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!T-bB!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!T-bB!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!T-bB!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F7f20d67f-f39b-4cbd-a310-f1f6c94d0d36_1024x608.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>Throughout your career as a Software Engineer, working with the Shell (Command Line) is a daily routine and an essential skill. You will encounter numerous tasks that can be time-consuming, and eventually, you may discover that a specific tool could have saved you hours. Allow me to save you some trouble by providing a list of excellent tools that can transform the way you approach certain tasks.</p><h2>#1 <s>C</s> (B)at</h2><p>Yes, it's not a typo; <code>bat</code> is the evolution of what <code>cat</code> is. <code>bat</code> makes you able to stdout the content of a text file while keeping the formatting and text highlighting. for example, here is the difference between using <code>bat</code> on a Python file vs using <code>cat</code></p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!iMN-!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!iMN-!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 424w, https://substackcdn.com/image/fetch/$s_!iMN-!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 848w, https://substackcdn.com/image/fetch/$s_!iMN-!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 1272w, https://substackcdn.com/image/fetch/$s_!iMN-!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!iMN-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!iMN-!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 424w, https://substackcdn.com/image/fetch/$s_!iMN-!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 848w, https://substackcdn.com/image/fetch/$s_!iMN-!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 1272w, https://substackcdn.com/image/fetch/$s_!iMN-!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0a0b686e-88b9-45fb-870c-36a6af9a60c6_889x303.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>It doesn't end here; <code>bat</code> it offers numerous useful features that you can utilize. For instance, let's examine this file to determine whether I used spaces or tabs!</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!9hPa!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!9hPa!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 424w, https://substackcdn.com/image/fetch/$s_!9hPa!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 848w, https://substackcdn.com/image/fetch/$s_!9hPa!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 1272w, https://substackcdn.com/image/fetch/$s_!9hPa!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!9hPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!9hPa!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 424w, https://substackcdn.com/image/fetch/$s_!9hPa!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 848w, https://substackcdn.com/image/fetch/$s_!9hPa!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 1272w, https://substackcdn.com/image/fetch/$s_!9hPa!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0b4f0ad0-dba2-4fdf-af6e-742954219559_785x192.png 1456w" sizes="100vw"></picture><div></div></div></a></figure></div><p>By</p><p> using the <code>-A</code> flag, I was able to see things like spaces, tabs, new lines ..etc, and As you can see, I used spaces inside the function and tabs inside the if statement (never do that, please!!)</p><p><code>bat</code> is by default connected to git. So if you have git set up in your repo, it will read and display the changes automatically. for example,</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!TYzZ!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!TYzZ!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 424w, https://substackcdn.com/image/fetch/$s_!TYzZ!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 848w, https://substackcdn.com/image/fetch/$s_!TYzZ!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 1272w, https://substackcdn.com/image/fetch/$s_!TYzZ!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!TYzZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" title="" srcset="https://substackcdn.com/image/fetch/$s_!TYzZ!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 424w, https://substackcdn.com/image/fetch/$s_!TYzZ!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 848w, https://substackcdn.com/image/fetch/$s_!TYzZ!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 1272w, https://substackcdn.com/image/fetch/$s_!TYzZ!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe95f23c4-ec72-43bd-acef-123a46e2e47f_903x212.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p><a href="https://github.com/sharkdp/bat">Project homepage</a></p><h2>#2 Grep, your search tool</h2><p><code>grep</code> is a very powerful utility available in UNIX and UNIX-like operating systems. <code>grep</code> stands for <code>g/re/p</code> <code>(global/regular expression search / and print)</code> It is used to search text or search the given file for lines containing a match to the given strings or patterns.</p><h3>Basic use</h3><pre><code>grep 'pattern' filename</code></pre><p>This will search for a 'pattern' inside the file called 'filename' and print out any lines that match.</p><h3><strong>Case Insensitive Search</strong></h3><pre><code>grep -i 'pattern' filename</code></pre><p>This command will match lines that contain 'Pattern', 'PATTERN', 'pattern', or any mix of cases.</p><h3><strong>Recursively Search Directories</strong></h3><pre><code>grep -R 'pattern' directory_path</code></pre><p><code>grep</code> can be used to search directories recursively with the <code>-r</code> or <code>-R</code> option (recursive).</p><h3>Search Multiple Patterns</h3><pre><code>grep -e 'pattern1' -e 'pattern2' filename</code></pre><p>This command will print out lines that contain either 'pattern1' or 'pattern2' in the file 'filename'.</p><h3>Line Number information</h3><pre><code>grep -n 'pattern' filename</code></pre><p>With <code>-n</code> option, <code>grep</code> shows the line numbers of the lines in the output.</p><h3>Count of lines with a certain pattern</h3><pre><code>grep -c 'pattern' filename</code></pre><p>With <code>-c</code> option, <code>grep</code> will return the count of lines that match the pattern.</p><p>You can learn more about grep by exploring the options in <code>grep --help</code> or from the <a href="https://man7.org/linux/man-pages/man1/grep.1.html">Grep Manual</a></p><h2>#3 Crontab</h2><p><code>Crontab</code> is your friend when you need to schedule various jobs on your server or machine, which will be managed and executed by the cron daemon. You can use it to schedule updates and cleanups or even execute your scripts. Allow me to guide you through the main functionalities.</p><h3>Listing your jobs</h3><pre><code>crontab -l</code></pre><p>this will view the current jobs registered by the current user</p><h3>Creating a new Cron</h3><pre><code>crontab -e</code></pre><p>This will open an editor for a crontab file for you to write your corn job, you will need to use this format to describe the new corn job.</p><pre><code>*     *     *   *    *        command to be executed
-     -     -   -    -
|     |     |   |    |
|     |     |   |    +----- day of week (0 - 6) (Sunday=0)
|     |     |   +------- month (1 - 12)
|     |     +--------- day of month (1 - 31)
|     +----------- hour (0 - 23)
+------------- min (0 - 59)
</code></pre><p>for example</p><pre><code>0 0 * * 1 python3 example.py</code></pre><p>This will execute the example.py at 12 AM every Monday</p><h3>Deleting all the current registered cron jobs</h3><pre><code>crontab -r</code></pre><p>This will remove all the current cron jobs registered for the current user. if you need access to all the system-wide cron jobs, you will need superuser privileges</p><p><a href="https://man7.org/linux/man-pages/man5/crontab.5.html">Crontab Manual</a></p><h2>#4 Xargs</h2><h3>Basic Usage</h3><p><code>xargs</code> is a powerful tool that reads and utilizes the output from one command, allowing you to apply various commands on the output with a range of options. For example:</p><pre><code>ls | xargs</code></pre><p>Here, <code>xargs</code> will get the output of <code>ls</code> and will print it in one line separated by spaces. As there was no command provided to <code>xargs </code>It will just do a print. Let's try to apply <code>ls -lh</code> to every output we get from <code>ls</code></p><pre><code>ls | xargs ls -lh</code></pre><h3>Combine with other tools</h3><p>Mostly, you will get the most of <code>xargs</code> When you use it combined with other tools, for example, combine it with <code>find</code></p><pre><code>find . -type f -mtime +30 | xargs rm -f</code></pre><p>Here, you use <code>find</code> to filter every file that is over 30 days old, and pass it to xargs to apply <code>rm -f</code> on it. you can use it combined with <code>crontab</code> to make it a scheduled job (it's a perfect example of using these powerful tools instead of writing a specific program for it)</p><h3>Use placeholders for more complex commands</h3><p>Sometimes, you need to automate commands that might need more than one argument; here, you can use the power of the placeholder. Let me give an example</p><pre><code>ls -1 *.txt | xargs -I {} mv {} old/</code></pre><p>Here, we define a placeholder using <code>-I {}</code> and use it to specify the exact location that we want our argument to be placed in.</p><h3>Parallelize it</h3><p>Sometimes, you would want to parallelize the job executed on the arguments supported; to do that, you will need to use <code>-P</code> Here is an example</p><pre><code>find . -type f -name '*.txt' | xargs -n 1 -P 4 grep -i 'pattern'</code></pre><p>Here, we use <code>find</code> to get all the text files, pass it to <code>xargs</code> to parallelize <code>grep</code> on each file using up to 4 parallel <code>grep</code>s at once!</p><p><a href="https://man7.org/linux/man-pages/man1/xargs.1.html">Xargs Manual</a></p><p>I come across so many handy tools every day that really make a difference in my daily work. I've shared a bunch of my favorites that I think will help you out, too. If you've got any cool tools you use in your day-to-day tasks, feel free to share them in the comments section!</p><p>Catch you in the next one!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Improve Your Python Code Readability and Maintenance by Avoiding These 3 Mistakes]]></title><description><![CDATA[TLDR; Avoid these 3 mistakes for clearer Python code: overusing dictionaries, using strings for variations, and not using type hinting.]]></description><link>https://blog.m-ashour.space/p/improve-your-python-code-readability-and-maintenance-by-avoiding-these-3-mistakes</link><guid isPermaLink="false">https://blog.m-ashour.space/p/improve-your-python-code-readability-and-maintenance-by-avoiding-these-3-mistakes</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sun, 09 Jul 2023 15:37:57 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Nf-O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.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_!Nf-O!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Nf-O!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!Nf-O!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!Nf-O!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!Nf-O!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Nf-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png" width="1024" height="608" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/c3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:608,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="" srcset="https://substackcdn.com/image/fetch/$s_!Nf-O!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 424w, https://substackcdn.com/image/fetch/$s_!Nf-O!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 848w, https://substackcdn.com/image/fetch/$s_!Nf-O!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.png 1272w, https://substackcdn.com/image/fetch/$s_!Nf-O!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fc3acf006-4fc8-44c1-91bc-fa7bfffb0730_1024x608.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><blockquote><p><em>TLDR; Avoid these 3 mistakes for clearer Python code: overusing dictionaries, using strings for variations, and not using type hinting. Consider data classes and enums for structured data and variations, and use type hinting for readability.</em></p></blockquote><p>When you are trying to prototype an idea or start a new project in Python, it is generally a quicker process than using other languages in most cases. The simplicity of Python's syntax, side by side with its dynamic nature, is extremely attractive to anyone starting, but this can also be detrimental in the long run. As you advance in your career, you begin to see how shipping new software is just part of the big picture, and there is a larger aspect called maintaining old software, or as we call it, legacy code.</p><p>With that said, <strong>here are some mistakes to avoid if you want to make it easier for people and your future self to maintain your code.</strong></p><h2>Mistake #1 Using dictionaries for everything</h2><p>Dictionaries are a fantastic data structure and incredibly powerful in Python, but overusing them can make your code difficult to trace.</p><p>The primary issue with dictionaries is their lack of a defined structure. Without a clear structure, it's challenging to know what to expect from a dictionary at a specific point in your software. What keys are present, and what types of data are held within? It will require extra effort from you to ensure the structure and the existence of certain keys/values. To avoid this, you can use <strong>Data classes</strong>.</p><p>The main advantage of Data classes is the presence of a defined structure, which can be extremely helpful if your data has a consistent structure that will always be satisfied, for example.</p><pre><code>from dataclasses import dataclass

@dataclass
class User:
    name: str
    url: str
    age: int
    address: str
new_user = User(name="Mo", url="www.m-ashour.space", age=28, address="Earth")
#Using dataclass, you can access the data inside directly like this
&gt;&gt; new_user.name
&gt;&gt; new_user.age

#compare using dataclasses here with using dict
new_user_dict = {"name":"Mo", "url" : "www.m-ashour.space", "age":28, "address":"Earth"}
#here, you don't have an enforced defined structure and you are vurnable to more mistakes

&gt;&gt; new_user_dict["name"]
&gt;&gt; new_user_dict["age"]
</code></pre><p>As you can see, the advantage of a defined structure is quite obvious, even in a very simple example. Imagine yourself reading this code in 3 years; which one would be easier to maintain and read?</p><p><strong>Of course, it's not always the right choice!</strong></p><p>Data classes are easier to write and maintain, but they are not the most lightweight. if performance is an issue, you might look at other solutions, which we can discuss in another article.</p><h2>Mistake #2 Using Strings to distinguish variations</h2><p>Strings are powerful and incredibly useful, but misusing them can lead to numerous problems and potential issues.</p><p>To represent variations, you need a well-defined and structured method to implement them explicitly and limit the options to only the supported variations. This way, you can prevent any potential issues arising from referring to or passing a non-supported, non-implemented variation. In this case, using strings will not fulfill these requirements, but using Enums will. Allow me to use the same example.</p><p><strong>Don't</strong></p><pre><code>from dataclasses import dataclass

@dataclass
class User:
    name: str
    url: str
    age: int
    address: str
    #let's add a user type
    user_type: str
#here, using user_type as string, will not give any indication on what user types we have
</code></pre><p><strong>Please Do</strong></p><pre><code>from dataclasses import dataclass
from enum import Enum

class UserType(Enum):
    STANDARD = "STANDARD"
    PRO = "PRO"
    BUSINESS = "BUSINESS"

@dataclass
class User:
    name: str
    url: str
    age: int
    address: str
    user_type: UserType
#here you can clearly understand the types of users that the code supports
</code></pre><p>As you can see, Enums can provide an incredible boost in understanding the code and can provide help in how to use it. It's a timeless documentation on its own, even on the basic level. There is more to Enums, but that's a topic for a separate post.</p><h2>Mistake #3 Not using type hinting</h2><p>Even though type hinting in Python doesn't enforce anything or check the types during runtime (since we don't have compile time), it still provides readability on various levels.</p><p>Type hinting wasn't introduced in Python until version 3.5. While it's not native to the language or fully matured, it still offers readability and productivity enhancements when maintaining existing code or writing new code. Current Code editors and IDEs now have good integration with it, and depending on the types you hint your variables with, they can suggest appropriate methods. Additionally, it serves as basic documentation for your functions.</p><p>For example,</p><pre><code>from typing import List, Tuple
def draw_line(x,y):
    .....

#using type hinting
def draw_line(x:List[float], y:List[float]) -&gt; List[Tuple[float,float]]:
    .....
</code></pre><p>Can you see the difference in readability? This is a big difference for anyone reading your code (including you).</p><h2>Conclusion</h2><p>In this Article, I walked you through 3 main mistakes that can make your code more trouble to maintain and read. So to sum it up</p><ul><li><p>Data classes are a better option than Dicts for structured, well-defined data bundles</p></li><li><p>Enums speak louder and clearer than Strings when it comes to domain-defined variations</p></li><li><p>Type Hinting is a great advisor and a future guide for your colleagues and your future-self</p></li></ul><p>These are not the only mistakes, there are more that we can learn from. Let me know in the comments about some of them!</p><p>See you in the next one!</p><p>]]&gt;</p>]]></content:encoded></item><item><title><![CDATA[Exploring Rust with a Python Background: My Early Experiences]]></title><description><![CDATA[Background]]></description><link>https://blog.m-ashour.space/p/exploring-rust-with-a-python-background-my-early-experiences</link><guid isPermaLink="false">https://blog.m-ashour.space/p/exploring-rust-with-a-python-background-my-early-experiences</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 01 Jul 2023 18:12:40 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!aLmo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_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_!aLmo!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aLmo!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aLmo!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aLmo!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aLmo!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aLmo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5baf62ee-4d53-4c36-9b58-e2985fcac191_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;:148170,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://mashour94.substack.com/i/158609368?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_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_!aLmo!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 424w, https://substackcdn.com/image/fetch/$s_!aLmo!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 848w, https://substackcdn.com/image/fetch/$s_!aLmo!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_1920x1080.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!aLmo!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5baf62ee-4d53-4c36-9b58-e2985fcac191_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></p><h2>Background</h2><p>I have been writing Python code professionally for over half a decade (about 7 years). I have used it in various companies and products, such as Search Engines, NLP, Satellite Data Processing, Machine Learning, and more. It's a great language and has a tremendous and rich ecosystem that is hard to find in other languages, especially if you are in the data world.</p><p>That said, Python has some weaknesses that you can't overlook as you grow in your career. One of them is performance and memory management. It's not the worst (I've seen worse, believe me!), but it's not the greatest either. When you expand to scenarios where speed and memory management are crucial, Python is not the one to call.</p><p>Like most software engineers, throughout my career, I have written code in different languages, such as JS/NodeJs, TypeScript, and Golang. I was able to see how different languages somewhat translate ideas back and forth between each other. This helped me recognize what each language is good for and understand the main goals behind their creation.</p><p>Recently, I started to come across a lot of Rust content on YouTube. It's a new, interesting language that has a different mentality and design. After watching and reading more about it, I decided that I should give it a shot.</p><h3>Rust Resources that I liked</h3><p>The official Rust website has great resources to help you learn the language. my favorite so far is mixing between <a href="https://doc.rust-lang.org/book/">The Rust book</a> and <a href="https://doc.rust-lang.org/rust-by-example/">Rust By Example</a>. Both work best together.</p><p>The Rust book walks you through the basics of the language and explains every bit. It contains projects and snippets so you can try it yourself and make sure to exercise.</p><p>Rust By Example takes the "learn from code and comments" approach. It doesn't go as deep as the Rust book, but it gives you a quick and easy resource to review and remember the syntax, which is quite useful.</p><p>Another Resource That I like is the <a href="https://www.youtube.com/@letsgetrusty">Let's Get Rusty </a>YouTube channel. It has a playlist going through the Rust Book, which is high quality and well presented!</p><p>Make no mistake, I'm not a Rust expert by any means, I'm still learning and going through the "Writing crappy Rust code" phase and fighting with the compiler to get it to accept my code.</p><p>The differences that you will experience between writing Rust and Python are not hard to notice. In fact, you can see it from the very first program you run, these are mine so far (add yours in the comment section)</p><h3>Rust is a statically typed language</h3><p>Everything needs to be decided at compile time; there is no room for guessing or making decisions during runtime. Which is different from how Python operates. Python is dynamically typed. Things get decided in the Runtime (when your program is running). Using type hinting in Python doesn't change this fact. It's a good practice to use, of course; I use it all the time, but it doesn't change how Python operates and doesn't enforce any kind of checks.</p><h3>Rust Compiler is a strict safeguard</h3><p>I sometimes use "annoying" instead of "strict," but I think I'm in a phase of my career where I appreciate it to some extent. It doesn't allow you to write code that is not safe, or that can lead to any unexpected behavior. It's a safeguard for your future self that ensures the code you write now will still work as expected no matter what time in the future. Of course, that doesn't come without a cost; the main cost here that I see is the slow write/development pace. It's hard to get it right from the beginning, and it takes time to write in Rust, especially if you are just starting. You will see the huge difference in time between writing Rust and writing Python. But I guess it gets better over time, and the correctness and safety aspects can compensate for the long development time with minimal maintenance time in the future.</p><h3>No garbage collecting and no manual memory management.</h3><p>Rust comes with new ideas about how to manage memory. It doesn't have a garbage collection like Python and Java, nor does it have Manual memory management like C++. It introduces the concept of Borrowing and manages it with the Borrow Checker.</p><p>The Borrow Checker in Rust enforces strict rules on how references to data can be borrowed, preventing issues like data races and dangling pointers. By keeping track of which parts of the code have access to certain data, the borrow checker allows Rust to automatically manage memory, making your code safer and more efficient.</p><p>It doesn't trust you; it knows that you will mess things up at some point, which is annoying for your ego but super helpful for your goal!</p><h3>Enums are strong in Rust</h3><p>I like the Enums in Rust and how it is empowered by Rust Type System. Enums in Rust let you create a type with different options, each holding different data. This makes your code shorter and clearer, helping you work with complex data and handle different situations smoothly. Enums also use Rust's strong type system and pattern matching, making your code safe and efficient.</p><h3>Learning Rust made me write better Python Code</h3><p>Yeah, I know it might seem silly and annoying to my own ego. But Learning Rust made me conscious about things that I didn't use to spend too much time thinking about. Writing Python makes you productive in the development time, it's super flexible and forgiving. Python trusts you most of the time that you are going to do the right thing, which is sweet but harmful. Rust doesn't give you a chance to do anything that it doesn't like, which is safe but super annoying sometimes. Learning from the strictness and the seeking for correctness from Rust and mixing it with the flexibility and simplicity of Python makes me write better code that is safer.</p><h3>Conclusion</h3><p>Learning different languages with different designs opens your eyes to new aspects and makes you improve. This happened to me when I learned other languages like Go, JS, TS, Java, and C, and it's happening now while learning Rust. I don't know if I'll end up proficient in Rust anytime soon (which is unlikely) or even use it in a big project. But I know that it has lots to offer, and the learning journey itself adds a lot to me.</p><p>I hope this is not the last time I write about it here, I still have lots to talk about!</p><p></p>]]></content:encoded></item><item><title><![CDATA[Setting up a shared volume for your docker swarm using GlusterFs]]></title><description><![CDATA[Working on a distributed software product before the advent of containers was quite different compared to how it is now, following the widespread adoption of containerization.]]></description><link>https://blog.m-ashour.space/p/setting-up-a-shared-volume-for-your-docker-swarm-using-glusterfs</link><guid isPermaLink="false">https://blog.m-ashour.space/p/setting-up-a-shared-volume-for-your-docker-swarm-using-glusterfs</guid><dc:creator><![CDATA[Mohamed Ashour]]></dc:creator><pubDate>Sat, 17 Jun 2023 16:03:36 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/05f47bb8-946d-47d0-abb5-c95681c5c53a_478x502.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Working on a distributed software product before the advent of containers was quite different compared to how it is now, following the widespread adoption of containerization.</p><p>It goes without saying that for most people in the tech community, when containerization is mentioned, Docker is often one of the first things that come to mind, if not the very first. I'm not here to argue that others pioneered the concept of containerization before Docker; that might be a topic for another blog post.</p><p>Instead, I want to discuss a problem I encountered - and I'm sure others have as well - while working with Docker Swarm and needing some form of data sharing between swarm nodes. Unfortunately, this feature is not natively supported in Docker. You either have to rely on a third-party storage service that offers a robust API for your nodes to interact with, which can be quite expensive, or you can take the more challenging route and create your own shared storage solution. In this post, I'll share the latter approach that I chose to implement.</p><p>Introduction:</p><h3>What is GlusterFS?</h3><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!VIlc!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!VIlc!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 424w, https://substackcdn.com/image/fetch/$s_!VIlc!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 848w, https://substackcdn.com/image/fetch/$s_!VIlc!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 1272w, https://substackcdn.com/image/fetch/$s_!VIlc!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!VIlc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/6801e16e-df19-447b-9fba-bda95e14871c_478x502.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Alt Text&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alt Text" title="Alt Text" srcset="https://substackcdn.com/image/fetch/$s_!VIlc!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 424w, https://substackcdn.com/image/fetch/$s_!VIlc!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 848w, https://substackcdn.com/image/fetch/$s_!VIlc!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 1272w, https://substackcdn.com/image/fetch/$s_!VIlc!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F6801e16e-df19-447b-9fba-bda95e14871c_478x502.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><h2>What is GlusterFS?</h2><p>GlusterFS is a scalable, distributed file system that combines disk storage resources from multiple servers into a single global namespace. As an open-source solution, it offers features such as replication, quotas, geo-replication, snapshots, and more.</p><p>GlusterFS allows you to consolidate multiple nodes into one namespace, presenting various options. You can:</p><ol><li><p>Create a replicated volume that ensures the availability of your data without having to worry about data loss.</p></li><li><p>Establish a distributed volume that increases storage capacity by distributing your data across multiple machines. While this option sacrifices availability, it provides more storage using the same resources.</p></li></ol><p>You can learn about the various setups of Gluster from here <a href="https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/">https://docs.gluster.org/en/latest/Quick-Start-Guide/Architecture/</a></p><h3>Let's start with our setup</h3><p>First, let's envision a swarm setup consisting of three manager nodes and three worker nodes. We need the containers on the worker nodes to access the same data, regardless of their location, while maintaining data consistency. The availability of our data is of utmost importance. Therefore, we need to create a replicated GlusterFS volume that duplicates all the data across multiple replication nodes. Since we lack the resources to acquire additional machines to serve as storage pools, we will utilize our swarm machines to also function as storage pool nodes.</p><h4>So, our architecture will be something like this</h4><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aBxl!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aBxl!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 424w, https://substackcdn.com/image/fetch/$s_!aBxl!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 848w, https://substackcdn.com/image/fetch/$s_!aBxl!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 1272w, https://substackcdn.com/image/fetch/$s_!aBxl!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aBxl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Alt Text&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Alt Text" title="Alt Text" srcset="https://substackcdn.com/image/fetch/$s_!aBxl!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 424w, https://substackcdn.com/image/fetch/$s_!aBxl!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 848w, https://substackcdn.com/image/fetch/$s_!aBxl!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 1272w, https://substackcdn.com/image/fetch/$s_!aBxl!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4e99304d-87c6-45b6-a686-9a86d9f20a46_960x720.png 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><ul><li><p>3 Swarm Managers</p></li><li><p>3 Swarm Workers</p></li><li><p>GlusterFs Volume connected to the 3 servers</p></li></ul><p>Yes, I understand that this design might seem unusual at first, as it causes our workers to function as both storage pools and clients simultaneously. In this setup, they serve as replication nodes for the collected data while also acting as servers that mount the volume and read from it. However, upon further consideration, this configuration can be quite beneficial for a variety of use cases that your application might require, all without incurring any additional costs!</p><p>let's start the dirty work</p><p>let's assume we are working with a Debian-based distro, like Ubuntu</p><p>first, you will need to install GlusterFs on all three worker machines you can do this by</p><pre><code>sudo apt updatesudo apt install software-properties-commonsudo add-apt-repository ppa:gluster/glusterfs-7sudo apt updatesudo apt install glusterfs-server</code></pre><p>then, you will need to start and enable the GlusterFs daemon service on all the worker machines</p><pre><code>sudo systemctl start glusterdsudo systemctl enable glusterd</code></pre><p>then, make sure you generate an ssh-key on each machine</p><pre><code>ssh-keygen -t rsa</code></pre><p>after that, to be able to deal with all machines with their hostnames, you will need to edit the <code>/etc/hosts</code> for each of these machines and add the hostnames for the other nodes assigned to their IPs, like this format</p><pre><code>&lt;IP1&gt; &lt;HOSTNAME1&gt;&lt;IP2&gt; &lt;HOSTNAME2&gt;</code></pre><p>Now, let's create our storage cluster, start from one of the machines and add the others using this command</p><pre><code>sudo gluster peer probe &lt;Hostname&gt;</code></pre><p>after you add the 2 nodes, run this command to make sure that all of the nodes joined the storage cluster</p><pre><code>sudo gluster pool list</code></pre><p>now, we will need to make a directory in all of the 3 workers to act like a brick for our volume But wait, what is a brick?? a brick is a directory that acts as a volume unit, and GlusterFs uses it in all of its storage pool nodes to know where is the data to store/deal with</p><p>so basically you will need to create this directory on each worker node, let's name it <code>brick1</code> and put it under <code>/gluster-volumes</code></p><pre><code>sudo mkdir -p /gluster-volumes/brick1</code></pre><p>Now, we are ready to create our replicated volume (let's call it <code>demo-v</code> ) [run this command only on the main machine]</p><pre><code>sudo gluster volume create demo-v replica 3 &lt;HOSTNAME1&gt;:&lt;BRICK_DIRECTORY&gt; &lt;HOSTNAME2&gt;:&lt;BRICK_DIRECTORY&gt; &lt;HOSTNAME3&gt;:&lt;BRICK_DIRECTORY&gt; force</code></pre><p>then start the volume</p><pre><code>sudo gluster volume start demo-v</code></pre><p>and Congrats, you have a replicated volume now that is ready to be mounted and used in any device Now, let's mount this volume on our 3 workers let's say that we will mount our volume under <code>/our-application/logs</code></p><pre><code>sudo mount.glusterfs localhost:/demo-v /our-application/logs/</code></pre><p>then, to make it permanent, we will need to add it to our <code>fstab</code> file so open <code>/etc/fstab</code> and add this line</p><pre><code>localhost:/demo-v /our-application/logs/ glusterfs defaults,_netdev,acl, backupvolfile-server=&lt;HOSTNAME&gt; 0 0</code></pre><p>instead of the <code>&lt;HOSTNAME&gt;</code> add a hostname of one of the worker machines you have, so if you needed to get it out of the storage pool, you can still mount the volume using the other machine.</p><p>Now you can try this</p><pre><code>touch /our-application/logs/test.txt</code></pre><p>and check out the other workers, find the file? Congrats! you have a working replicated volume that is mounted across all of your workers.</p><p>In simpler words, this article shows how to use GlusterFS, a free and expandable file system, to share storage between Docker Swarm nodes. It guides you through installing and setting up GlusterFS, making a storage cluster, and testing if it works right.</p><p>Any questions? leave a comment!</p><p>]]&gt;</p>]]></content:encoded></item></channel></rss>