<?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[Noah ]]></title><description><![CDATA[Industrial AI, fleet intelligence, and the messy reality of making ML work on real-world hardware. Notes from a systems engineer in cleantech ]]></description><link>https://www.noahtucker.ai</link><image><url>https://substackcdn.com/image/fetch/$s_!JhjZ!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4d0b54c9-c5a9-47a2-a504-5481205942bb_1280x1280.png</url><title>Noah </title><link>https://www.noahtucker.ai</link></image><generator>Substack</generator><lastBuildDate>Wed, 10 Jun 2026 09:13:53 GMT</lastBuildDate><atom:link href="https://www.noahtucker.ai/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Noah Tucker]]></copyright><language><![CDATA[en-gb]]></language><webMaster><![CDATA[noahtuckernt@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[noahtuckernt@substack.com]]></itunes:email><itunes:name><![CDATA[Noah Tucker]]></itunes:name></itunes:owner><itunes:author><![CDATA[Noah Tucker]]></itunes:author><googleplay:owner><![CDATA[noahtuckernt@substack.com]]></googleplay:owner><googleplay:email><![CDATA[noahtuckernt@substack.com]]></googleplay:email><googleplay:author><![CDATA[Noah Tucker]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[I let an AI talk to my car]]></title><description><![CDATA[Building an OBD-II bridge so a model could read my car directly - and what it taught me about where the intelligence belongs.]]></description><link>https://www.noahtucker.ai/p/i-let-an-ai-talk-to-my-car</link><guid isPermaLink="false">https://www.noahtucker.ai/p/i-let-an-ai-talk-to-my-car</guid><dc:creator><![CDATA[Noah Tucker]]></dc:creator><pubDate>Wed, 03 Jun 2026 21:18:29 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!c0MI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.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_!c0MI!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!c0MI!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!c0MI!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!c0MI!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!c0MI!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!c0MI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:5455,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.noahtucker.ai/i/200505522?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.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_!c0MI!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!c0MI!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!c0MI!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!c0MI!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F0f53d740-136a-48dd-b1ed-d540494786db_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p><a href="https://github.com/noahtuckernt999/obd-ii-mcp">OBDII-MCP on Github</a></p><p>Recently, I replaced my car&#8217;s battery on a hunch. It felt like the car was struggling to turn over on cold starts, but there was no clear sign because there were no fault codes. I consulted AI and it came to the same conclusion. But this made me think: why am I in the diagnostic loop here, providing indirect, second-hand evidence to the AI? Why can&#8217;t the model just talk directly to the car, read the actual voltage data and perform any required tests?</p><p>Unfortunately, I didn&#8217;t have the tech for that. So I decided to build it.</p><p>I decided to build an MCP server that would bridge the gap between the model and the hardware. I started with a cheap Bluetooth OBDII dongle (OBDII is the automotive standard which defines diagnostic services and modes), which provided the bottom of the stack. This would allow serial Bluetooth communication between my laptop and the vehicle, and would implement the low-level CAN framing and request/response for me out of the box. This in turn meant that I wouldn&#8217;t need to implement a driver; the ELM327 Bluetooth dongle is the driver, providing the interface with a known and documented command set. I did, however, notice at this stage that these chips have a somewhat limited bandwidth - which would limit how many parameters (and at what frequency) I would be able to stream at the same time, and would shape the architecture.</p><p>On top of the ELM327 transport layer, I built out a PID (parameter IDs, such as motor RPM, or battery voltage) querying layer, used by OBDII. I then built a service layer on top of this that would expose tools to the MCP server.  &#8220;python-OBD&#8221; would have handled most of the bottom half, but I&#8217;d already written my own by the time I properly looked at it, and since mine worked and I understood it end to end, I kept it. (It&#8217;s also GPL, and I wanted this MIT-licensed).</p><p>So the architecture stack looked like 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_!K7S_!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!K7S_!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 424w, https://substackcdn.com/image/fetch/$s_!K7S_!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 848w, https://substackcdn.com/image/fetch/$s_!K7S_!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!K7S_!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!K7S_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png" width="1456" height="1156" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1156,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:111610,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.noahtucker.ai/i/200505522?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.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_!K7S_!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 424w, https://substackcdn.com/image/fetch/$s_!K7S_!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 848w, https://substackcdn.com/image/fetch/$s_!K7S_!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 1272w, https://substackcdn.com/image/fetch/$s_!K7S_!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F666996a5-1408-4419-afe8-1f0bd16a7787_2040x1620.png 1456w" sizes="100vw"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>While building the MCP tools I came to the realisation that there would be no need to implement diagnostic taste or logic here. I watched the model chain PID reads and reason about them without any hardcoded logic from me. Instead of building something like &#8220;check_charging_system()&#8221;, I designed purposefully thin primitives such as read a PID, list supported PIDs, read DTCs, open a stream. I had answered my own question: the intelligence no longer belongs in the application, but belongs in the model. I just needed a safe toolset for the model, which I provided by building exclusively read-only commands into the PID layer.</p><p>In order to make the MCP server testable (without relying on having the hardware in the loop), I built a light Streamlit application which enabled streaming selected PIDs, and built a way to record the stream to a JSON file, then to replay from the stream. I used the streaming feature to visualise the battery voltage, and then applied an electrical load (winding down all four windows at once). I proved the end-to-end integration by seeing the battery voltage dip in the graph at the same time:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!f1bE!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!f1bE!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 424w, https://substackcdn.com/image/fetch/$s_!f1bE!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 848w, https://substackcdn.com/image/fetch/$s_!f1bE!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 1272w, https://substackcdn.com/image/fetch/$s_!f1bE!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!f1bE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png" width="1343" height="590" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:590,&quot;width&quot;:1343,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:76031,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.noahtucker.ai/i/200505522?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.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_!f1bE!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 424w, https://substackcdn.com/image/fetch/$s_!f1bE!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 848w, https://substackcdn.com/image/fetch/$s_!f1bE!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 1272w, https://substackcdn.com/image/fetch/$s_!f1bE!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F158900d6-883a-45a0-ae5f-b0e2729befec_1343x590.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>I also recorded a session driving around the block, to prove the ability to record and replay the diagnostic session - an invaluable feature for diagnosing actual dynamic driving data.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!t4kX!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!t4kX!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 424w, https://substackcdn.com/image/fetch/$s_!t4kX!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 848w, https://substackcdn.com/image/fetch/$s_!t4kX!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 1272w, https://substackcdn.com/image/fetch/$s_!t4kX!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!t4kX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png" width="1010" height="454" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:454,&quot;width&quot;:1010,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:98446,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:&quot;https://www.noahtucker.ai/i/200505522?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe4adf1aa-600f-4502-ae0e-33cdd761f756_1024x458.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_!t4kX!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 424w, https://substackcdn.com/image/fetch/$s_!t4kX!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 848w, https://substackcdn.com/image/fetch/$s_!t4kX!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 1272w, https://substackcdn.com/image/fetch/$s_!t4kX!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fceae9a2f-845c-467e-86e9-3809ccaabccd_1010x454.png 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>At this point the project had crossed an important threshold: the AI was no longer just helping me reason about the car from photos and descriptions. It had a structured, read-only, interface into the vehicle itself.</p><p>So now I had something that worked well for my specific car, and for the default list of PIDs that I had pulled from online. But to make this project useful for other car models and manufacturers, I thought it would be useful to implement a discovery functionality. Effectively I wanted the LLM to ask the car &#8220;which PIDs do you support?&#8221;. This would pair nicely with the general MCP design philosophy - allowing auto-discovery rather than hardcoding capability. OBDII already supports this with so called &#8220;Mode 01 PID discovery&#8221;. So I built support for this for both the MCP client and the Streamlit dashboard, enabling users to connect to the car, ask what PIDs are supported, and then select what they wanted to see from the dynamic list generated in the dashboard (or indeed the LLM could do this itself over MCP).</p><p>Clearly there are limitations to this approach - I won&#8217;t claim that this tool is the answer to all car troubleshooting: far from it. While working on this project I also had to replace the car&#8217;s rear windscreen wiper motor, and when doing so I needed to take physical voltage readings at different points in the wiring loom and feed these into the model. The car doesn&#8217;t expose this over OBD. Equally, performing a simple voltage under load test (especially without knowing the load current) doesn&#8217;t give you a complete battery health test. But had I had this tool I could certainly have made a much more informed decision, especially by doing a few variations of load tests (combined with AI&#8217;s ability to pull datasheets and infer specific load currents).</p><p>Reflecting on this build made it clear to me that the reasoning boundary has shifted, and will continue to do so. As AI models get more capable, what real value is there in hardcoding &#8220;diagnostic intelligence&#8221; into the application? The new approach should be to provide the model with the right tools and harnessing, and then to get out of its way.</p><p>I thought back to how early waves of frontier model releases killed early AI companies, which relied on products that were fundamentally little more than an AI wrapper. How should today&#8217;s applications be built to prevent them becoming obsolete in six months? One approach appears to be to build with the rate of change in mind, and to fully expect that most of the reasoning should be done in the LLM layer. Thus, if reasoning is no longer the competitive moat, then perhaps it is data, domain expertise, harnessing and tooling.</p><p><a href="https://github.com/noahtuckernt999/obd-ii-mcp">OBDII-MCP on Github</a></p>]]></content:encoded></item><item><title><![CDATA[Notes from five years of being outmatched]]></title><description><![CDATA[How being the least expert person in the room teaches you to compress]]></description><link>https://www.noahtucker.ai/p/notes-from-five-years-of-being-outmatched</link><guid isPermaLink="false">https://www.noahtucker.ai/p/notes-from-five-years-of-being-outmatched</guid><dc:creator><![CDATA[Noah Tucker]]></dc:creator><pubDate>Sat, 16 May 2026 14:43:25 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!u7_3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.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_!u7_3!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!u7_3!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!u7_3!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!u7_3!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!u7_3!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!u7_3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png" width="1456" height="819" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:1057435,&quot;alt&quot;:null,&quot;title&quot;:null,&quot;type&quot;:&quot;image/png&quot;,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:&quot;https://www.noahtucker.ai/i/198004827?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.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_!u7_3!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 424w, https://substackcdn.com/image/fetch/$s_!u7_3!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 848w, https://substackcdn.com/image/fetch/$s_!u7_3!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 1272w, https://substackcdn.com/image/fetch/$s_!u7_3!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F03abaa46-1872-4319-9bbd-f440d8ccef3f_1672x941.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><p>The corner problem. &#8220;What if we moved the gusset by 5mm towards the vertical member?&#8221; By this point I was struggling to keep up with visualising the complex 3D geometry in my head, and it took me a good 30 seconds to remember what a gusset was again&#8230; and suddenly the conversation had moved on and someone else was offering technical observations about why that particular solution wouldn&#8217;t work, receiving nods of understanding from the room. The issue was that I was only a few months into real engineering, and despite being the work package manager for the battery pack we were discussing, I wasn&#8217;t fluent enough in the technical concepts to contribute much of substance. I kept my mouth shut.</p><p>Over the past five years of my career, I&#8217;ve often been in rooms where I&#8217;ve been outmatched. It&#8217;s become clear to me that fluency - the ability to use the jargon - and deep understanding are not the same thing. Every time I thought I had a rock-solid mental model and could speak the jargon, some new concept would present itself that everyone else was seemingly already familiar with, and which meant little to me. This, as I have come to appreciate, is what it costs to have responsibility beyond your experience, alongside genuine experts. It&#8217;s how I&#8217;ve spent the last five years at Sunswap - the cleantech start-up I joined as one of the first employees - and it&#8217;s how I&#8217;ve developed the ability to learn and compress fast.</p><p>Being outmatched isn&#8217;t an overstatement. I&#8217;ve worked alongside engineers with decades more experience than me, and it&#8217;s a specific, daily, uncomfortable cognitive experience. A feeling of not being able to keep up, processing slower than everyone else, and often slight embarrassment at stalling the progress of discussion. And yet, as I&#8217;ve progressed in my career, I&#8217;ve come to a crucial realisation: this is exactly the room I want to be in - the one in which I&#8217;m outmatched. </p><p>That doesn&#8217;t necessarily mean being outmatched on every front. I&#8217;m a jack of all trades, master of some - but in the domain at hand, I&#8217;m outmatched. My thesis is simple: there is no greater motivational driver for learning than imposter syndrome. It&#8217;s a quality I see in all those I respect most: only those who are blind to their true ability have the complete confidence to never self-assess.</p><p>My solution: <em>learn fast</em>. Learning the language of the domain came first. In school, I would roll my eyes at having to rote learn terminology. There were more interesting things to be getting on with, but perhaps I wasn&#8217;t fully appreciating the power of compression (forgivable, in fairness, for a 14-year-old). Now that I work in AI there&#8217;s an obvious parallel: context window optimisation. Just like LLMs - which can only process a fixed number of tokens at once, with quality degrading as the context grows - people can only process so much information in one chunk. Being able to use precise and domain-specific language is effectively a context compression hack: the information conveyed is succinct and specific enough that the meaning carries through with very low cognitive load. Naming a concept allows you to refer back to it with ease, without convoluted explanations. I remember always being struck by one particular colleague who would focus hard on picking the right words, so much so that he actually spoke quite slowly. At the time I thought this was over the top, but I later came to realise that this is evidence of an incredibly valuable and rare skill: the art of concept compression in real time, and the ability to distil meaning into its purest form.</p><p>Another instrument is a <strong>mental model</strong>. Take the example of a &#8220;sacrificial element&#8221; - a purposefully weak link in a chain that allows you to control which section will fail first. We used this in the battery pack design with our fusing architecture. We knew the sacrificial fuse would fail first in an electrical fault, so we deliberately located it outside the main pack area, allowing the pack to stay serviceable without invasive repairs. By labelling the concept in two words, everyone conjures up the appropriate mental model, which means it occupies the minimal amount of &#8220;context tokens&#8221; possible and enables faster discussion. Or (to appropriately compress the idea): compression.</p><p>But labels only work if there&#8217;s something real underneath them. Mental models have to be discovered first, then labelled - not the other way round. They have to be earned, like achievements in a video game. A few years ago, having discovered Charlie Munger (who popularised the concept of mental models) and Farnam Street (an online community dedicated to the subject), I attempted to create a giant poster of the most common mental models, hung it on my staircase, and tried to memorise it - an effort that quickly proved unsuccessful. Mental models are like a one-way function: you can easily calculate the output from the input, but not vice versa. It&#8217;s the same reason why book summaries don&#8217;t work long term. Your brain is effective at compressing concepts, but only once the underlying understanding is there. Without the work, the label has nothing underneath to attach itself to. However, I&#8217;ve found mental models to compound and pop up across domains, which is what makes them so powerful.</p><p>Beyond language and models, there&#8217;s <strong>first-principles thinking</strong>. A truly deep understanding of the domain space. Things like: what really <em>is</em> voltage? Every engineer will claim to understand voltage. Few can explain what physically causes it: an imbalance of charge at the particle level. My cheat code for first-principles thinking has been YouTube. Channels like 3Blue1Brown, AlphaPhoenix and Ben Eater have been invaluable in refining my models over the years. The videos worth watching I watch three or four times. Now I share them with my team. First-principles thinking is compression at the foundation: knowing what a concept physically is, so everything above it can be rebuilt. After all, if you can&#8217;t explain it at a whiteboard, do you really understand it?</p><p>The good news I&#8217;ve found is that compression compounds. I first noticed this two years in. By year three, after a concerted effort to deepen my electrical knowledge, it took me by surprise how fast new domains were becoming accessible. Not only are concepts transferable across domains, but more deeply, the framework for operating in ambiguity and getting up to speed quickly becomes a powerful weapon. Over the past couple of years I&#8217;ve found the same with AI. Ultimately, everything is systems. The skill of moving fluidly between levels of model complexity transfers everywhere. Now I use AI the same way, as a tutor for whatever domain I&#8217;m currently outmatched in. The compression habit just found a new instrument.</p><p>So being outmatched is the formation I&#8217;d recommend, if you can tolerate the discomfort. Studying compression won&#8217;t make you a compressor. Being in a room where you are outmatched will. This is the signal I look for now - if I&#8217;m not outmatched, I&#8217;m not at the limit, and there&#8217;s no room to grow. Every new expert colleague who joins Sunswap is an opportunity to be outmatched, and to learn from the best. Compression compounds.</p>]]></content:encoded></item></channel></rss>