<?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[Alastair Rushworth]]></title><description><![CDATA[Alastair Rushworth]]></description><link>https://newsletter.alastairrushworth.com</link><image><url>https://newsletter.alastairrushworth.com/img/substack.png</url><title>Alastair Rushworth</title><link>https://newsletter.alastairrushworth.com</link></image><generator>Substack</generator><lastBuildDate>Mon, 04 May 2026 05:49:45 GMT</lastBuildDate><atom:link href="https://newsletter.alastairrushworth.com/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Alastair Rushworth]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[alastairrushworth@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[alastairrushworth@substack.com]]></itunes:email><itunes:name><![CDATA[Alastair Rushworth]]></itunes:name></itunes:owner><itunes:author><![CDATA[Alastair Rushworth]]></itunes:author><googleplay:owner><![CDATA[alastairrushworth@substack.com]]></googleplay:owner><googleplay:email><![CDATA[alastairrushworth@substack.com]]></googleplay:email><googleplay:author><![CDATA[Alastair Rushworth]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[How much AI do we need, really?]]></title><description><![CDATA[It&#8217;s been said that if all AI development paused and went no further than it has right now, there are still years of innovation and disruption and growth to come just by integrating what we have into products.]]></description><link>https://newsletter.alastairrushworth.com/p/how-much-ai-do-we-need-really</link><guid isPermaLink="false">https://newsletter.alastairrushworth.com/p/how-much-ai-do-we-need-really</guid><dc:creator><![CDATA[Alastair Rushworth]]></dc:creator><pubDate>Sat, 13 Dec 2025 09:37:58 GMT</pubDate><content:encoded><![CDATA[<p>It&#8217;s been said that if all AI development paused and went no further than it has right now, there are still years of innovation and disruption and growth to come just by integrating what we have into products. The way the frontier labs and their investors are spending implies that the payoff of developing AI to some notional AGI end state is far greater than whatever value they could get in the shorter term by focussing more on product. Yes, I know ChatGPT is a product, and maybe it will become the operating system of everything in the future. But the bet being made doesn&#8217;t seem to be that, based on where labs are spending their money.</p><p>What I think is wrong about all of this AGI stuff is that most problems that actually need solving - and that someone will pay you to solve with a product - require a fixed amount of intelligence. Sometimes that&#8217;s low, sometimes that&#8217;s high. But there&#8217;s going to be a point past which developing the AI further doesn&#8217;t matter, because you can already do the thing automatically, after which it&#8217;s really about cost and convenience.</p><p>I don&#8217;t think this is just a lack of imagination on my part on how different the AGI future might end up being. Humans in 10 years will still need food, homes, recreation, financial products and access to information. All of these things currently operate in a clunky analogue world and doubtless will change a lot with AI, but none of these things are 4d Vulcan chess problems either. There will be a point past which the benefit from AI enhancement will be mostly saturated.</p><p>The problem here is that the labs don&#8217;t really have any durable advantage on the technology. Yes they&#8217;re well funded, and make splashy breakthroughs, but typically an open weight model will match their performance within 6-12 months. This is great for the product people who are building things, because you just need to focus on building, and wait for the cost of the intelligence level you need to be competed away in the cash furnace.</p><p>If you agree with this thesis and are wondering why this isn&#8217;t being discussed more, I think the reason is simply that a lot of the next generation of products are still being built, and we don&#8217;t yet know what level of intelligence is really needed. It maybe that for many of them, we already have it, for others maybe it&#8217;s a year or two away. But the point is that these thresholds are real, and make it harder to justify the investment case for continuing to scale AI training.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://newsletter.alastairrushworth.com/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[Custom RSS feeds]]></title><description><![CDATA[I&#8217;ve been building blaze.email for a couple of years now.]]></description><link>https://newsletter.alastairrushworth.com/p/custom-rss-feeds</link><guid isPermaLink="false">https://newsletter.alastairrushworth.com/p/custom-rss-feeds</guid><dc:creator><![CDATA[Alastair Rushworth]]></dc:creator><pubDate>Thu, 02 Oct 2025 12:16:06 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!zWVw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>I&#8217;ve been building <a href="https://blaze.email?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=custom-rss-feeds">blaze.email</a> for a couple of years now. Basically it&#8217;s an email digest that curates links to interesting tech blog posts from the past week, across a few different popular topics (gen AI, obvs). Part of doing this requires automatically parsing, categorising and creating text embeddings for each post so they can be screened for relevance. I&#8217;ve indexed about 1.3M blog posts over time and have been looking for ways to make all of this more useful, so I started by creating a basic blog search engine at <a href="https://blognerd.app?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=custom-rss-feeds">blognerd.app</a>:</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!zWVw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!zWVw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 424w, https://substackcdn.com/image/fetch/$s_!zWVw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 848w, https://substackcdn.com/image/fetch/$s_!zWVw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 1272w, https://substackcdn.com/image/fetch/$s_!zWVw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!zWVw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png" width="1447" height="1039" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1039,&quot;width&quot;:1447,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:186341,&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://alastairrushworth.substack.com/i/175098609?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F400edcda-962b-480a-917c-179412502a85_1447x1039.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_!zWVw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 424w, https://substackcdn.com/image/fetch/$s_!zWVw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 848w, https://substackcdn.com/image/fetch/$s_!zWVw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 1272w, https://substackcdn.com/image/fetch/$s_!zWVw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F2ebe3522-c15c-4b59-beb9-78bd4a62b67c_1447x1039.png 1456w" sizes="100vw" fetchpriority="high"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a><figcaption class="image-caption">Answering all the important questions</figcaption></figure></div><p>So far so standard, quite a few places already let you do this. A few distinguishing features are that you can</p><ul><li><p>search similar posts or similar blogs by clicking the grey pills in the results</p></li><li><p>turn any content search into an RSS feed</p></li><li><p>search RSS feeds directly and find similar authors</p></li></ul><p><strong>Custom RSS</strong></p><p>The big new thing here is the ability to customise feeds. It&#8217;s somewhat inspired by <a href="https://en.wikipedia.org/wiki/Yahoo_Pipes?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=custom-rss-feeds">Yahoo! pipes</a> which among other things let you mash together feeds from the web using a graphical interface. Here&#8217;s how it looks on <a href="https://blognerd.app?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=custom-rss-feeds">blognerd.app</a></p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!PTHe!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!PTHe!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 424w, https://substackcdn.com/image/fetch/$s_!PTHe!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 848w, https://substackcdn.com/image/fetch/$s_!PTHe!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 1272w, https://substackcdn.com/image/fetch/$s_!PTHe!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!PTHe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png" width="1456" height="814" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:814,&quot;width&quot;:1456,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:505124,&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://alastairrushworth.substack.com/i/175098609?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.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_!PTHe!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 424w, https://substackcdn.com/image/fetch/$s_!PTHe!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 848w, https://substackcdn.com/image/fetch/$s_!PTHe!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.png 1272w, https://substackcdn.com/image/fetch/$s_!PTHe!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe3721a25-7034-4590-b7ce-ff2a59915398_2870x1604.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>It&#8217;s pretty simple. You draw flowchart by dragging nodes onto the canvas. Every flow chart needs to start with at least one &#8216;Input&#8217; which specifies a search query, and each flow needs to end with a single RSS output. You can add keyword filter steps to add / remove things you are / aren&#8217;t interested in. I think turning searches into feeds is powerful on it&#8217;s own, but I really like the ability to tweak RSS feeds and adding as many different topic sources as you like.</p><p>I&#8217;m leaving it completely open while I develop it, as I&#8217;m really keen to get any ideas or feedback on it. Please give me a shout if you have any thoughts - you can find me on <a href="https://fosstodon.org/@alastairmrushworth?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=custom-rss-feeds">Mastodon</a> or <a href="https://bsky.app/profile/alastairrushworth.bsky.social?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=custom-rss-feeds">Bluesky</a></p>]]></content:encoded></item><item><title><![CDATA[Learning in the open, GPT5, AI news]]></title><description><![CDATA[In September I&#8217;ll be going freelance, working in the AI space.]]></description><link>https://newsletter.alastairrushworth.com/p/learning-in-the-open-gpt5-ai-news</link><guid isPermaLink="false">https://newsletter.alastairrushworth.com/p/learning-in-the-open-gpt5-ai-news</guid><dc:creator><![CDATA[Alastair Rushworth]]></dc:creator><pubDate>Fri, 15 Aug 2025 14:26:17 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!RgvY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>In September I&#8217;ll be going freelance, working in the AI space. Although I&#8217;ve been kind of been working in the general area of traditional ML and data science for some years, there&#8217;s a lot to catchup on, so I&#8217;m taking some time to upskill, read and think. I&#8217;m pretty excited about this, learning is something I enjoy, though I never quite get the time to do enough of it. Which is why I&#8217;m starting this substack - more of a scratchpad than a traditional newsletter, I&#8217;m going to try to capture interesting things that I learn as I learn them. It&#8217;s also a way to log things and stay accountable. I expect it will be raw and unpolished, which in a world of increasingly polished and beige AI prose I think is a good thing - bad writing is the new good, sort of. My aim is to write authentically and honestly, primarily for myself, but I hope the struggle and journey resonates with others!</p><h4><strong>GPT-5 release</strong></h4><p>gpt 5 was released on Thursday 7th August - OpenAI&#8217;s official <a href="https://openai.com/index/introducing-gpt-5/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">announcement posts don&#8217;t say too much</a>. Simon Willison&#8217;s write-up <a href="https://simonwillison.net/2025/Aug/7/gpt-5/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">&#8220;GPT-5: Key characteristics, pricing and model card&#8221;</a> is a great place to start. The biggest changes seem to be simplified range of models (naming was out of hand before with o3, o3-mini, 4o, 4.1-nano etc.), and <a href="https://platform.openai.com/docs/pricing?latest-pricing=standard&amp;utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">very keen pricing on input tokens</a>. GPT 5 is half the price gpt-4o, and gpt-5-nano is 5c / M tokens (!). Not new to this release, but often overlooked batch pricing for asnychronous non-time sensitive tasks <a href="https://platform.openai.com/docs/pricing?latest-pricing=batch&amp;utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">is even cheaper</a>.</p><div class="captioned-image-container"><figure><a class="image-link image2 is-viewable-img" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RgvY!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RgvY!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 424w, https://substackcdn.com/image/fetch/$s_!RgvY!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 848w, https://substackcdn.com/image/fetch/$s_!RgvY!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!RgvY!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RgvY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png" width="380" height="297.8378378378378" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/e8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:1044,&quot;width&quot;:1332,&quot;resizeWidth&quot;:380,&quot;bytes&quot;:125107,&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://alastairrushworth.substack.com/i/170664207?img=https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.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_!RgvY!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 424w, https://substackcdn.com/image/fetch/$s_!RgvY!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 848w, https://substackcdn.com/image/fetch/$s_!RgvY!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.png 1272w, https://substackcdn.com/image/fetch/$s_!RgvY!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fe8b94ff1-5db9-4645-8b1b-157c3a965773_1332x1044.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>There&#8217;s sort of a catch with the pricing - by default these are all reasoning models, and the number of output reasoning tokens can be sizable. I flipped my gpt-4o-mini summarisation processes over to gpt-5-nano, and noticed a huge uptick in output tokens, which more than wiped out the per token savings and resulted in a doubling of costs! Updating the OpenAI python package and adding reasoning={"effort": "minimal"} seemed to make things more comparable to the non-reasoning equivalents.</p><p>Although the changes are great, and lower costs are awesome, it&#8217;s not the step up in capability or performance I&#8217;d expected with a major version bump. The Register commented that <a href="https://www.theregister.com/2025/08/13/gpt_5_cost_cutting/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">OpenAI's GPT-5 looks less like AI evolution and more like cost cutting</a> - I&#8217;m not sure I&#8217;d go this far, but I wonder if it does point to a potential slowing in what can achieved under the current training paradigm.</p><h4>Other AI news</h4><p><a href="https://docs.anthropic.com/en/docs/build-with-claude/context-windows?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news#1m-token-context-window">Claude 4 1M token context in beta</a> - for tier 4 users initially and more costly per token, and seems aimed at packing more context into code agents for larger repos, I hope we see this rolling out in Claude Code / your favourite agent soon. As a side note, it got me wondering about the large context <a href="https://cloud.google.com/blog/products/ai-machine-learning/the-needle-in-the-haystack-test-and-how-gemini-pro-solves-it?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">needle-in-a-haystack</a> problem, which may now be essentially solved, but doesn&#8217;t perhaps get discussed as much as it should.</p><p><a href="https://github.blog/news-insights/company-news/goodbye-github/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">Thomas Dohmke resigned as Github CEO 'to become a founder again'</a>. I thought this was interesting, Dohmke always has insightful things to say about the future of software development, even although github copilot has been lagging a bit lately on code agents. It&#8217;ll be interesting to see both how this pans out for github as it <a href="https://www.theverge.com/news/757461/microsoft-github-thomas-dohmke-resignation-coreai-team-transition?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">moves more closely to it&#8217;s parent Microsoft</a> and to whatever Dohmke decides to build next.</p><p><a href="https://developers.googleblog.com/en/introducing-gemma-3-270m/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">DeepMind releases Gemma 3 270M</a>, a very small and very capable open weight model. I&#8217;ve been meaning to do something interesting with a small model for some time, this one might have come at the right 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_!QPXN!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!QPXN!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QPXN!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QPXN!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QPXN!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!QPXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg" width="576" height="324" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/ebf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:819,&quot;width&quot;:1456,&quot;resizeWidth&quot;:576,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;Gemma 3 270M&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="Gemma 3 270M" title="Gemma 3 270M" srcset="https://substackcdn.com/image/fetch/$s_!QPXN!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 424w, https://substackcdn.com/image/fetch/$s_!QPXN!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 848w, https://substackcdn.com/image/fetch/$s_!QPXN!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!QPXN!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Febf15384-0c46-420d-a109-8aa41b08e9f0_4001x2251.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div class="image-link-expand"><div class="pencraft pc-display-flex pc-gap-8 pc-reset"><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container restack-image"><svg role="img" width="20" height="20" viewBox="0 0 20 20" fill="none" stroke-width="1.5" stroke="var(--color-fg-primary)" stroke-linecap="round" stroke-linejoin="round" xmlns="http://www.w3.org/2000/svg"><g><title></title><path d="M2.53001 7.81595C3.49179 4.73911 6.43281 2.5 9.91173 2.5C13.1684 2.5 15.9537 4.46214 17.0852 7.23684L17.6179 8.67647M17.6179 8.67647L18.5002 4.26471M17.6179 8.67647L13.6473 6.91176M17.4995 12.1841C16.5378 15.2609 13.5967 17.5 10.1178 17.5C6.86118 17.5 4.07589 15.5379 2.94432 12.7632L2.41165 11.3235M2.41165 11.3235L1.5293 15.7353M2.41165 11.3235L6.38224 13.0882"></path></g></svg></button><button tabindex="0" type="button" class="pencraft pc-reset pencraft icon-container view-image"><svg xmlns="http://www.w3.org/2000/svg" width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-maximize2 lucide-maximize-2"><polyline points="15 3 21 3 21 9"></polyline><polyline points="9 21 3 21 3 15"></polyline><line x1="21" x2="14" y1="3" y2="10"></line><line x1="3" x2="10" y1="21" y2="14"></line></svg></button></div></div></div></a></figure></div><h4>Other things I read this week</h4><p><a href="https://zed.dev/blog/why-llms-cant-build-software?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">Why LLMs can't build software</a> by Conrad Irwin. I loved the succinctness of framing of building software as being difference of two mental models - one of the mental model of how the software currently works and what it does, and the mental model of what it <em>should</em> do. For LLMs this is essentially a problem of context gathering and management, which is currently limited by context windows (see above about Claude&#8217;s recent change) and product design. Something that LLM products don&#8217;t do but should, is ask more questions after a user prompt to clarify it&#8217;s understanding of what you ask. Something I added to my Claude preferences some time ago was a request that it should ask for clarification when required.</p><p><a href="https://www.seangoedecke.com/model-on-a-mbp/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">What's the strongest AI model you can train on a laptop in five minutes?</a> terrific article, provides some interesting intuitions about the relationship between corpus complexity, model architecture and the number of tokens you can train per second. Probably the best thing I read this week. &#128076;</p><p>A fun <a href="https://github.com/anthropics/claude-code/issues/3382?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=learning-in-the-open-gpt5-ai-news">github issue about Claude&#8217;s &#8216;you&#8217;re absolutely right!&#8217;</a> sycophancy.</p>]]></content:encoded></item><item><title><![CDATA[On using code copilots in data science]]></title><description><![CDATA[I&#8217;ve lost track of how long I&#8217;ve been using Github&#8217;s Copilot via the VSCode extension but it&#8217;s well over 18 months at this point.]]></description><link>https://newsletter.alastairrushworth.com/p/on-using-code-copilots-in-data-science</link><guid isPermaLink="false">https://newsletter.alastairrushworth.com/p/on-using-code-copilots-in-data-science</guid><dc:creator><![CDATA[Alastair Rushworth]]></dc:creator><pubDate>Sat, 29 Jun 2024 00:00:00 GMT</pubDate><content:encoded><![CDATA[<p>I&#8217;ve lost track of how long I&#8217;ve been using <a href="https://github.com/features/copilot?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">Github&#8217;s Copilot</a> via the <a href="https://marketplace.visualstudio.com/items?itemName=GitHub.copilot&amp;utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">VSCode extension</a> but it&#8217;s well over 18 months at this point. It&#8217;s been absolutely game-changing for my productivity and enjoyment of writing code, but I&#8217;m often surprised to find that other data scientists haven&#8217;t tried it (or an equivalent tool like <a href="https://www.qodo.ai/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">codium</a>, <a href="https://www.tabnine.com/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">tabnine</a> and <a href="https://www.cursor.com/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">cursor.sh</a>). I&#8217;ve writing this to explain why I think it&#8217;s so important, and that it should be considered an essential part of a data scientist&#8217;s toolkit. If you don&#8217;t use a code copilot tool, I hope this provides a perspective on what you might be missing. If you do already, hopefully it resonates with your experiences.</p><h2>Writing code is slow</h2><p>The physical act of typing is an order of magnitude slower than the time it takes to decide what you intend to write. While typing, you need to remember how to use tools correctly to execute your intent (<em>how does pandas <code>.pivot()</code> work again?</em>), probably google some syntax (&#128128; <em>Stack Overflow</em>) and fix bugs or mistakes (<em>ugh, forgot to <code>.reset_index</code></em>). There&#8217;s also exploratory work and data analysis &amp; also iterating and refactoring (<code>that didn&#8217;t work, let&#8217;s try something else</code>), docstrings, comments, editing YAML files, yada yada. To say nothing of starting a new project and firing up your favourite modules and writing a first implementation of something.</p><p>All of this is just slow, compared to the time it takes to imagine what you are going to do. Ok, I know some of you can touch type, have black-belts in vim shortcuts and retain code docs in your photographic memories. But a majority of data science development time is spent punching out pretty standard code, and happily, this is exactly the type of code that copilots are excellent at anticipating with very good suggestions.</p><p>A slight philosophical segue. I think there&#8217;s an important distinction to be made between <em>typing code</em>, which is something you do with your fingers (and your web browser), and <em>realising ideas with software</em> which is something you mostly do with your brain. I&#8217;m not sure you can do one without the other, and the distinction isn&#8217;t totally crisp &#8212; but bear with me.</p><h2>Code is cheap, thinking is expensive</h2><p>Something we don&#8217;t talk about enough is just how much of the code we write ends up being thrown away. Projects change and sometimes die, ideas evolve and so does our code. But many (many) written lines of development, debugging, and EDA code are ephemeral and never even seen by another person.</p><p>It&#8217;s a mistake to think of discarded code as waste, it&#8217;s an essential part of development. As many authors have observed, <a href="https://alistapart.com/article/writing-is-thinking/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">writing is thinking</a> and writing code is no different. This is most obvious to me in the case of <a href="https://medium.com/@alastairmrushworth/exploratory-data-analysis-whats-the-point-56c73d33ec73?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">EDA, where we learn by coding, thinking and iterating</a> and much of this code doesn&#8217;t see the light of day. There&#8217;s more in the linked article, but I don&#8217;t at all think of EDA as an &#8216;analysis stage&#8217; as it&#8217;s often framed, but more of process of thinking and investigation.</p><p>Anyways, finished code is a digital manifestation of an idea, and writing the code is a form of thinking that leads to that manifestation. There&#8217;s a ton of value in the thinking part &#8212; in general, more thinking should result in better ideas and finished software. Time is always a regularising factor on how much of this type of work can take place. Copilots act as an accelerant and multiplier that makes delivering better ideas easier, faster and maybe even delightful.</p><h2>So what gives?</h2><p>Why the resistance the uptake of this type of tool? There&#8217;re a few reasons I&#8217;ve observed. The main one I think is that it&#8217;s simply passed a lot of people by &#8212; the last 2 years have passed in a haze of loud AI hype and chatbots. During the same period of time, code copilots have gone from being interesting, cool toys to something completely game-changing. You only need to scan some of the [comments on hackernews when Github Copilot first launched](the comments on hackernews when Github Copilot first launched) to get a sense of what a step change it was.</p><p>Another reasonable objection is the risk of wrong / hallucinated code inadvertently getting pushed and causing issues. To anyone worried about this, I suggest trying one of the major copilots out for a while, the risk is much lower than one might imagine. The workflow prevents this to an extent &#8212; copilots are more like very smart autocomplete, where you have full control over whether a code suggestion is accepted or not. It&#8217;s not at all like blindly copy-pasting large code generations from ChatGPT (though I believe this also has a place, but that&#8217;s for a another article).</p><p>Speaking from personal experience, I used to be a bit precious about my code, and definitely felt defensive about the idea of copilots when I first started playing with <a href="https://www.tabnine.com/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=on-using-code-copilots-in-data-science">tabnine</a> (which has been around longer than most). I&#8217;m not sure but I think this attitude is fairly common and is probably reinforced by the emphasis many companies put on squeaky clean SWE practises when hiring. The myth of the 10x engineer polyglot who can write the full stack and do deep specialist development definitely doesn&#8217;t help either. There&#8217;s probably a lot more to it than that, but I hope you know what I&#8217;m talking about. I think all of these cultural threads add up to a kind of jealousness over our hard-won skills that results in a reflexive rejection of tools that might displace them. I sometimes need to remind myself that over sufficiently long time scales, much of our knowledge of syntax will be made redundant anyways &#8212; in 10 years time, I expect that half of the modules I routinely use now will have changed or been updated beyond recognition. Bottom line is that it&#8217;s good to care about code, but don&#8217;t let it get in the way of trying new ways to do it.</p><h2>Wrap up: give it a go</h2><p>My best advice would be to try out a copilot. I really like Github&#8217;s, because it integrates seamlessly with VSCode and it really hasn&#8217;t missed a beat since I first subscribed. It&#8217;s absolutely the easiest $10 I spend each month.</p>]]></content:encoded></item><item><title><![CDATA[Why finding good tech blogs is hard]]></title><description><![CDATA[The internet is a very big place and discovering good things is still an unsolved problem.]]></description><link>https://newsletter.alastairrushworth.com/p/why-finding-good-tech-blogs-is-hard</link><guid isPermaLink="false">https://newsletter.alastairrushworth.com/p/why-finding-good-tech-blogs-is-hard</guid><dc:creator><![CDATA[Alastair Rushworth]]></dc:creator><pubDate>Fri, 21 Jun 2024 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/a5954b0e-ca63-4b67-bfaa-3e908e9cd6cd_1400x383.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>The internet is a very big place and discovering good things is still an unsolved problem. Some of the best writing lives in the fringes of the navigable internet in independent blogs that are difficult to surface unless you already know what you are looking for. I&#8217;ve spent a lot of time working on this topic, and believe it&#8217;s not obvious why the services that purport to solve this problem, don&#8217;t (and likely never will).</p><p>Firstly an important point of clarification: the title of this post is misleading, because I don&#8217;t think we should ever attempt to create sharp discrimination between &#8216;good&#8217; and &#8216;bad&#8217; content, or to create a service to serve up the &#8216;best&#8217; content. I think of <em>quality</em> as being a statistic that&#8217;s only defined over a <em>distribution</em> of content (in the statistical sense of achieving some content diversity over some unseen axis). I&#8217;ll begin by expanding this point by explaining a few ways in which the content we end up reading is inevitably from a very specific type of distribution that&#8217;s far from ideal.</p><h2>On filters</h2><blockquote><p>In order to read a thing on the internet, a decision was made that you should see that thing and not something else.</p></blockquote><p>It&#8217;s important to recognise that wherever we find content, on social media, news sites or search engines, someone or something decided you should see it. Maybe you made the decision, because you rolled your own tool. Maybe an algorithm did it. Maybe you read something that was trending on hacker news. It&#8217;s not intrinsically a bad thing, and doesn&#8217;t always imply intent to manipulate you. The internet is simply too big for this not to be the case. But it&#8217;s crucial to realise that we never have unfettered access to all of the internet&#8217;s content, or even an unbiased sample of any subset of it, and this has consequences.</p><p>All of that might seem a bit obvious, but it feels necessary to assert before we go into detail about how these filters express themselves in different venues. What I try to do in the following sections is give an opinionated (but hopefully relatable) perspective on the experience of discovering content across a few popular services, and hopefully shed a little light on an old problem.</p><p>I think a simple way to think of the problem is of a Venn diagram showing relevance and quality as separate, but overlapping traits. Again, I don&#8217;t mean to imply that there&#8217;s an objective way of crisply measuring the quality of a single piece of content, this is just a simplified way of thinking about content in the aggregate.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!obsx!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!obsx!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 424w, https://substackcdn.com/image/fetch/$s_!obsx!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 848w, https://substackcdn.com/image/fetch/$s_!obsx!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!obsx!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!obsx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;drawing&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="drawing" title="drawing" srcset="https://substackcdn.com/image/fetch/$s_!obsx!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 424w, https://substackcdn.com/image/fetch/$s_!obsx!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 848w, https://substackcdn.com/image/fetch/$s_!obsx!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!obsx!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F32133e04-b5f1-43c8-8d4b-a7d1ff4834a2_1400x383.jpeg 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><figcaption class="image-caption">A simple way to think about the performance of content recommendation.</figcaption></figure></div><p>By <strong>relevance</strong> I mean the set of content that is associated with your interests. On the other side is quality &#8212; the set of content that is good or worth reading. <strong>Quality</strong> is tricky to define, but it&#8217;s easy to describe what it isn&#8217;t: SEO blog posts, bland listicles, AI content farming etc. This is the bad quality stuff we&#8217;d rather avoid.</p><p>Our aim is to find as much content as possible that is both high-quality and relevant. Of course, every person will have a slightly different Venn diagram, particularly in the relevance set, but I think it&#8217;s also true that what might be quality for me, may not be for you.</p><p>I&#8217;ve also added a relevance &#8216;halo&#8217; to represent the fuzzy set of content that might not be quite as relevant to your interests, but that if of sufficient quality, you&#8217;d still read. This is one of the most important parts of this diagram in my opinion, I&#8217;ve put it there to highlight a core problem in most recommendation systems: it&#8217;s implicitly assumed that personalisation is more important that all else. I think this is too simplistic &#8212; for example, if something is of good enough quality, (or important enough), then I don&#8217;t care whether it&#8217;s relevant. In other words, content is king. The breadth of each person&#8217;s halo varies, but you get the idea &#8212; we don&#8217;t always just want more of the same.</p><h2>Search engines</h2><p>Let&#8217;s get the obvious out of the way. Google and Bing are the only real players, and as custodians of indexes of the entire internet, are in principle well placed to serve content from any niche. However, we know already that this doesn&#8217;t work out in practise, at all. <a href="https://arstechnica.com/gadgets/2024/01/google-search-is-losing-the-fight-with-seo-spam-study-says/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">Google has been struggling with SEO spam in recent years</a> and this struggle is being compounded by the <a href="https://futurism.com/ai-garbage-destroying-google-results?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">rise of AI content</a>. The bottom line is that getting relevant content from a search engine is easy, getting good quality requires a lot of patience. Moving on&#8230;</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!fTBw!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!fTBw!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fTBw!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fTBw!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fTBw!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!fTBw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;drawing&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="drawing" title="drawing" srcset="https://substackcdn.com/image/fetch/$s_!fTBw!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 424w, https://substackcdn.com/image/fetch/$s_!fTBw!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 848w, https://substackcdn.com/image/fetch/$s_!fTBw!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!fTBw!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F19829a24-c971-41d6-a2a7-1e81ff160814_1400x521.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Search engines: huge breadth, but the average quality in search results is incredibly low.</figcaption></figure></div><h2>Social media</h2><p>I&#8217;m not here to criticise social media, <a href="https://www.jaronlanier.com/tenarguments.html?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">that&#8217;s been very well covered by others</a>. They are excellent tools as communication devices and for communities to organise and interact. It&#8217;s unavoidable that the financial objectives of social media companies result in incentive structures and consequent behaviours that do not maximise utility and well-being for users. To be specific, there are three particular limitations on the <em>experienced</em> user content diet.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!RgI8!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!RgI8!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RgI8!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RgI8!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RgI8!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!RgI8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/a2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;drawing&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="drawing" title="drawing" srcset="https://substackcdn.com/image/fetch/$s_!RgI8!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 424w, https://substackcdn.com/image/fetch/$s_!RgI8!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 848w, https://substackcdn.com/image/fetch/$s_!RgI8!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!RgI8!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2Fa2cb3336-7f27-4e13-aabd-379ceec3d609_1400x549.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a><figcaption class="image-caption">Social media: Highly personalised, with a sprinkling of gems, but variety and coverage are low.</figcaption></figure></div><p><strong>Problem 1: The popular masks the niche.</strong> What content you do discover is likely already popular with people similar to you. Almost by definition, niche content isn&#8217;t going to be popular enough to propagate over the network, and so most of what you could discover will be missed simply because it is niche.</p><p><strong>Problem 2: User content is finite.</strong> In order for others to discover something, someone else must first share it. The internet is a very big place, and on any given social site, a lot of content that could be shared likely isn&#8217;t being shared there to begin with.</p><p><strong>Problem 3: Personalisation is a trap.</strong> Part of the joy of discovery is finding something in a new area, on a challenging topic or from vibrant new authors. Statistically, such posts might look to &#8216;the algorithm&#8217; as outside of your preferences and a less good bet for recommendation. It&#8217;s obvious why this makes sense for the social media company &#8212;if they did attempt to serve greater diversity, they&#8217;d have to risk lower average satisfaction with recommended content, and a degradation in their headline engagement metrics.</p><h2>RSS readers</h2><p>Curating a flow of content via RSS feeds has long been a go-to for power users. For those that don&#8217;t know, you can subscribe to <a href="https://en.wikipedia.org/wiki/RSS?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">almost any blog via an RSS feed</a> which updates when new posts are published. Typically you&#8217;d use a client like <a href="https://feedly.com/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">feedly</a> to manage your feeds and read posts. This allows you to keep up to date with any number of blogs you like to read.</p><div class="captioned-image-container"><figure><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!ko0i!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!ko0i!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ko0i!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ko0i!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ko0i!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!ko0i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;drawing&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:true,&quot;topImage&quot;:false,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="drawing" title="drawing" srcset="https://substackcdn.com/image/fetch/$s_!ko0i!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 424w, https://substackcdn.com/image/fetch/$s_!ko0i!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 848w, https://substackcdn.com/image/fetch/$s_!ko0i!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 1272w, https://substackcdn.com/image/fetch/$s_!ko0i!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F1f30a1a5-cd77-40b4-9094-ed323342d237_1400x554.jpeg 1456w" sizes="100vw" loading="lazy"></picture><div></div></div></a></figure></div><p>With RSS readers, you won&#8217;t ever need to read any spam or low quality content (unless a site you subscribe to publishes some), and you can ensure everything is relevant by being selective with the feeds you choose. Sounds great, but there are a couple of big drawbacks.</p><p><strong>Problem 1. You have to do discovery yourself.</strong> Clients like Feedly really don&#8217;t help much with deciding <em>what</em> to subscribe to. It&#8217;s fine if you just want to follow a few major news sites, you can find those quickly. Much harder if you want to cover a broad swathe of independent writers and to find new ones</p><p><strong>Problem 2. Your feed reader is an unwieldy firehose with lots of irrelevant content.</strong> A creator might have a number of topics they like to publish articles on, maybe you are only interested in only one of them. If you subscribe to lots of blogs, you quickly end up with an explosion of articles that you need to screen by scrolling through manually.</p><h2>Honourable mentions</h2><p>There are some alternative search engines that tackle this problem head-on, and I&#8217;d be remiss not to mention them. <a href="https://help.kagi.com/kagi/company/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">Kagi</a> is a subscription search engine service that works a bit like Google but has a stronger emphasis on higher quality, small web content. I&#8217;m a Kagi subscriber and I&#8217;ve found it refreshing and often more efficient than using google. <a href="https://exa.ai/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">Exa.ai</a> uses embeddings to search the index. Most interesting to me personally is <a href="https://search.marginalia.nu/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">marginalia.nu</a> which is free and specifically focusses on non-commercial, independent content. (Self-plug alert&#8230;) I&#8217;ve been working on <a href="https://blaze.email/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=why-finding-good-tech-blogs-is-hard">blaze.email</a> for over a year now, which offers a search engine and automated newsletter digests for tech content.</p><p>Each of these offer improvements over the bigger players, though I don&#8217;t believe any truly solves the quality problem (yet).</p><h2>A final thought: an analogy with food</h2><p>I&#8217;m certain someone thought of this before I did, but there&#8217;s a useful analogy to be made between the information we consume online and the food we eat. It&#8217;s almost a cliche that good health comes from a <em>balanced and varied diet</em>. Something very similar applies to our information diet &#8212; we require a level of diversity in what we read &#8212; diversity interpreted in the broadest sense of variety and heterogeneity.</p><p>What this might mean practically is that an ideal feed might appear less &#8216;palatable&#8217; than the type built on engagement on a social media site, including articles that are longer and more challenging. In my view, the palatability is mostly a UI problem for an enterprising content company to solve. The UIs of most social sites are extremely basic, which is something they get away with by inflaming users with content that is designed to hit the brain stem with some reptile energy. But can we imagine a site, interface or application that rewards thinking critically and consuming from a broader outlet? Yeah, of course it&#8217;s possible.</p><p>That&#8217;s not to say you shouldn&#8217;t enjoy the occasional shitpost, but consumed responsibly within a balanced and varied diet.</p>]]></content:encoded></item><item><title><![CDATA[Exploratory Data Analysis: what’s the point?]]></title><description><![CDATA[Exploratory data analysis or EDA is one of the most important but difficult to codify parts of the data science toolkit.]]></description><link>https://newsletter.alastairrushworth.com/p/exploratory-data-analysis-whats-the-point</link><guid isPermaLink="false">https://newsletter.alastairrushworth.com/p/exploratory-data-analysis-whats-the-point</guid><dc:creator><![CDATA[Alastair Rushworth]]></dc:creator><pubDate>Tue, 12 May 2020 00:00:00 GMT</pubDate><enclosure url="https://substack-post-media.s3.amazonaws.com/public/images/72f35c3d-52e5-4598-9982-64d11eeff847_1024x768.png" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p>Exploratory data analysis or EDA is one of the most important but difficult to codify parts of the data science toolkit. True exploratory analysis is without a sharply definable objective and evades being formalised into a set of clear steps. Despite this, EDA is used in at least a few very typical ways that connect to downstream tasks like data cleaning and hypothesis generation. But perhaps most importantly, it&#8217;s an integral part of how we learn to frame our thinking as data scientists. This post attempts to offer some perspective on the less-discussed ways in which EDA develops our contextual understanding of a data analysis.</p><a class="image-link image2" target="_blank" href="https://substackcdn.com/image/fetch/$s_!aONG!,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png" data-component-name="Image2ToDOM"><div class="image2-inset"><picture><source type="image/webp" srcset="https://substackcdn.com/image/fetch/$s_!aONG!,w_424,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 424w, https://substackcdn.com/image/fetch/$s_!aONG!,w_848,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 848w, https://substackcdn.com/image/fetch/$s_!aONG!,w_1272,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 1272w, https://substackcdn.com/image/fetch/$s_!aONG!,w_1456,c_limit,f_webp,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 1456w" sizes="100vw"><img src="https://substackcdn.com/image/fetch/$s_!aONG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png" data-attrs="{&quot;src&quot;:&quot;https://substack-post-media.s3.amazonaws.com/public/images/5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png&quot;,&quot;srcNoWatermark&quot;:null,&quot;fullscreen&quot;:null,&quot;imageSize&quot;:null,&quot;height&quot;:null,&quot;width&quot;:null,&quot;resizeWidth&quot;:null,&quot;bytes&quot;:null,&quot;alt&quot;:&quot;drawing&quot;,&quot;title&quot;:null,&quot;type&quot;:null,&quot;href&quot;:null,&quot;belowTheFold&quot;:false,&quot;topImage&quot;:true,&quot;internalRedirect&quot;:null,&quot;isProcessing&quot;:false,&quot;align&quot;:null,&quot;offset&quot;:false}" class="sizing-normal" alt="drawing" title="drawing" srcset="https://substackcdn.com/image/fetch/$s_!aONG!,w_424,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 424w, https://substackcdn.com/image/fetch/$s_!aONG!,w_848,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 848w, https://substackcdn.com/image/fetch/$s_!aONG!,w_1272,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 1272w, https://substackcdn.com/image/fetch/$s_!aONG!,w_1456,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F5445ef3c-9825-437e-a7ca-cbf073865f42_1024x768.png 1456w" sizes="100vw" fetchpriority="high"></picture><div></div></div></a><h2>EDA for checking, validation and cleaning</h2><p>Let&#8217;s get the obvious stuff out of the way first. Where a rough analysis plan is already in place, and some data has been assembled to support the analysis, a type of EDA serves to identify potential issues that might require remedial work before progressing. This is probably the most common type of exploratory analysis and is more closely linked to the goals of data cleaning than pure analysis and insight. This a big topic and I won&#8217;t attempt an exhaustive list here, but instead will describe a few of the most common tasks.</p><p>The most common check is for the correctness of column types. Depending on the data source, different issues might arise here, but you&#8217;ll be familiar with at least some of these. Integers incorrectly encoded as strings, strings encoded as dates, unordered categories encoded as integers. Sometimes a column that should be numeric has the very occasional string entry. There are as many causes as there are issues: perhaps you didn&#8217;t specify the correct schema when you read the data; or the data are encoded in ambiguous way that results in an inappropriate type; or maybe some earlier data manipulation induced an unintended problem.</p><p>We often check the prevalence of missing values and their dependence on other important features &#8212; usually because a lot of analysis methods do not handle missing values natively. Some columns may be totally unusable if they are mostly missing. Remedies here might include dropping or transform columns, imputing missing values, or choosing an algorithm that handles missingness out of the box.</p><p>Distribution, shift and relevance: it is important to inspect the distribution of values in each column &#8212; and consider whether these look how we&#8217;d expect (where we have an expectation). Do the distributions covary, especially with time (data are almost never consistent with stationarity with respect to time). Thinking about distributional shift is crucial for making decisions around which window of data is most important or relevant for addressing a specific question. It might expose or confirm trends and temporal patterns that downstream analysis needs to be aware of.</p><p>Measuring pairwise association provides some basic insights into how columns covary and might help reveal columns that are collinear or even identical that could be removed without detriment. It might help uncover some of the overall structure in the data or indicate collections of related columns. Pairwise association measures, like Pearson correlation coefficients, are overused in this context and are limited to only providing a linear and unconditional view of pairwise association. Nevertheless, a lot of insight can be gleaned from this type of analysis if you know what to look for.</p><p>These types of techniques provide a first look at the data and answer important questions about quality, formatting and overall dependence structure. These steps can usually be carried out by the data analyst without any external support, and are generally well supported with easy-to-use code wrappers. These are absolutely essential steps and it&#8217;s possible to learn quite a lot about the data by applying them and thinking carefully about the results. But it&#8217;s very important to recognise that there is a limit to how much can be understood with this type of analysis. There&#8217;s a lot more to EDA.</p><h2>grokking the data with EDA</h2><blockquote><p>When you claim to &#8220;grok&#8221; some knowledge or technique, you are asserting that you have not merely learned it in a detached instrumental way but that it has become part of you, part of your identity.</p></blockquote><p><a href="http://www.catb.org/~esr/jargon/html/G/grok.html?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">&#8216;grok&#8217;, </a><em><a href="http://www.catb.org/~esr/jargon/html/G/grok.html?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">The Jargon File</a></em></p><p>I&#8217;ve totally made up the heading, but I think it&#8217;s by far the most important role of EDA and is mostly what the rest of this post is about. There is a sort of myth of the data analyst as a robotic processor of data, who is detached and passive. The reality is completely the opposite, where better data analysis will always come from an analyst with a deep understanding of the data and the processes that generated it. EDA has a crucial role in turning a data frame from a contextless collection of bytes into a meaningful representation of a physical process, transitioning the analyst from the passive processor to an expert with deeply internalised understanding of an area. This end state is intangible and qualitative because it happens completely in your own head. Consequently, this part of the EDA will be a creative and personal journey that is supported by a continuing internal conversation that probes and revisits your understanding of the broader context.</p><h2>Building a data narrative</h2><p>The data frame you have in front of you for analysis is an incomplete and encoded representation of some real world process. Part of your role as an analyst is to solve problems and generate insights that respects the story of how the data were generated. For want of a better description, let&#8217;s call this story the data narrative. Part of this narrative might be the sequencing of events that lead to each data record coming into existence, part of it might be the data&#8217;s lineage in terms of the processing, joins and wrangling required to produce the data frame you end up with. If you are already an expert in the area you are working, this narrative may already be engrained in you. The data narrative completely frames the work you do, how you interpret every insight or modeled output, and most importantly, the credibility with which you can influence your audience.</p><p>The data narrative is a complex form of metadata and is almost never part of the data frame. If you are fortunate, your organisation might keep clear and accessible documentation and data dictionaries that will be a huge first step to piecing together this narrative. However, it is often more typical that analysts are neither domain experts nor well-provided with nice documentation. In this case, the narrative is something that must be synthesised through detective work, drawing on a combination of data analysis and the experience of domain experts. This is, of course, much easier said than done.</p><h2>The role of asking questions</h2><blockquote><p>Your goal during EDA is to develop an understanding of your data. The easiest way to do this is to use questions as tools to guide your investigation. When you ask a question, the question focuses your attention on a specific part of your dataset and helps you decide which graphs, models, or transformations to make.</p></blockquote><p><em><a href="https://r4ds.had.co.nz/exploratory-data-analysis.html?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">R for Data Science</a></em><a href="https://r4ds.had.co.nz/exploratory-data-analysis.html?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">, Hadley Wickham (2021)</a></p><p>EDA can&#8217;t happen in a computational vacuum. To do this well, we need to be alternating between interrogating the data and asking ourselves if what we find is consistent with our internal understanding of the data&#8217;s narrative. <em>Does what I see make sense to me? Would I feel comfortable to explain it to someone else?</em>#</p><p>In large organisations, you might also be speaking with a domain expert to help with this (if that person isn&#8217;t you), though they needn&#8217;t be an internal expert if the data come from outside the organisation. If you don&#8217;t yet have direct access to such a person, demand that you do &#8212; this person will supercharge your eventual analysis and will be often be the difference between success or failure of the entire project. In the beginning, take lots of time to let experts talk more broadly about the data, as they understand all of the salient dependencies, anomalies and gotchas that will save you a lot of time in the long run. Take time to use simple data analysis to carefully confirm what you&#8217;re told. The key here is not checking for correctness, but to grow your understanding of the data: it&#8217;s important to remember that it&#8217;s one thing to be told something about the data narrative, but it&#8217;s much more meaningful to use your own analysis to see it expressed in the data.</p><p>As your understanding deepens and the analysis progresses, you&#8217;ll continue to find new patterns and structure in the data. Keep revisiting your understanding of the data narrative, and check whether what you are seeing is consistent with that. As your understanding of the data narrative matures, the gaps will come into focus: consider creative ways to use the data or ask a relevant question to close the gap. The relationship between internalised data narrative and data exploration is a two-way street.</p><p>Take time to talk your findings over with another data scientist. The key here is to aim to communicate your understanding of the data narrative without getting too mired in the technical details of the data. The process of preparing a narrative that you can explain to a colleague will help to consolidate what you&#8217;ve learned and quickly expose gaps. A fresh set of eyes will nearly always raise further questions or force you to think of your data from a different perspective.</p><h2>Do we even have the right data?</h2><p>An important byproduct of the process of building a better data narrative is that your understanding of what the most important or relevant questions to ask will improve. A crucial question to keep revisiting is whether the data you have is sufficient to address the most important questions. Are there additional data sources that you draw upon to enrich or improve the analysis? Are the columns you already have in your data frame defined correctly, or should they really be specified differently? It&#8217;s typical that data sets are assembled before anyone knows exactly how the data will be used and it can pay dividends to constantly revisit the question of whether the data contains everything sufficient to answer a particular question. Many problems in data science are much more easily solved by gathering the right data (or more of it) than by using fancier techniques.</p><h2>Data hygiene and data splitting</h2><p>If you frequently fit predictive models, you&#8217;ll be aware of the risks of overfitting and the need to reserve partitions of the data to check that your findings truly generalise to unseen data. The same is true for the iterative types of EDA discussed in this article. The more detailed your analysis is, the higher the risk that insights gleaned in your EDA are false discoveries (aka statistical flukes). It is important that the confirmatory part of your analysis (prediction accuracy measurement or hypothesis testing) occurs on a different piece of data to your EDA.</p><p>A related problem that frequently arises in machine learning projects is where EDA is run as a preliminary step before creating training and test splits. If the result of EDA influences your model choices (it nearly always will if done properly), then you&#8217;ve potentially reduced your test set&#8217;s ability to measure true out-of-sample error. So before you do anything, create a hygienic environment for your EDA by splitting your data, so that you don&#8217;t accidentally leak information from your test set into your model.</p><h2>Creativity and the pitfalls of the data frame API</h2><blockquote><p>This was the tendency of jobs to be adapted to tools, rather than adapting tools to jobs.</p></blockquote><p><a href="https://en.wikipedia.org/wiki/Silvan_Tomkins?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">Silvan Tomkins</a>, <em>Computer Simulation of Personality: Frontier of Psychological Theory (1963)</em></p><p>Almost all data analysis now begins with some form of data frame &#8212; a tabular data format with columns of mixed types, where each row is a record. In Python and R, data analysis tooling has coalesced around the data frame object, which has been a huge convenience and productivity boost for the analyst. I wouldn&#8217;t for a second debate that this hasn&#8217;t been a positive development, but there is a risk here that EDA, because of the ease and uniformity of use of the tooling, becomes an exercise in applying boilerplate code. This creates a hidden creativity trap where the analysis can become narrowed by the range of uses supported by a particular set of tools. While such tools are extremely powerful when they are genuinely supporting you to develop your understanding of the data narrative, it&#8217;s important to avoid becoming too reliant on any single tool.</p><p>My experience is that it&#8217;s good to have familiarity with tooling at multiple levels of abstraction. Extremely high level interfaces to auto-generate certain types of exploratory analysis are very handy, and big time savers when they provide just what you need. However, the majority of EDA is more creative in nature and becoming expert with data manipulation tools like dplyr and pandas in combination with graphical tools like matplotlib and ggplot2 provides much finer control and fewer restrictions on your creativity.</p><p>The main point here is that exploratory data analysis can&#8217;t and shouldn&#8217;t be automated, because it is a process to support a human (you) to learn, and to do that well, there are few shortcuts.</p><h2>Closing thought: an analogy with critical reading and literary analysis</h2><p>Like all good blog posts, my thinking on EDA began on Twitter. In the process, <a href="https://x.com/kierisi?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">Jesse Mostipak</a> <a href="https://x.com/kierisi/status/1350812374165565440?s=20&amp;utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">made a great point</a> that teaching EDA effectively might share similarities <a href="https://guides.library.harvard.edu/sixreadinghabits?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">to the way students are taught to interrogate literary texts</a>. I&#8217;d never considered EDA this way, but the analogy resonated strongly with me, and much of my thinking in this post owes a lot to being sent off in this direction, &#128591; thanks Jesse! There&#8217;s a lot to unpack in the analogy, and I have no training in critical reading so I can&#8217;t speak with any authority on that subject. Nevertheless, it seems that interrogating a text has broad similar to EDA in the sense of being driven by the goal of developing a deep understanding of a text.</p><p><a href="https://fs.blog/how-to-read-a-book/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">This article by the Farnham Street blog</a> summarises four levels of critical reading, originally proposed by Mortimer Adler. The final most analytical form of interrogation, called synotopical or comparative reading, hits on some of the themes I&#8217;ve discussed already:</p><blockquote><p>This task is undertaken by identifying relevant passages, translating the terminology, framing and ordering the questions that need answering, defining the issues, and having a conversation with the responses.</p><p>The goal is not to achieve an overall understanding of any particular book, but rather to understand the subject and develop a deep fluency.</p><p>This is all about identifying and filling in your knowledge gaps.</p></blockquote><p><em><a href="https://fs.blog/how-to-read-a-book/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">Farnham Street blog</a></em><a href="https://fs.blog/how-to-read-a-book/?utm_source=alastair&amp;utm_medium=email&amp;utm_campaign=exploratory-data-analysis-whats-the-point">, How to Read a Book: The Ultimate Guide by Mortimer Adler</a></p><p>Sounds familiar doesn&#8217;t it? Asking questions (of yourself), contextualising and framing, closing knowledge gaps and achieving fluency are all key parts of a successful EDA. What I&#8217;m most excited about here is that we can draw on the analytical framework of an existing and well-established discipline, as scaffolding to think about how we can make improvements to the way we teach and practice EDA. Again, full credit to Jesse for this idea.</p>]]></content:encoded></item></channel></rss>