<?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[The Embedded Institute]]></title><description><![CDATA[Forensic Analysis & Software Process Excellence for Automotive & Safety-Critical Engineering.]]></description><link>https://embedded.institute</link><image><url>https://substackcdn.com/image/fetch/$s_!LGrG!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8e93c06a-711c-4bb9-b6c8-6fb1e7e66f1f_1254x1254.png</url><title>The Embedded Institute</title><link>https://embedded.institute</link></image><generator>Substack</generator><lastBuildDate>Wed, 29 Jul 2026 06:53:29 GMT</lastBuildDate><atom:link href="https://embedded.institute/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Embedded Institute]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[EmbeddedInstitute@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[EmbeddedInstitute@substack.com]]></itunes:email><itunes:name><![CDATA[Institute Editorial]]></itunes:name></itunes:owner><itunes:author><![CDATA[Institute Editorial]]></itunes:author><googleplay:owner><![CDATA[EmbeddedInstitute@substack.com]]></googleplay:owner><googleplay:email><![CDATA[EmbeddedInstitute@substack.com]]></googleplay:email><googleplay:author><![CDATA[Institute Editorial]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[𝖫𝖾𝖺𝖽𝖾𝗋𝗌: 𝖺𝗋𝖾 𝗒𝗈𝗎 𝗍𝗎𝗋𝗇𝗂𝗇𝗀 𝗄𝗇𝗈𝗐𝗅𝖾𝖽𝗀𝖾 𝗂𝗇𝗍𝗈 𝖺𝖼𝗍𝗂𝗈𝗇 — 𝗈𝗋 𝗌𝗍𝗂𝗅𝗅 𝗋𝖾𝗅𝗒𝗂𝗇𝗀 𝗈𝗇 𝗆𝖾𝗆𝗈𝗋𝗒 𝖺𝗇𝖽 𝗋𝖾𝗉𝗈𝗋𝗍𝗌?]]></title><description><![CDATA[The gap is where AI wins. Where does your org stand?]]></description><link>https://embedded.institute/p/361</link><guid isPermaLink="false">https://embedded.institute/p/361</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Fri, 23 Jan 2026 13:50:16 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!x93V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_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_!x93V!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!x93V!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!x93V!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!x93V!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!x93V!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!x93V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_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;:2048660,&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://paragba.substack.com/i/185534952?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_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_!x93V!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!x93V!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!x93V!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!x93V!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87b22e03-b7ca-4ee6-ba5a-5239ad0a2e53_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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>Data Is Everywhere &#8212; And Humans Can&#8217;t Track It All</h2><p>In every organization, <strong>data is scattered</strong>:</p><ul><li><p>Goals, plans, projects</p></li><li><p>Different tools, multiple planning tools</p></li><li><p>Tools deployments over time. Locked in data.</p></li><li><p>Design decisions and validations</p></li><li><p>Lessons learned from previous projects</p></li><li><p>Notes from cross-functional teams</p></li></ul><p>Traditionally, humans must <strong>dig through each source</strong> to reconnect with knowledge. But what if <strong>AI could do that for you</strong>, continuously, accurately, and without extra effort?</p><blockquote><p>No need to build a Zettelkasten. No need to migrate to Obsidian. No need to redesign your entire system.<br>If your information already lives in docs, Notion, databases, or project tools &#8212; that&#8217;s enough.</p></blockquote><p></p><div class="poll-embed" data-attrs="{&quot;id&quot;:437966}" data-component-name="PollToDOM"></div><p></p><div><hr></div><h2>&#129302; AI as Your Continuous Knowledge Assistant</h2><p>AI can become the <strong>entity that bridges scattered data and decision-making</strong>. It:</p><ul><li><p>Explores your entire knowledge base</p></li><li><p>Connects ideas across time</p></li><li><p>Notices when plans drift from goals</p></li><li><p>Reminds you of forgotten assumptions</p></li><li><p>Highlights hidden dependencies</p></li><li><p>Surfaces opportunities you might have missed</p></li></ul><p><strong>Real-world examples in automotive:</strong></p><ol><li><p><strong>Design Validation &amp; Lessons Learned</strong><br>AI scans historical design decisions, recalls past failures or recalls, and flags potential issues in new designs before simulation or production.</p></li><li><p><strong>Supplier &amp; Component Risk Assessment</strong><br>AI continuously monitors supplier quality reports, audit notes, and field data, alerting engineers when a supplier or part may impact safety or performance.</p></li><li><p><strong>Project Planning &amp; Resource Optimization</strong><br>AI analyzes ongoing projects, past project timelines, and team availability to suggest better sequencing, highlight potential bottlenecks, and surface overlapping efforts.</p></li></ol><p><strong>Example outputs:</strong></p><ul><li><p>&#8220;This new component choice conflicts with a past design decision &#8212; consider alternatives.&#8221;</p></li><li><p>&#8220;Two teams are solving overlapping problems; resources could be better aligned.&#8221;</p></li><li><p>&#8220;This feature was delayed in the past due to supplier issues. Mitigation recommended.&#8221;</p></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/subscribe?"><span>Subscribe now</span></a></p><div><hr></div><h2>&#129504; Humans Provide the Compass</h2><p>AI surfaces insights, but humans still <strong>set direction and define meaning</strong>:</p><ul><li><p>Choosing trade-offs</p></li><li><p>Making judgment calls</p></li><li><p>Creating new ideas</p></li><li><p>Guiding the team</p></li><li><p>Deciding what actually matters</p></li></ul><blockquote><p>AI expands your <strong>field of view</strong>. Humans provide the <strong>compass</strong>.</p></blockquote><div><hr></div><h2>&#128257; A Leadership-Oriented Way of Working</h2><ol><li><p>Plan, write, and document as usual</p></li><li><p>AI <strong>digests and surfaces</strong> insights from your data</p></li><li><p>You gain <strong>clarity, context, and foresight</strong></p></li><li><p>Make the final decision &#8212; faster, better, more confident</p></li></ol><div><hr></div><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/361?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://embedded.institute/p/361?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://embedded.institute/p/361?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h2>&#10024; The Real Advantage</h2><p>Leaders have tried to optimize knowledge flow for decades. What matters is <strong>acting on information at the right time</strong>. AI&#8217;s strength is <strong>continuous data churning</strong>, turning raw knowledge into actionable insights.</p><p>AI can be your:</p><ul><li><p><strong>Leverage</strong></p></li><li><p><strong>Thinking multiplier</strong></p></li><li><p><strong>Time-saving engine</strong></p></li></ul><blockquote><p>Leaders: are you turning knowledge into action &#8212; or still relying on memory and reports?</p></blockquote><p>The gap is where AI wins. Where does your organization stand?</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/361/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/p/361/comments"><span>Leave a comment</span></a></p><p></p>]]></content:encoded></item><item><title><![CDATA[SMS Firewall: The Only Way to Beat Modern Scammers]]></title><description><![CDATA[Using n8n + Local AI, I built a personal AI firewall for SMS spam, OTP fraud, and useless alerts]]></description><link>https://embedded.institute/p/sms-firewall-the-only-way-to-beat</link><guid isPermaLink="false">https://embedded.institute/p/sms-firewall-the-only-way-to-beat</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Thu, 08 Jan 2026 12:57:08 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!Tmb5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_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_!Tmb5!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!Tmb5!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Tmb5!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Tmb5!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Tmb5!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!Tmb5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png" width="1456" height="971" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f4f0529-0763-48de-b76c-67bea20aa6b9_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;:2571204,&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://paragba.substack.com/i/183902632?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_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_!Tmb5!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 424w, https://substackcdn.com/image/fetch/$s_!Tmb5!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 848w, https://substackcdn.com/image/fetch/$s_!Tmb5!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_1536x1024.png 1272w, https://substackcdn.com/image/fetch/$s_!Tmb5!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f4f0529-0763-48de-b76c-67bea20aa6b9_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 aria-hidden="true" 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><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h2>TL;DR</h2><ul><li><p>&#128245; My phone shows <strong>zero SMS notifications</strong></p></li><li><p>&#129302; All SMS are processed by <strong>n8n + local AI (Qwen)</strong></p></li><li><p>&#128236; Only <strong>important messages (like real OTPs)</strong> send via telegram notification</p></li><li><p>&#128737;&#65039; Spam, promos, and scam messages are silently filtered</p></li><li><p>&#128116; Real benefit when used as guardian covering families that can generate alerts for fraudulent financial transactions</p></li><li><p>&#127968; Runs fully <strong>locally</strong>, no cloud AI, full control</p></li></ul><div><hr></div><h2>The Problem: SMS Is a Security Nightmare</h2><p>My phone receives:</p><ul><li><p>Bank OTPs</p></li><li><p>Delivery alerts</p></li><li><p>Login codes</p></li><li><p>Promotions</p></li><li><p>Obvious scams</p></li><li><p>And increasingly&#8230; <strong>very convincing phishing messages</strong></p></li></ul><p>Important messages get buried. Worse, <strong>senior citizens</strong> in the family are especially vulnerable to:</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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"></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><blockquote><p>&#8220;Your account will be blocked&#8221;<br>&#8220;Click here to verify KYC&#8221;<br>&#8220;Urgent: call this number&#8221;</p></blockquote><p>This is not just annoying any more. It&#8217;s a <strong>security problem</strong>.</p><div><hr></div><h2>The Idea: Build an AI Firewall for SMS</h2><p>Instead of trying to mentally filter messages, I decided:</p><blockquote><p>Let software do it. Automatically. Reliably.</p></blockquote><p>So I built this:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ixRm!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ixRm!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ixRm!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ixRm!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ixRm!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ixRm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg" width="1255" height="408" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:408,&quot;width&quot;:1255,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:75326,&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://paragba.substack.com/i/183902632?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.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_!ixRm!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ixRm!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ixRm!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ixRm!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F23d1aff3-2be7-41e3-8747-22f0dece2dff_1255x408.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 aria-hidden="true" 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><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><ul><li><p>&#128241; Phone receives SMS</p></li><li><p>&#9881;&#65039; Tasker app sends SMS to <strong>n8n Webhook</strong></p></li><li><p>&#129302; n8n sends it to <strong>local AI (Qwen)</strong></p></li><li><p>&#129504; AI classifies the message:</p><ul><li><p>OTP?</p></li><li><p>Bank alert?</p></li><li><p>Important?</p></li><li><p>Spam?</p></li><li><p>Scam?</p></li></ul></li><li><p>&#128451;&#65039; Message is logged in <strong>NocoDB</strong> (future data analysis on patterns)</p></li><li><p>&#128678; Rules decide what happens next</p></li><li><p>&#128236; <strong>Only important messages go to Telegram</strong></p></li></ul><p>And then:</p><blockquote><p>&#128245; I turned OFF all SMS notifications on the phone.</p></blockquote><div><hr></div><h2>The Result: Telegram Is Now My Smart Inbox</h2><ul><li><p>&#9989; No spam</p></li><li><p>&#9989; No promos</p></li><li><p>&#9989; No fake messages</p></li><li><p>&#9989; Only <strong>real, relevant alerts</strong></p></li><li><p>&#9989; Clean, quiet phone</p></li><li><p>&#9989; Full audit trail in database</p></li></ul><p>Telegram becomes my <strong>filtered, intelligent SMS inbox</strong>.</p><div><hr></div><h2>Why Local AI (Qwen)?</h2><ul><li><p>&#128274; No privacy leakage</p></li><li><p>&#9889; Fast</p></li><li><p>&#127968; Runs on my own machine (proxmox/ollama host in this case)</p></li><li><p>&#128184; Zero per-message cost</p></li><li><p>&#129504; Fully customizable prompts and rules</p></li></ul><p>This is not a &#8220;toy chatbot&#8221; use case. This is <strong>real automation</strong>.</p><div><hr></div><h2>The Most Powerful Use Case: OTP Protection</h2><p>This is where it gets serious.</p><p>Instead of:</p><blockquote><p>&#8220;Any message with numbers = OTP&#8221;</p></blockquote><p>I can do:</p><ul><li><p>Check bank name</p></li><li><p>Check service name</p></li><li><p>Check context</p></li><li><p>Check time window</p></li><li><p>Check expected flow</p></li></ul><p>Only then:</p><blockquote><p>&#128680; Send alert to Telegram</p></blockquote><p>Everything else is ignored or logged silently.</p><div><hr></div><h2>The Bigger Plan: Protecting Family (Especially Seniors)</h2><p>Next step:</p><ul><li><p>Install this on family phones</p></li><li><p>Especially for <strong>senior citizens</strong></p></li><li><p>All SMS go through AI filter</p></li><li><p>Only <strong>safe, verified, important</strong> messages reach them</p></li><li><p>Suspicious messages:</p><ul><li><p>Auto-blocked</p></li><li><p>Or sent to me for review</p></li></ul></li></ul><blockquote><p>This becomes a <strong>fraud firewall for humans</strong>.</p></blockquote><div><hr></div><h2>Why This Matters</h2><p>Scams are no longer stupid.</p><p>They look real.<br>They use real names.<br>They mimic real banks.</p><p>But:</p><blockquote><p>AI + automation can outscale scammers.</p></blockquote><div><hr></div><h2>The Philosophy</h2><blockquote><p>Don&#8217;t fight spam.<br><strong>Architect it out of your life.</strong></p></blockquote><div><hr></div><h2>Final Thoughts</h2><p>This is one of those systems that, once built, you forget it exists.</p><ul><li><p>Your phone is silent.</p></li><li><p>Your mind is calm.</p></li><li><p>Important things still reach you.</p></li><li><p>Everything else disappears.</p></li></ul><p>That&#8217;s the best kind of automation. &#128524;</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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[Global variables (FuSa) - Critical Impact on Data & Control Flow]]></title><description><![CDATA[Learn why these common code constructs lead to maintenance nightmares, hidden bugs, and costly diagnostics in ISO 26262 compliant software.]]></description><link>https://embedded.institute/p/global-variables-fusa-critical-impact</link><guid isPermaLink="false">https://embedded.institute/p/global-variables-fusa-critical-impact</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Mon, 09 Jun 2025 04:30:41 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!eE4Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.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_!eE4Z!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!eE4Z!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eE4Z!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eE4Z!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eE4Z!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!eE4Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg" width="1024" height="414" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:414,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:207898,&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://paragba.substack.com/i/165332959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.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_!eE4Z!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 424w, https://substackcdn.com/image/fetch/$s_!eE4Z!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 848w, https://substackcdn.com/image/fetch/$s_!eE4Z!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!eE4Z!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe1a46975-df15-48a1-a409-033bd45a7319_1024x414.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 aria-hidden="true" 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><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>In the high-speed world of automotive software development, where reliability is no longer an option but a matter of life and death, each design choice is of enormous consequence. The employment of global variables is a particularly sly technique, when writing software that meets functional safety standards such as ISO 26262.</p><p>Though they may seem to provide convenience &#8211; instant access to information from anywhere within the codebase &#8211; <em>global variables are actually sneaky saboteurs</em>. They present a myriad of problems that erode maintainability, predictability, and, in the long run, the safety of your automotive systems. Let's unpack why global variables represent a basic anti-pattern in safety-critical automotive software:</p><h2>The Developer Impact: A Maintenance Labyrinth</h2><p>Picture a huge, intricate automotive embedded system with thousands of lines of code. Picture attempting to trace out every location where a global variable could be <code>read </code>from or, more importantly, <code>written</code>.</p><h3>Spaghetti Data Flow: </h3><p>Global variables introduce latent dependencies. A modification of a global in a corner of the code will have unintended effects in an entirely unrelated module. This <em>spaghetti data</em> makes it virtually impossible to know the system's real behavior without tracing every access.</p><h4>Decreased Readability:</h4><p>For a new programmer coming in on the project, learning the system state is an enormous undertaking. They can't just glance at a function signature to learn its inputs and outputs; they have to deduce its interaction with perhaps dozens of global variables.</p><h4>Refactoring Nightmares:</h4><p>Modifying or removing a global variable, even if it seems unused, requires an exhaustive analysis of the entire codebase to ensure no hidden dependencies are broken. This makes refactoring risky and time-consuming, often leading developers to avoid necessary architectural improvements.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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><h3>Unpredictable Memory &amp; Concurrency Issues (Beyond the Stack)</h3><p>Although global variables do not live on the stack (they live in static memory), they pose critical memory and concurrency issues that are just as, if not more, hazardous in a real-time, multi-threaded automotive environment.</p><h4>Race Conditions Galore:</h4><p>Where there is more than one task, thread, or interrupt service routine (ISR) &#8211; and this is a typical situation in automotive ECUs</p><pre><code>global variables are the first to be targeted by race conditions</code></pre><p>If two or more paths of concurrent execution try to change a global variable without any appropriate synchronization controls (such as mutexes or semaphores), the resultant value of the variable is non-deterministic and relies on the timing of execution. This is a well-known root of hard-to-reproduce bugs.</p><h4>Memory Footprint &amp; Lifetime:</h4><p>Global variables hold memory throughout the application's lifetime, whether they are in use or not. Although this may appear insignificant, in resource-limited ECUs, poorly optimized memory usage can cause other problems or constrain future features. More significantly, their eternal presence means that their state is preserved across execution cycles, with the risk of propagating erroneous values from previous operations.</p><pre><code>On average, most of the ECU have more than 80% of RAM consumption, its very hard to eliminate global variables.</code></pre><h4>Cache Coherency Issues:</h4><p>In multi-core processors, global variables shared among multiple cores can cause cache coherency issues, where multiple cores may retain stale versions of the variable within their local caches, creating yet another layer of complexity and potential for misbehavior.</p><h3>The Catastrophic Effect on Data Flow</h3><p>Data flow addresses how data is transferred, converted, and utilized across the software system. Global variables devastate this important factor:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!umcv!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!umcv!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!umcv!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!umcv!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!umcv!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!umcv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png" width="1024" height="1536" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1536,&quot;width&quot;:1024,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:2524883,&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://paragba.substack.com/i/165332959?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.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_!umcv!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 424w, https://substackcdn.com/image/fetch/$s_!umcv!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 848w, https://substackcdn.com/image/fetch/$s_!umcv!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.png 1272w, https://substackcdn.com/image/fetch/$s_!umcv!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F87a02447-45b1-465f-a6ae-d1a8c6de9231_1024x1536.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 aria-hidden="true" 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><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><h4>Hidden Inputs and Outputs:</h4><pre><code>Functions manipulating global variables have "hidden inputs" and "hidden outputs." </code></pre><p>A function's interface may imply that it has no arguments or no return value, but it might be reading from or writing to a global variable, effectively changing its behavior or system state. This renders function contracts transparent.</p><h4>Inability to Trace Data Origin:</h4><p>When a bug is created due to a global variable containing an improper value, it is extremely hard to trace back the source of that corruption. Without explicit parameters, there is no direct "chain of custody" for the data. Where does this value originate? Which one of the numerous functions capable of writing to this global actually set it improperly?</p><h4>Massive Side Effects:</h4><p>All functions that change a global variable produce a side effect on the overall system state. This violates modularity and prevents reasoning about the behavior of a function in a vacuum, since its effect permeates far beyond its immediate return value or output parameters.</p><h4>No Single "Owner" of Data:</h4><p>Without encapsulation, global data does not have a single responsible owner. Anywhere in the code can change it, causing a diffusion of responsibility and turning debugging or updating data structures into a minefield. </p><h3>The Dangers of the Impact on Control Flow</h3><p>Control flow governs the sequence in which instructions are followed and decisions are taken within the software. Global variables add perilous unpredictability to control flow:</p><h4>Hidden State-Dependent Decisions:</h4><p>Decision points (e.g., `if` statements, `switch` cases) usually rely on the value of variables. If such variables are globals, their values might be changed by any other section of the system at any time. This implies the actual run-time path (control flow) might get changed in an unpredictable manner depending upon the hidden state of global variables, and it is very hard to test all the possible execution paths.</p><h4>Execution Path Non-Determinism:</h4><p>As soon as more than one task or ISR have the ability to alter global variables, the exact timing of these alterations matters. The <code>sequence </code>in which these simultaneous operations occur may decide which branch of an `if` statement is executed or which `case` in a `switch` is entered. This results in non-deterministic control flow, where identical inputs will produce different outputs as a function of infinitesimal timing differences &#8211; the signature of an untestable and unsafe system.</p><h4>Complex Cyclomatic Complexity:</h4><p>Although not technically raising the raw number of decision points, implicit dependencies created through globals raise the <code>effective </code>complexity of comprehending and checking control paths significantly. Any function that accesses a global inherently relies on any function that modifies it, thus building an intertwined web of possible execution paths.</p><h3>The Exorbitant Cost of Diagnostics</h3><p>When a system fails as a result of an incorrect state of a global variable, the debugging process is a nightmare. </p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/global-variables-fusa-critical-impact?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://embedded.institute/p/global-variables-fusa-critical-impact?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://embedded.institute/p/global-variables-fusa-critical-impact?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p></p><h4>We Can't Trace Backwards:</h4><p>Compared to local variables propagated via a call stack, there isn't a traceable chain of custody for a global variable value. You cannot simply look at the call stack and determine from where an incorrect value is coming.</p><h4>Debugging Hell:</h4><p>Pinpointing the exact line of code that corrupted a global variable often requires setting breakpoints everywhere it's accessed, meticulous logging, or advanced (and costly) hardware debugging tools. This process is incredibly time-consuming, expensive, and often delays critical project milestones.</p><h4>Certification Obstacles:</h4><p>Traceability and debuggability are most important for ISO 26262. Diagnosing systems that are difficult to diagnose extend the verification and validation phases, making development more expensive and potentially holding up certification.</p><h3>Bug Leakage and Propagation</h3><p>A small bug that corrupts a global variable in one location of the software can "leak" or propagate its faulty state throughout the whole system.</p><h4>Far-Reaching Consequences:</h4><p>A malfunctioning sensor processing function that writes to a global <code>vehicle_speed</code> variable in an erroneous way could, for example, cause mistaken braking decisions, inappropriate cruise control operation, and misleading dashboard display &#8211; all apparently disparate functionalities affected by one tainted global.</p><h4>Hard to Localize Repairs:</h4><p>If the bug appears in a remote location of the code from where the global was damaged, it is a "whack-a-mole" to fix it. A repair in one place may unexpectedly create problems somewhere else because the interaction between the global and the rest of the system wasn't well understood.</p><pre><code>This renders it difficult to obtain <code>"freedom from interference,</code>" one of the most important ISO 26262 guidelines.</code></pre><h3>Beyond the Basics: Functional Safety Compliance</h3><p>The utilization of global variables is in direct contradiction to some of the basic principles of ISO 26262:</p><h4>Modularity &amp; Independence:</h4><p>Strong isolation of safety functions is usually needed. Global variables disturb this isolation by introducing implicit coupling among modules, which is difficult to prove their independence.</p><h4>Interference Freedom:</h4><p>It becomes extremely difficult to prove that the execution or use of data of one software component does not negatively impact another when globals are present, particularly in relation to shared global state.</p><h4>Verification &amp; Validation:</h4><p>It is very challenging to unit test functions that depend on globals, with convoluted test arrangements or heavy mocking often necessary to mimic the external state. Integration testing becomes more cumbersome and less efficient at identifying root causes since the interactions are opaque.</p><h4>Traceability:</h4><p>Tracing back requirements to design elements and subsequently to code, particularly data flow and control flow, becomes unclear and excessively complicated with extensive global variable usage.</p><h3>How Tools Can Assist (But Not Fix)</h3><p>Although removing global variables is the optimum objective, tools can provide some detection and mitigation:</p><p><strong>Static Analysis</strong>: <em>These tools examine source code without running it.</em></p><p><strong>Uninitialized Global Detection</strong>: <em>Detect global variables that are declared but not initialized prior to their usage.</em></p><p><strong>Reports for Global Variable Usage</strong>: <em>Plot where each global variable is read and/or written. This is a visual indicator for following implicit data flow.</em></p><h4>Enforcement of Coding Standard (e.g., MISRA C):</h4><p>MISRA C, popular in the automotive sector, has certain rules (e.g., Rule 8.7, 9.3, 13.5, 17.8) that limit or discourage some applications of global variables, particularly those that are not declared `static` at file scope, and those read by ISRs or multiple tasks. Static analysis tools can automatically report violations, imposing improved data encapsulation.</p><h4>Possible Race Condition Detection:</h4><p>Static analyzers with advanced capabilities can analyze control flow and data flow to identify possible race conditions on global variables, even if absence cannot be proven.</p><pre><code><code>Tools : Polyspace, PC-Lint, SonarQube, Helix QAC.</code></code></pre><p><strong>Dynamic Analysis</strong>: <em>Such tools observe software behavior at runtime.</em></p><p><strong>Runtime Error Detection</strong>: <em>Allows for detection of real race conditions, memory corruption, and access to uninitialized global variables at testing time. This validates bugs found with static analysis or reveals new ones that only appear at runtime as a result of particular control flow paths.</em></p><p><strong>Code Coverage:</strong> <em>Ensures proper testing of all execution paths, including those that involve global variable changes, which is important for validating complex control flows.</em></p><p><strong>Memory Profiling</strong>: <em>Pinpoint memory usage patterns and potential leaks associated with global variables (even less frequent with static memory, but can reflect unforeseen persistent state).</em></p><pre><code>Methods: Special hardware debuggers with tracing, special runtime error detection support libraries, logic analyzers.</code></pre><h3>The Way Forward: Encapsulation and Clean Interfaces</h3><p>The way out of the global variable problem is to accept <code>encapsulation</code> and <code>clean interfaces</code>.</p><h4>Pass by Parameter:</h4><p>Pass data between functions explicitly as parameters. This makes data flow transparent, testable, and deterministic, making function contracts and control flow dependencies clear.</p><h4>File-Scoped Static Variables:</h4><p>For information actually unique to a single compilation unit, <code>static file-scope variables </code>(`static int my_var;` in a `.c` file) provide a safer replacement for global variables. They limit visibility, facilitating easier reasoning about their access and data flow localized to regions. But even these need to be carefully handled in order to avoid race conditions in multithreaded systems.</p><h4>Principles of Object Orientation:</h4><p>Even in C, using object-oriented thought (structs with corresponding functions) will encapsulate data and the functions that alter it, instead of making raw data available everywhere. This keeps related data and code together that acts upon it, resulting in clean data flow and more predictable code.</p><h4>Design Patterns:</h4><p>Use design patterns such as the "Singleton" pattern (judiciously and only when absolutely necessary, since they can reproduce global issues if used too extensively) or "Dependency Injection" to deal with shared resources in a controlled way, with explicit dependencies instead of implicit ones.</p><p>When it comes to automotive functional safety, taking shortcuts with global variables is a risky bet. Though they are superficially convenient, </p><pre><code>Global variable create systemic hazards that make maintenance worse, complicate data and control flow, cause system behavior to be unpredictable, drive diagnostic costs higher, and make conforming to rigid safety standards such as ISO 26262 far more difficult.</code></pre><p>Today's automotive software requires strong, predictable, and verifiable code. Through careful avoidance of global variables and embracing of principled design with well-defined interfaces and encapsulation, developers can create safer, more reliable, and ultimately more maintainable systems &#8211; so the cars of the future are not only smart, but flawlessly safe.</p><p></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share Parag Barangale&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share Parag Barangale</span></a></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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[MQTT trough Cloudflare tunnel]]></title><description><![CDATA[The easy way to setup MQTT via Cloudflare]]></description><link>https://embedded.institute/p/mqtt-trough-cloudflare-tunnel</link><guid isPermaLink="false">https://embedded.institute/p/mqtt-trough-cloudflare-tunnel</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Wed, 16 Apr 2025 07:55:56 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!uex9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Cloudflare tunnels have been great in providing access to internal services.</p><p>My setup is having Home assistant behind a NAT&#8217;ed IP. It means Cloudflare tunnel is essential to accessing my services. </p><p>Recently installed <a href="https://mosquitto.org/">Eclipse Mosquitto</a> broker through <a href="https://www.home-assistant.io/addons/">home assistant add-ons</a>.</p><h2>Initial Attempts</h2><p>HA add-on config allows four ports for access as shown below.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!uex9!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!uex9!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 424w, https://substackcdn.com/image/fetch/$s_!uex9!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 848w, https://substackcdn.com/image/fetch/$s_!uex9!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 1272w, https://substackcdn.com/image/fetch/$s_!uex9!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!uex9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png" width="539" height="568" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2bc38c1d-e535-4acd-8efe-21e50596b861_539x568.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:568,&quot;width&quot;:539,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:20725,&quot;alt&quot;:&quot;MQTT Broker Ports&quot;,&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://paragba.substack.com/i/161442244?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2bc38c1d-e535-4acd-8efe-21e50596b861_539x568.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="MQTT Broker Ports" title="MQTT Broker Ports" srcset="https://substackcdn.com/image/fetch/$s_!uex9!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 424w, https://substackcdn.com/image/fetch/$s_!uex9!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 848w, https://substackcdn.com/image/fetch/$s_!uex9!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.png 1272w, https://substackcdn.com/image/fetch/$s_!uex9!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F945054b6-dde6-4af4-8cf1-1158c1b79d5b_539x568.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 aria-hidden="true" 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><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">MQTT Broker Ports</figcaption></figure></div><p>In my first attempt, I forwarded the port 2892 for normal MQTT, and tried to access it. That does not work, checked the add-on documentation. It required to -</p><div class="pullquote"><p><strong>[1] Create local home assistant user - in order to log in to mqtt. This add-on does not allow access by default.</strong></p></div><p></p><p>Created account, still not able to access. What could be wrong. One thought was since this is diff that regular port forwarding there might be something additional required or Cloudflare may not support it.</p><h2>What is the issue</h2><p>Cloudflare tunnel can fwd the request on the port, but MQTT needs port open when accessing </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!5c3y!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!5c3y!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 424w, https://substackcdn.com/image/fetch/$s_!5c3y!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 848w, https://substackcdn.com/image/fetch/$s_!5c3y!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 1272w, https://substackcdn.com/image/fetch/$s_!5c3y!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!5c3y!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png" width="768" height="373.51861042183623" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e57dfcfe-d3c1-4410-aef8-2c2b04d4bca6_806x392.png&quot;,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:392,&quot;width&quot;:806,&quot;resizeWidth&quot;:768,&quot;bytes&quot;:18229,&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://paragba.substack.com/i/161442244?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe57dfcfe-d3c1-4410-aef8-2c2b04d4bca6_806x392.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="" srcset="https://substackcdn.com/image/fetch/$s_!5c3y!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 424w, https://substackcdn.com/image/fetch/$s_!5c3y!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 848w, https://substackcdn.com/image/fetch/$s_!5c3y!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.png 1272w, https://substackcdn.com/image/fetch/$s_!5c3y!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2c86207a-9448-4ad8-a52a-a41df10e8684_806x392.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 aria-hidden="true" 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><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">MQTT Test Tool-Client Setting</figcaption></figure></div><p>See the setting window from <a href="https://testclient-cloud.mqtt.cool/">MQTT test tool</a>. It wants to know the protocol, host and port. From Cloudflare tunnel we hide the Port and only the host and protocol is known. </p><div class="pullquote"><p><strong>[2] While Cloudflare Tunnels can expose internal services to the internet, they are primarily designed for HTTP(S) and Web Socket traffic.</strong></p></div><p>Attempts to tunnel raw TCP MQTT traffic (e.g., <code>tcp://192.168.1.150:1883</code>) often fail, as Cloudflare's infrastructure does not natively support generic TCP proxying for MQTT</p><p><em>There is one alternate, which you can be aware of is - Cloudflare's own Pub/Sub service supports MQTT v5.0</em></p><h2>What could be the solution</h2><p>We have now established two facts, 1. create account and 2. TCP is not supported. If you look at ports used by broker. You could see it supports MQTT over web sockets. This is great as web socket will be the protocol that is supported by Cloudflare as well.</p><p>The way to do is;</p><p>Setup Cloudflare tunnel to fwd HTTP to web socket port of broker</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_!IO8D!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!IO8D!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 424w, https://substackcdn.com/image/fetch/$s_!IO8D!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 848w, https://substackcdn.com/image/fetch/$s_!IO8D!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 1272w, https://substackcdn.com/image/fetch/$s_!IO8D!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!IO8D!,w_2400,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png" width="1026" height="357.26785714285717" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/77bbad96-cf74-4b5f-bcef-6c5e4e5e12b1_1477x514.png&quot;,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;large&quot;,&quot;height&quot;:507,&quot;width&quot;:1456,&quot;resizeWidth&quot;:1026,&quot;bytes&quot;:43092,&quot;alt&quot;:&quot;Cloudflare MQTT Tunnel Setup&quot;,&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://paragba.substack.com/i/161442244?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F77bbad96-cf74-4b5f-bcef-6c5e4e5e12b1_1477x514.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:&quot;center&quot;,&quot;offset&quot;:false}" class="sizing-large" alt="Cloudflare MQTT Tunnel Setup" title="Cloudflare MQTT Tunnel Setup" srcset="https://substackcdn.com/image/fetch/$s_!IO8D!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 424w, https://substackcdn.com/image/fetch/$s_!IO8D!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 848w, https://substackcdn.com/image/fetch/$s_!IO8D!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.png 1272w, https://substackcdn.com/image/fetch/$s_!IO8D!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F452b61bf-b999-46ab-9e09-f778ecef822d_1477x514.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 aria-hidden="true" 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><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">Cloudflare MQTT Tunnel Setup</figcaption></figure></div><p>Listed 4 steps;</p><ol><li><p>Setup URL to point to</p></li><li><p>Select HTTP Type</p></li><li><p>IP address of MQTT broker - this is my localhost machine where CF tunnel is installed.</p></li><li><p>Port address of Web socket (MQTT over Web socket )</p><p></p></li></ol><p>MQTT broker setup to use <em><strong>Web socket - SSL</strong></em><strong>.</strong> (Cloudflare provides it by default)</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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><h2>MQTT Desktop Client</h2><p>In order to test the MQTT Broker and Client communication, use a local app for testing. Most browser now do not allow to use websockets connections. Shown below are the settings for <a href="https://mqtt-explorer.com/">MQTT explorer</a> client settings. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f5Y1!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f5Y1!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 424w, https://substackcdn.com/image/fetch/$s_!f5Y1!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 848w, https://substackcdn.com/image/fetch/$s_!f5Y1!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 1272w, https://substackcdn.com/image/fetch/$s_!f5Y1!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f5Y1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png" width="1012" height="711" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:711,&quot;width&quot;:1012,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:43775,&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://paragba.substack.com/i/161442244?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.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_!f5Y1!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 424w, https://substackcdn.com/image/fetch/$s_!f5Y1!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 848w, https://substackcdn.com/image/fetch/$s_!f5Y1!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.png 1272w, https://substackcdn.com/image/fetch/$s_!f5Y1!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F06ebf265-669f-4545-9207-6b683f9119ad_1012x711.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 aria-hidden="true" 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><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">MQTT Explorer Settings</figcaption></figure></div><p>Protocol is WS, host address as defined in Cloudflare tunnel, port is empty. Username and password as defined in home assistant.</p><div class="pullquote"><p><strong>Voil&#224; this works!!</strong></p></div><h2>MQTT Android Client</h2><p>Great till now, but we need mobile to work. I tried some apps here. One problem I encountered, port number is absolutely mandating. Which portcan support this ?</p><p>There is a solution, use the SSL port and Web socket with SSL as shown below. Setting for app <a href="https://play.google.com/store/apps/details?id=snr.lab.iotmqttpanel.prod&amp;pcampaignid=web_share">IoT MQTT Panel</a>. Port 443 is the standard port for HTTPS, the secure version of HTTP.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!DD28!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!DD28!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 424w, https://substackcdn.com/image/fetch/$s_!DD28!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 848w, https://substackcdn.com/image/fetch/$s_!DD28!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 1272w, https://substackcdn.com/image/fetch/$s_!DD28!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!DD28!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png" width="467" height="664.7978910369069" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png&quot;,&quot;srcNoWatermark&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/64049b4c-6ad3-45ec-8718-9eaef48b8f89_569x810.png&quot;,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:810,&quot;width&quot;:569,&quot;resizeWidth&quot;:467,&quot;bytes&quot;:135289,&quot;alt&quot;:&quot;Android MQTT Client Setting&quot;,&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://paragba.substack.com/i/161442244?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F64049b4c-6ad3-45ec-8718-9eaef48b8f89_569x810.png&quot;,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Android MQTT Client Setting" title="Android MQTT Client Setting" srcset="https://substackcdn.com/image/fetch/$s_!DD28!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 424w, https://substackcdn.com/image/fetch/$s_!DD28!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 848w, https://substackcdn.com/image/fetch/$s_!DD28!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.png 1272w, https://substackcdn.com/image/fetch/$s_!DD28!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F8b23ac04-8efe-4555-b77e-7c24a4483df7_569x810.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 aria-hidden="true" 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><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">Android MQTT Client Setting</figcaption></figure></div><div class="pullquote"><p><strong>This shall help you to connect to your MQTT broker via Cloudflare tunnel.</strong></p></div><p></p>]]></content:encoded></item><item><title><![CDATA[FuSa Autosar E2E: What's your recovery strategy ?]]></title><description><![CDATA[Every time you introduce a new mechanism, you shall define a strategy for exiting the condition gracefully.]]></description><link>https://embedded.institute/p/autosar-e2e-whats-your-recovery-strategy</link><guid isPermaLink="false">https://embedded.institute/p/autosar-e2e-whats-your-recovery-strategy</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Sun, 16 Feb 2025 15:58:50 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&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-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&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-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="6000" height="4000" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:4000,&quot;width&quot;:6000,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;black and orange electronic device on white paper&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="black and orange electronic device on white paper" title="black and orange electronic device on white paper" srcset="https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1600080726065-cc806a0ef302?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxvYmR8ZW58MHx8fHwxNzM5NDMxODkwfDA&amp;ixlib=rb-4.0.3&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 aria-hidden="true" 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><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">Kumpan Electric</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Autosar <a href="https://www.autosar.org/fileadmin/standards/R20-11/FO/AUTOSAR_PRS_E2EProtocol.pdf">E2E Protocol Specification</a> defines mechanisms to detect faults  related to communication, covering lower communication layers and hardware. This help to standardize safety mechanism for faults.</p><p>The specification provides multiple profiles that could be used. Profiles would be based on your system (e.g. based on Safety Concept). Between profiles Counter, DataId and CRC checksum are common.  Some profiles have added or timeout detections. One subtle difference is, although the fields are the same, the field size varies.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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 Parag Barangale! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><h2>Field Size Impact</h2><p>To understand the impact of field size, let understand what CRC is. Cyclic Redundancy Check (CRC) is an error-detecting code used to detect accidental changes to raw data during transmission or storage.</p><div class="pullquote"><p>CRC in general improves error detection, but how does its size matters ?</p></div><p>To detect an error in a message, a CRC value is provided along with the message. The receiver shall calculate the CRC again and compare the CRC received. The critical factor is the value of CRC shall be always unique for all possible combinations of the message. If you consider the CRC is of 8bit and message is of 4 bytes long, you have very high probability that CRC no will not repeat for combinations. Extending this further, if 8-Bit CRC is used to calculate a message of 1000 bytes, you now have very high probability the CRC value will get repeated, low probability and low error detection. </p><p>You shall select sufficient length of CRC to ensure high detection capability, hence we choose the field size appropriately.</p><h2>Counters</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&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-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="3776" height="2764" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:2764,&quot;width&quot;:3776,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;analog watch at 1 00&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&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="analog watch at 1 00" title="analog watch at 1 00" srcset="https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1606166245039-ffeba59d83a4?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxjaGVja3xlbnwwfHx8fDE3MzkzOTMxNDh8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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">Sigmund</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>Counter field in profiles provide a ways to detect - Repetition, Ok and Error states. Once the counter is filled, its rollovers. Different profiles give you the option to select the size of counter. Example, in profile 1 the counter size is 0xF whereas profile 4m will roll over at 0xFFFF.</p><p>To understand how rollover effects, consider some CAN message fault scenarios.</p><ul><li><p>Signal lost - Once</p><ul><li><p>Sender and Receiver, both at counter 4</p></li><li><p>Receiver missed the one message due to some issue on the bus</p><p>Receiver is expecting msg with counter value as 5.</p></li><li><p>Till value 5, all messages would be categorized as Error for receiver.</p><p>Receiver will be in Ok state once rollover happens and next message with 5 value is received.</p></li><li><p>If we assume the cyclic message is with 10mSec. Resync will happen after 0xF*10msec.</p></li><li><p>For profile 4m this will be 0xFFFF * 10mSec.</p></li></ul></li></ul><p>The above example considers only 1 scenario of CAN fault and a functional requirement to wait till valid counter value is received.</p><p>Expand this further to consider all the CAN fault scenarios: No first message, random drops, multiple disconnects, total disconnect.</p><h2>Summary</h2><p>E2E provides a way to detect fault, further analysis in your system is required to ensure the system can always recover on its own when the condition is cleared. To build a robust system you will need to map all the communication bus faults with recovery strategies like, resync with each message, resync up to certain count (also defined in some profiles) and further&#8230;</p><div class="pullquote"><p>It is very easy to put conditions to enter fault state, getting out is harder. This is often closely associated with race conditions, which are hard to debug.</p></div><p>In case of functional safety, you need to additionally consider from FTTI perspective. E.g. if recovery is happening at rollover, does it comply with FTTI timing. If not change recovery strategy or enter directly into safe state (system very sensitive) or exit after stabilization/debounce period.</p><p></p><blockquote><p><strong>TLDR</strong>;</p><p>Choose E2E profile based on data/error detection requirement.</p><p>Analyze all the faults, and define exit criteria</p><p>In transition, consider the impact on modules when faults are detection. What should be their state and/or reaction.</p></blockquote><p></p><p></p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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 Parag Barangale! 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[Watchdog Timers: Why Doing It Right Matter More Than You Think!]]></title><description><![CDATA[Why Calculating the Watchdog Period is Challenging]]></description><link>https://embedded.institute/p/watchdog-timers-why-doing-it-right</link><guid isPermaLink="false">https://embedded.institute/p/watchdog-timers-why-doing-it-right</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Wed, 09 Oct 2024 02:29:41 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&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-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&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-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="4592" height="3251" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3251,&quot;width&quot;:4592,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;green and black computer motherboard&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="green and black computer motherboard" title="green and black computer motherboard" srcset="https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1610878785620-3ab2d3a2ae7b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw3fHxtaWNyb2NvbnRyb2xsZXJ8ZW58MHx8fHwxNzI4NDQwMDgzfDA&amp;ixlib=rb-4.0.3&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 aria-hidden="true" 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><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">Vishnu Mohanan</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>In the world of embedded systems, reliability is paramount. One of the critical tools engineers use to ensure system stability is the <em>watchdog timer</em> (WDT). While setting up a watchdog timer may seem straightforward, calculating the correct watchdog period is far more complex than it appears. This blog will cover why the watchdog is required, the difficulties in calculating the right period, how testing impacts the timer, key considerations, and what to do when the watchdog triggers&#8212;both in development and manufacturing stages.</p><h3>1. Why Is a Watchdog Timer Required?</h3><p>The watchdog timer serves as a safeguard against system failures or software malfunctions. In an embedded system, there are instances where software may crash, enter infinite loops, or encounter deadlocks. Without a mechanism to recover, such failures could make the system unresponsive, leading to costly consequences, especially in safety-critical applications like automotive, medical devices, and industrial automation.</p><p>The watchdog timer ensures that if the system stops responding, it will automatically reset itself to avoid further issues. It essentially functions as a reset button, constantly monitoring the health of the system and expecting a regular "kick" (a signal that the system is still functioning). If the kick doesn&#8217;t happen within a set period, the watchdog assumes the system has malfunctioned and triggers a reset.</p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/subscribe?"><span>Subscribe now</span></a></p><h3>2. Why Is It Difficult to Calculate the Watchdog Period?</h3><p>Calculating the correct watchdog period is a balancing act that comes with challenges. If the period is too short, you risk premature resets (false positives) when the system may simply be running a longer task. On the other hand, setting it too long may delay detection of an actual system failure, reducing its effectiveness. The difficulty lies in accounting for real-world factors that affect system timing:</p><ul><li><p><strong>Task Execution Variability</strong>: In systems with multiple processes, some tasks may take longer to execute than others. You need to ensure that the watchdog period accommodates the longest task without triggering a false reset.</p></li><li><p><strong>Interruptions</strong>: Interrupts or higher-priority tasks can delay execution of the watchdog-resetting function. Ensuring the timer is long enough to account for such delays can be tricky.</p></li><li><p><strong>Dynamic System Behavior</strong>: In systems where the workload can vary significantly, predicting how much time is needed to reset the watchdog can be challenging.</p></li></ul><h3>3. Why Does Testing Impact the Calculated Value?</h3><p>Testing plays a crucial role in refining the watchdog period, as it helps to identify the system's worst-case execution scenarios. During development, engineers may estimate how long tasks will take based on theoretical or average values. However, under real-world conditions, testing may reveal unexpected delays, bottlenecks, or unaccounted-for system behaviors that alter the expected task durations.</p><ul><li><p><strong>Stress Testing</strong>: When a system is under heavy load, tasks may take longer to execute due to resource contention. This can impact how frequently the watchdog can be kicked.</p></li><li><p><strong>Real-Time Performance</strong>: Some tasks might execute slower in a deployed environment compared to a controlled development environment due to hardware limitations or environmental factors like power fluctuations. Testing across different conditions is essential to adjust the watchdog period accordingly.</p></li></ul><div class="pullquote"><p>Ensure WDG period is not immediately increased when it&#8217;s triggered in testing. Like it or not, this is a very common practices. This kills the purpose of implementing WDG.</p><p>WDG period shall not be changed without through analysis.</p></div><h3>4. What Should Be Considered in Watchdog Calculation?</h3><p>Several factors need to be considered when calculating the watchdog period to ensure it is set correctly:</p><ul><li><p><strong>Task Cycle Times</strong>: Understand the execution time of each critical task, particularly the longest task. The watchdog should not reset the system prematurely if a valid task is still running.</p></li><li><p><strong>System Latency</strong>: Consider delays from interrupts and task scheduling, especially in real-time operating systems (RTOS). These can vary based on priority levels and timing jitter.</p></li><li><p><strong>Safety Margin</strong>: Always include a buffer or safety margin on top of your worst-case execution time to account for unexpected delays.</p></li><li><p><strong>Clock Frequency</strong>: Take into account the clock frequency of the watchdog timer itself and how it interacts with your system's clock, as this will affect your calculation for timeout periods.</p></li><li><p><strong>Power Consumption</strong>: In low-power or battery-operated systems, the watchdog timer might operate slower, so these factors should be reflected in your calculation.</p><div class="pullquote"><p>WDG period is calculated theoretically based on your task executions. Setting this value validates both your design and real-time performance.</p><p>If they do not work, evaluate where is system is deviating. Again, do not just change the WDG period</p></div></li></ul><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/watchdog-timers-why-doing-it-right?utm_source=substack&utm_medium=email&utm_content=share&action=share&quot;,&quot;text&quot;:&quot;Share&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/p/watchdog-timers-why-doing-it-right?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p><h3>5. What to Do When the Watchdog Triggers in the Development Cycle?</h3><p>When the watchdog timer triggers during the development phase, it is important to treat it as a signal that something in the system isn&#8217;t behaving as expected. Here's what you should do:</p><ul><li><p><strong>Identify the Cause</strong>: Use debugging tools to figure out why the watchdog wasn&#8217;t kicked in time. Did a task run longer than expected? Was there an unhandled exception or deadlock? Trace back the issue to see where the code or system behavior broke down.</p></li><li><p><strong>Optimize Task Execution</strong>: If certain tasks are causing delays, consider optimizing the code or breaking up tasks into smaller, quicker cycles to ensure the watchdog is regularly kicked.</p></li><li><p><strong>Implement Graceful Recovery</strong>: If the watchdog reset occurs, ensure the system can recover smoothly without data loss or critical failure. Logging the watchdog reset event can be useful for postmortem analysis.</p></li><li><p><strong>Adjust the Watchdog Period</strong>: If the task cycles are indeed running longer than initially calculated, consider extending the watchdog period. Be careful, though&#8212;this should be done only after verifying that the delay is legitimate and not due to a deeper issue in the code or system design.</p></li></ul><div class="pullquote"><p>Recovery from a watchdog timer (WDG) reset is highly dependent on the product type. For consumer-grade products, frequent resets can erode customer trust in the device and damage the brand&#8217;s reputation.</p><p>It's crucial to carefully plan how to handle resets gracefully to minimize user impact and maintain confidence in the product.</p></div><h3>6. What to Do in Manufacturing?</h3><p>Once your product is ready for manufacturing, the behavior of the watchdog timer can be more challenging to control since the system will be deployed in real-world conditions. Here&#8217;s what to consider:</p><ul><li><p><strong>Field Testing</strong>: Before mass production, field-test your system under various conditions (temperature, power supply, interference, etc.) to validate the watchdog period.</p></li><li><p><strong>Default Watchdog Settings</strong>: Set conservative default values for the watchdog timer in production. Ensure these values have been tested to work reliably under normal operating conditions.</p></li><li><p><strong>Bootloader -  Application code: </strong>If you intend to use bootloader, ensure when an application is switched, the watchdog is reinitialized or setting are verified. As when large amount of code flashing is done, clearing watchdog is not practical and usually watchdog is disabled or keep at max period.</p></li><li><p><strong>In-Field Debugging</strong>: Implement logging mechanisms that can store information before a watchdog reset happens. This will allow you to retrieve useful data when troubleshooting in the field.</p></li><li><p><strong>OTA Updates (Over-the-Air)</strong>: If possible, implement OTA update mechanisms so that watchdog parameters can be adjusted remotely if issues arise post-deployment.</p></li><li><p><strong>Graceful Handling of Resets</strong>: Ensure that when the watchdog triggers a reset in the field, the system can restart without major disruptions, data loss, or user impact. Smooth system recovery is essential for maintaining customer satisfaction.</p></li></ul><h3>Conclusion</h3><p>The watchdog timer is a critical safety component in any embedded system, but getting the timing right is no easy task. A poorly calculated watchdog period can either render the system unresponsive to failures or cause unnecessary resets that disrupt normal operations. Understanding your system&#8217;s behavior, testing under real-world conditions, and considering factors like task cycle time, interrupts, and safety margins are key to calculating an optimal watchdog period. Both during the development and manufacturing phases, keeping a vigilant eye on how the watchdog performs will ensure the long-term reliability of your system.</p><p></p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/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><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/watchdog-timers-why-doing-it-right/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/p/watchdog-timers-why-doing-it-right/comments"><span>Leave a comment</span></a></p><p></p><p></p><p></p><p></p>]]></content:encoded></item><item><title><![CDATA[Want Higher Profits? Discover the Process Compliance Strategy]]></title><description><![CDATA[Discover why process compliance isn&#8217;t just a necessity&#8212;it&#8217;s your next big profit driver.]]></description><link>https://embedded.institute/p/want-higher-profits-discover-the</link><guid isPermaLink="false">https://embedded.institute/p/want-higher-profits-discover-the</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Thu, 15 Aug 2024 02:55:11 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Every industry, every process, every product, development has some standard defined. You would rarely see something that is not backed by a standard.</p><p><em>We usually see adding compliance to increase the cost, that&#8217;s a fact. Equally, there is also a gain to be specific - financial gain in compliance. This article aims to show the benefits of compliance.</em></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&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-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="720" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;stack of papers flat lay photography&quot;,&quot;title&quot;:&quot;stack of papers flat lay photography&quot;,&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="stack of papers flat lay photography" title="stack of papers flat lay photography" srcset="https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1554224155-1696413565d3?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwzfHxhdWRpdHxlbnwwfHx8fDE3MTEwMDI4NDF8MA&amp;ixlib=rb-4.0.3&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 aria-hidden="true" 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><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="https://unsplash.com/@kellysikkema">Kelly Sikkema</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>In some cases, non-compliance is mandatory, such as regulations. In this case it&#8217;s not optional, we will skip these mandatory cases. We will be focussing on compliance to internal process defined by an organisation.</p><p>Before delving into the economic analysis, it's imperative to establish a clear understanding of what compliance and non-compliance entail. <em>Compliance </em>encompasses a broad spectrum of activities aimed at ensuring that businesses operate within the bounds of frameworks. <em>Non-compliance</em>, on the other hand, refers to the failure to adhere to these requirements. This failure can result from oversight, negligence, intentional misconduct, or a lack of awareness of existing process.</p><p>Let&#8217;s take a case where we are trying to develop a hardware development of a product. Consider only one task - develop the PCB.</p><h3>Example - PCB Layout</h3><p>In order to fulfil this task, the designer shall bare minimum consider;</p><ul><li><p>Customer/product requirements. </p></li><li><p>Physical constraints. </p></li><li><p>Product environmental considerations</p></li><li><p>Lessons learnt (previous products)</p></li><li><p>Field data monitoring</p></li><li><p>Regulatory requirements</p></li></ul><p>We have to assume for each product development this shall be done. Else we fail at some sub-task, eventually the product fails. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&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-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="720" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;brown wooden stand with black background&quot;,&quot;title&quot;:&quot;brown wooden stand with black background&quot;,&quot;type&quot;:&quot;image/jpg&quot;,&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="brown wooden stand with black background" title="brown wooden stand with black background" srcset="https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1589216532372-1c2a367900d9?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxfHxjb21wZW5zYXRpb258ZW58MHx8fHwxNzExMDAzNTkwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@tingeyinjurylawfirm">Tingey Injury Law Firm</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p><em>The product must comply to requirements, environment and regulations. If not, we have a liability of failed product and the financial consequences coming out of it.</em></p><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe now&quot;,&quot;action&quot;:null,&quot;class&quot;:&quot;button-wrapper&quot;}" data-component-name="ButtonCreateButton"><a class="button primary button-wrapper" href="https://embedded.institute/subscribe?"><span>Subscribe now</span></a></p><h2>Where is compliance</h2><p>Compliance comes when you define a process to each of this task. This is to ensure when the product gets developed, all aspects will get covered. We will take a couple of examples to understand how it all expands and interacts.</p><h4>I. Product environmental considerations</h4><p>The process shall define what the development and test inputs to be considered. E.g. while developing an automotive product - </p><ol><li><p>Automotive temp range shall be considered. </p></li><li><p>The components all shall qualify for Automotive grade. </p></li><li><p>Apply the compliance as per market. For EU -UN ECE R10, for US its CISPR.</p></li></ol><h4>II. Field Data Monitoring</h4><p> This is one of the most crucial aspects. If you are not in control, this single thing can turn your organisation into loss making. For each new product development, a bath tub curve is usually referred. New launches start with high failures defined as <em>Infant Mortality </em>and after some time failures are reduced and remain static. And finally <em>Wear out failures </em>occur<em>.</em></p><p><a href="https://en.wikipedia.org/wiki/Bathtub_curve">Wiki - Bathtub curve</a></p><p>As an organisation, you need to monitor the field returns. Quantify what caused the failure - was it the component failure, manufacturing process, supplier quality, design issue. The process shall define the steps to recover from these failures. The bathtub curve shows how it should be, but if you do not take action on your field returns, then you would remain in high failures always. This wall cost so much as part of warranty and other issues. Industry practice is to deploy 8D process for this.</p><p><a href="https://en.wikipedia.org/wiki/Eight_disciplines_problem_solving">Wiki - Eight disciplines problem solving</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&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-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="1352" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1352,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;3 x 3 rubiks cube&quot;,&quot;title&quot;:&quot;3 x 3 rubiks cube&quot;,&quot;type&quot;:&quot;image/jpg&quot;,&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="3 x 3 rubiks cube" title="3 x 3 rubiks cube" srcset="https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1587093336587-eeca6cb17cf2?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyfHxwcm9ibGVtJTIwc29sdmluZ3xlbnwwfHx8fDE3MTEwMDQ4MzV8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@karlahrnndz">Karla Hernandez</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><h2>Process Compliance</h2><p>A checklist is the easiest way to ensure compliance. Develop a checklist for PCB designer. The checklist will ensure if he has captured all the requirements. E.g. If regulatory requirements are not available, then you could reach to the customer and define those. Or if the temp range is defined but does not match automotive range, that&#8217;s another red flag. </p><p>Similarly, on the field data monitoring, a dedicated person can capture field data and generate the PPM for the organisation. He could also drive the issue through 8D so that it never gets repeated.</p><p><em>Compliance ensures the same issue will not get repeated ever.</em></p><p>When the issue does not repeat, the efficiency is improved and so are the profit margins. In current world scenario, the margins are under heavy pressure. It&#8217;s not an utmost priority to ensure the process is defined properly and runs smoothly.</p><p>Compliance fosters a culture of accountability, transparency, and integrity within organisations, which enhances trust among stakeholders and contributes to long-term business resilience. Moreover, compliance is increasingly recognized as a strategic differentiator in today's competitive landscape.</p><p>Organisations that prioritize compliance demonstrate their commitment to ethical business practices, sustainability, and corporate social responsibility, thereby attracting customers, investors, and top talent.</p><h2>Embracing Compliance as an Investment</h2><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&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-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="1080" height="720" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:720,&quot;width&quot;:1080,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;person holding tool during daytime&quot;,&quot;title&quot;:&quot;person holding tool during daytime&quot;,&quot;type&quot;:&quot;image/jpg&quot;,&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="person holding tool during daytime" title="person holding tool during daytime" srcset="https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1504917595217-d4dc5ebe6122?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNXx8ZmFjdG9yeXxlbnwwfHx8fDE3MTEwMDU0NDN8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@christopher__burns">Christopher Burns</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>In conclusion, the evidence overwhelmingly supports the notion that compliance is not only cheaper but also essential for sustainable business success. While compliance entails upfront investments, the costs of non-compliance far outweigh these expenses, both in financial and reputational terms.</p><p>By investing in compliance, organisations not only mitigate risks but also unlock opportunities for growth, innovation, and competitive advantage. Compliance is not merely a regulatory obligation; it is an investment in the integrity, resilience, and longevity of businesses in an ever-evolving regulatory landscape.</p><p>Therefore, rather than viewing compliance as a burden, organisations should embrace it as a strategic imperative and a cornerstone of responsible business conduct. In doing so, they not only protect their bottom line but also uphold the trust and confidence of their stakeholders in an increasingly complex and interconnected world.</p><p>Thanks for reading SME&#8217;s Substack! Subscribe for free to receive new posts and support my work.</p>]]></content:encoded></item><item><title><![CDATA[The Estimation Trap: Why Your Project Timelines Are Always Off]]></title><description><![CDATA[See how small changes in your estimation process can lead to big improvements in project performance.]]></description><link>https://embedded.institute/p/software-estimations</link><guid isPermaLink="false">https://embedded.institute/p/software-estimations</guid><dc:creator><![CDATA[Institute Editorial]]></dc:creator><pubDate>Fri, 18 Aug 2023 12:33:21 GMT</pubDate><enclosure url="https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The most important activity for any project, which will help everyone from individual resource to organization, is consistently off the mark. Understand why that happens and how to do it practically.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&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-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="728" height="485.3333333333333" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:4000,&quot;width&quot;:6000,&quot;resizeWidth&quot;:728,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;people sitting down near table with assorted laptop computers&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="people sitting down near table with assorted laptop computers" title="people sitting down near table with assorted laptop computers" srcset="https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1519389950473-47ba0277781c?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxMXx8c29mdHdhcmV8ZW58MHx8fHwxNjkyMzUzMTYzfDA&amp;ixlib=rb-4.0.3&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 aria-hidden="true" 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><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="https://unsplash.com/@marvelous">Marvin Meyer</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><h2>Why Estimate?</h2><p>Estimation is required to do anything, it is the basis of gathering all the required resources.  The task estimations will help you to plan the project. </p><div class="pullquote"><p>Good or bad, a plan is a must.</p><p>And so are the estimations - accurate, inaccurate or guesstimate. </p></div><p>In one case where you plan without estimate, it uses something called guesstimate. It means guess the estimate. </p><h2>Contributing Factors</h2><p>Estimation dictionary meaning is &#8216;opinion or judgement&#8217;. The nature of the activity is your opinion. Getting estimation right is always tricky and challenging due to so many variables.</p><p>E.g. We consider a resource with the same exp to have the same productivity, but these are two different persons -<em> the productivity will be always different</em>. How will be estimation absorb that variation.</p><div class="pullquote"><p>Estimation has to have a base, even in the case of guesstimate.</p></div><p>The base for estimating needs to be built upon. Each step of your development has potential to derail the estimations. Be it the developers, availability of tools/stuff to customer input delays. Let&#8217;s take one example to understand estimation gone wrong. </p><p>Thing that contribute to the estimation are;</p><ul><li><p>Experienced estimator</p></li><li><p>Previous execution timeline (the actual delayed)</p></li><li><p>Usage of resources</p></li><li><p>Dependencies</p></li><li><p>Feedback delays</p></li><li><p>Reuse</p></li></ul><div><hr></div><h5>Experienced estimator</h5><p>If you have experience as project manager in the same organization and on a similar type of project. Then the estimations are likely to be more accurate since you know the pain that happened when you executed the project which estimated less than required efforts.</p><p>Similarly, for architects, leads, developers - the previous experience counts</p><div><hr></div><h5>Previous execution timeline (the actual delayed)</h5><p>An easier approach when we lack a team of experience resources. Take a sample of previously executed projects. It is very critical to look at lessons learned (good &amp; bad) section and change request.</p><p>Lessons learn show where the time could be saved for future projects.</p><p>CR Change request - Whenever CR are accepted, they kind of reset the project timeline. While sampling, you could look at the initial plan and the final plan, and you might wonder the project took twice the time, CR might have contributed to that.</p><p>So using CR  data you can normalize the inflated timeline and then process the  data for your estimation.</p><div><hr></div><h5>Usage of resources</h5><p>This is a bit complex due to the nature of resources involved. I will list a few here, this is very specific to your project.</p><ul><li><p>Skilled team</p></li><li><p>availability of target/hardware</p></li><li><p>Availability of test platform</p></li><li><p>customer acceptance testing</p></li><li><p>3rd party software/libraries</p></li></ul><p>Based on the availability of the resource, you would be able to complete the task. Hence, the estimation for the task will vary accordingly.</p><div><hr></div><h5>Feedbacks</h5><p>If you have milestone release, the feedback shall be received by a particular time to incorporate the changes. The more delay in feedback, the more last minute efforts required to squeeze the change. The customer shall be notified about feedback window, or it would be considered as Change Request.</p><div><hr></div><h5></h5><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&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-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="260" height="390" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:false,&quot;imageSize&quot;:&quot;normal&quot;,&quot;height&quot;:3648,&quot;width&quot;:2432,&quot;resizeWidth&quot;:260,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;person holding blue light bulb&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&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="person holding blue light bulb" title="person holding blue light bulb" srcset="https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1581090464777-f3220bbe1b8b?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw0NHx8cmV1c2UlMjBzb2Z0d2FyZXxlbnwwfHx8fDE2OTIzNTQ5MDZ8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@thisisengineering">ThisisEngineering RAEng</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><h5>Reuse</h5><p>Almost all organization love to reuse to save cost. This is always done at the quote phase of any project. And yet it remains the single most reason for wrong estimations.</p><div class="pullquote"><p>Reuse is the most critical factor that skews the estimations in reality.</p></div><p>One of my project was supposed to be based upon an earlier released product. Our project was a cluster from automotive domain. The target was to change the processor to the latest version and no change in application software. Technically, update the BSP (base support package - driver layer in embedded SW) and we are done.</p><p><em>Just for fun, submit this below poll based on your experience.</em></p><div class="poll-embed" data-attrs="{&quot;id&quot;:94806}" data-component-name="PollToDOM"></div><p>The application did not change as decided. Make a wild guess what could have happened. </p><p>The requirements team had to start from a clean slate (no reuse of requirements) and in order to define requirement the team did reverse engineering to the application based on the behavior. Suddenly, the same application did not remain the same at all. </p><p>You might say the application behavior was the same, how could this have an impact on requirements. It was the same largely, but the nitty-gritty turned the SW world upside down. Now we had to now update the &#8216;reuse&#8217; SW to match the new requirements.</p><p>E.g. A requirement - press a button for 10 seconds and then take action. Existing reused SW was taking action after 10 and button released. New requirement - take action after 10 seconds, ignore button release.</p><p>This appears minor, but to incorporate the change we had to add a new software path (increase MC/DC) and add guards for the next action mapped to the button. There were similar changes carried in hardware as well, eventually spread like wildfire.</p><div class="pullquote"><p>Disaster by all means, you might be wondering what happened to the estimations. Estimations went from 6 person months to 60+ person months. </p></div><p>There was a good amount of debate around it. The strategy to reverse engineer was always there, but the impact could not be foreseen and whoever did estimation could not have any clue the amount of havoc that will be followed. This resulted in project cost significantly overrun, project in red from day 1 and SW team escalations.</p><div class="pullquote"><p>Were the software developers at fault?</p><p>If you consider &#8216;Reuse&#8217;, ensure it&#8217;s from system level. If you reuse requirement only, then you could successfully save efforts/costs. Else, it&#8217;s just to reduce the cost at quote level. </p></div><p></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&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-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="5760" height="3840" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3840,&quot;width&quot;:5760,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;green and brown grass field&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&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="green and brown grass field" title="green and brown grass field" srcset="https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1521306961622-0e1e7fb21fcf?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwyNnx8YWNoaWV2ZXxlbnwwfHx8fDE2OTIzNTY4Mjl8MA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@kylejglenn">Kyle Glenn</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><h2>Best way to estimate</h2><p>Let&#8217;s explore what could be done, so we are able to estimate more realistically.  I am considering the most common scenarios below. Note that the list is not comprehensive, it is only meant as food for thought.</p><ol><li><p><strong>With Base</strong> - Similar programs are executed</p><ol><li><p>Base with changes</p><ol><li><p>Processor</p></li><li><p>hardware section</p></li><li><p>libraries</p></li><li><p>&#8230;</p></li></ol></li></ol></li><li><p><strong>Without Base</strong> - Complete new development</p></li></ol><div><hr></div><h4>With Base</h4><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&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-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="4866" height="3647" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3647,&quot;width&quot;:4866,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;green and brown train toy&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&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="green and brown train toy" title="green and brown train toy" srcset="https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1597424216910-9e56f8a09b8e?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHwxM3x8aGFyZHdhcmV8ZW58MHx8fHwxNjkyMzYwNTQwfDA&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@dancristianpaduret">Dan Cristian P&#259;dure&#539;</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>In this case, we have a timeline of previously executed project with similar requirements. </p><p>While considering base, ensure that whether it was a new product development (NPD) or reuse or anything in-between. As a starting reference, the maximum time would be the same as that of the base program. </p><p>Next step, check each sub topic and review the estimations. </p><p>E.g. The base program is NPD, one section is to calculate the software effort to create a library A. If this library is to be reused with little changes then you could consider the 10% efforts on integration. If this library is to be used with 25% changes, then the efforts will be directly linked to whether you got the same developer or not.</p><p>Extend this logic to all subsection on what is being changed.</p><div><hr></div><h4>Without Base</h4><p>No basis for any evaluation, what could be the estimate. </p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&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-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1456w" sizes="100vw"><img src="https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080" width="5168" height="3448" data-attrs="{&quot;src&quot;:&quot;https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:3448,&quot;width&quot;:5168,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;black and white electronic device&quot;,&quot;title&quot;:null,&quot;type&quot;:&quot;image/jpg&quot;,&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="black and white electronic device" title="black and white electronic device" srcset="https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 424w, https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 848w, https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 1272w, https://images.unsplash.com/photo-1579803168341-9691c1852995?crop=entropy&amp;cs=tinysrgb&amp;fit=max&amp;fm=jpg&amp;ixid=M3wzMDAzMzh8MHwxfHNlYXJjaHw1M3x8Y29tcG9uZW50fGVufDB8fHx8MTY5MjM2MDY1MXww&amp;ixlib=rb-4.0.3&amp;q=80&amp;w=1080 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 aria-hidden="true" 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><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="https://unsplash.com/@florianolv">Florian Olivo</a> on <a href="https://unsplash.com">Unsplash</a></figcaption></figure></div><p>In this case, consider the no of modules you plan to develop. List the modules, go through each of them, evaluate is it complete new development or could be reused from partially. This will be a long process, but the figure will be more realistic. If not realistic figure, it will help you to identify the weakness for development of a particular module(s). This will help to plan much better and assign the right resources from day one.</p><h2>Summary</h2><p>Estimation is hard, try to evaluate at deeper level. Remember, &#8216;<em>Devil is in the details&#8217;</em>. Do peer reviews with other teams. Strictly go through lesson learned and filed issues. While running a project, try to review the original plan and the current plan in order to mark what went off track and what caused it. This you could add to Wrong lesson learned section or good if went the other way.</p><p></p><div class="captioned-button-wrap" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/software-estimations?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">Thank you for reading PrecisEmbedded. This post is public, so feel free to share it.</p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/software-estimations?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://embedded.institute/p/software-estimations?utm_source=substack&utm_medium=email&utm_content=share&action=share"><span>Share</span></a></p></div><p class="button-wrapper" data-attrs="{&quot;url&quot;:&quot;https://embedded.institute/p/software-estimations/comments&quot;,&quot;text&quot;:&quot;Leave a comment&quot;,&quot;action&quot;:null,&quot;class&quot;:null}" data-component-name="ButtonCreateButton"><a class="button primary" href="https://embedded.institute/p/software-estimations/comments"><span>Leave a comment</span></a></p><p></p><p></p>]]></content:encoded></item></channel></rss>