<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Elezea - RSS Feed</title><description>Rian van der Merwe&apos;s blog</description><link>https://elezea.com/</link><item><title>I Left Port 22 Open for 54 Days: An SSH Honeypot Study</title><link>https://elezea.com/2026/05/i-left-port-22-open-for-54-days-an-ssh-honeypot-study/</link><guid isPermaLink="true">https://elezea.com/2026/05/i-left-port-22-open-for-54-days-an-ssh-honeypot-study/</guid><description>Exposing SSH to the internet reveals how ubiquitous automated probing is, with login attempts arriving within seconds of port exposure.</description><pubDate>Sun, 10 May 2026 00:16:16 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://arman-bd.hashnode.dev/i-left-port-22-open-on-the-internet-for-54-days-here-s-who-showed-up&quot;&gt;This post&lt;/a&gt; is a fascinating look at how botnets actually work. I don’t want to spoil the takeaways so I’ll just quote this (but you should read the whole thing):&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Your server isn&apos;t special. Nobody is &amp;quot;targeting&amp;quot; it. Every IP address on the internet is being continuously probed by automated systems. Within seconds of exposing port 22, you will receive login attempts. This isn&apos;t a question of &amp;quot;if&amp;quot; but &amp;quot;when&amp;quot; — and the answer to &amp;quot;when&amp;quot; is &amp;quot;immediately.&amp;quot;&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Discrobble v1.0.2 — Free on the App Store</title><link>https://elezea.com/2026/05/discrobble-v1-0-2/</link><guid isPermaLink="true">https://elezea.com/2026/05/discrobble-v1-0-2/</guid><description>My first iPhone app is live! Discrobble is now on the [App Store](https://apps.apple.com/us/app/id6761305573), free. It connects to your Discogs collection and your Last.fm account so you can track plays from your vinyl and CDs…</description><pubDate>Sat, 09 May 2026 20:05:48 GMT</pubDate><content:encoded>&lt;p&gt;My first iPhone app is live! Discrobble is now on the &lt;a href=&quot;https://apps.apple.com/us/app/id6761305573&quot;&gt;App Store&lt;/a&gt;, free. It connects to your &lt;a href=&quot;https://www.discogs.com/&quot;&gt;Discogs&lt;/a&gt; collection and your &lt;a href=&quot;https://www.last.fm/&quot;&gt;Last.fm&lt;/a&gt; account so you can track your physical music listening in two taps: pick an album, hit &amp;quot;Scrobble,&amp;quot; and the tracks land in your &lt;a href=&quot;http://Last.fm&quot;&gt;Last.fm&lt;/a&gt; history. There&apos;s more on the &lt;a href=&quot;https://elezea.com/discrobble/&quot;&gt;product page&lt;/a&gt; about how it works.&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Song of the Day: May 6, 2026</title><link>https://elezea.com/2026/05/song-of-the-day-may-6-2026/</link><guid isPermaLink="true">https://elezea.com/2026/05/song-of-the-day-may-6-2026/</guid><description>All over my Instagram Reels for some reason — and it&apos;s such a vibe I can&apos;t get enough of it.</description><pubDate>Thu, 07 May 2026 02:47:35 GMT</pubDate><content:encoded>&lt;p&gt;This song is all over my Instagram Reels for some reason and it is &lt;em&gt;such&lt;/em&gt; a vibe I can&apos;t get enough of it.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;https://open.spotify.com/track/3Ggrf13afYb41oxbnpafPR?si=2c597ad582e44a84&quot;&gt;▶ Listen on Spotify&lt;/a&gt;&lt;/p&gt;&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>discogs-mcp v3.3.0 — Background sync, instant search</title><link>https://elezea.com/2026/05/discogs-mcp-v3-3-0/</link><guid isPermaLink="true">https://elezea.com/2026/05/discogs-mcp-v3-3-0/</guid><description>The first search of the day is now instant. `discogs-mcp` pre-fetches your collection in the background every hour and keeps it in a snapshot, so…</description><pubDate>Tue, 05 May 2026 01:13:29 GMT</pubDate><content:encoded>&lt;p&gt;The first search of the day is now instant. &lt;code&gt;discogs-mcp&lt;/code&gt; pre-fetches your collection in the background every hour and keeps it in a snapshot, so &lt;code&gt;search_collection&lt;/code&gt; doesn&apos;t have to paginate the Discogs API from cold any more.&lt;/p&gt;
&lt;p&gt;The server also tells your LLM client how to navigate it — every tool response ends with a &amp;quot;Next steps&amp;quot; block listing the most likely follow-up calls and the exact arguments to use, so chained queries like &amp;quot;find me a mellow jazz album, then expand the top hit&amp;quot; don&apos;t make the model guess.&lt;/p&gt;
&lt;p&gt;And if you&apos;ve been putting off deploying your own copy, there&apos;s now a Deploy to Cloudflare button in the README — one click, three secrets, done.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Hourly background sync keeps your collection snapshot fresh. Add or remove a record on Discogs and it&apos;s visible to search within an hour, automatically.&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;refresh_collection&lt;/code&gt; tool forces an immediate snapshot refresh — useful when you&apos;ve just bought an album and want it visible to search right now.&lt;/li&gt;
&lt;li&gt;Server-level &lt;code&gt;instructions&lt;/code&gt; and per-tool &amp;quot;Next steps&amp;quot; breadcrumbs make the server self-navigating for any LLM client. The instructions name a recommended path (&lt;code&gt;search_collection&lt;/code&gt; → &lt;code&gt;get_release&lt;/code&gt; → mutations); each tool response ends with the most likely follow-up calls, with real values templated in (&lt;code&gt;get_release(release_id=28861354)&lt;/code&gt;, not &lt;code&gt;release_id=&amp;lt;ID&amp;gt;&lt;/code&gt;). Inspired by &lt;a href=&quot;https://taoofmac.com/space/blog/2026/04/29/2341&quot;&gt;Rui Carmo&apos;s MCP server post&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;One-click self-hosting via the Deploy to Cloudflare button in the README. Cloudflare provisions the KV namespaces, Durable Object, cron, and prompts for the secrets — no &lt;code&gt;wrangler kv namespace create&lt;/code&gt; needed, and pushes to your fork redeploy automatically via Workers Builds.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;First &lt;code&gt;search_collection&lt;/code&gt; call after a cold cache no longer times out. Previously this could take 30 seconds to two minutes on a 1,500-item collection, often longer than the MCP request timeout. It&apos;s now sub-second.&lt;/li&gt;
&lt;li&gt;Mood queries (&amp;quot;mellow Sunday morning&amp;quot;, &amp;quot;road trip music&amp;quot;) respond just as fast as keyword queries — they used to pay the same pagination cost as everything else.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New &lt;code&gt;syncCollection&lt;/code&gt; module with per-page retry, resumable progress, and atomic snapshot swap so readers never see partial state.&lt;/li&gt;
&lt;li&gt;Cron runs hourly with a probe path: one API call to compare count + page-1 instance IDs against the snapshot. Full repaginate only when something changed. Steady-state cron tick now costs 1 Discogs request instead of 16.&lt;/li&gt;
&lt;li&gt;Self-healing across MCP request timeouts: if a sync stalls partway through, the next call resumes from where it left off rather than restarting.&lt;/li&gt;
&lt;li&gt;Dropped the &lt;code&gt;MCP_LOGS&lt;/code&gt; KV binding. Sync outcomes now structured-log to the Workers runtime so Cloudflare Observability ingests them — one fewer namespace for self-hosters to create.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Why Did Hollywood Stop Making Dramas?</title><link>https://elezea.com/2026/05/why-did-hollywood-stop-making-dramas/</link><guid isPermaLink="true">https://elezea.com/2026/05/why-did-hollywood-stop-making-dramas/</guid><description>Hollywood&apos;s shift away from dramas toward action and horror may stem from how genre thrills age better than character-driven stories that depend on…</description><pubDate>Fri, 01 May 2026 22:21:18 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://www.statsignificant.com/p/why-did-hollywood-stop-making-dramas&quot;&gt;I guess this shows just how old I am&lt;/a&gt; because I loved every single one of the “Oscar-bait” movies in this list (I do agree on TCM though)...&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;When I was a kid, I would watch Turner Classic Movies and try to appreciate films from the 1940s, only to find the exercise strangely difficult. I could admire them—in theory—but I struggled to experience these stories the way their original audiences did.&lt;/p&gt;
&lt;p&gt;I feel similarly about many Oscar-bait dramas of the 1990s, including but not limited to: &lt;em&gt;Chocolat&lt;/em&gt;, &lt;em&gt;American Beauty&lt;/em&gt;, &lt;em&gt;Shakespeare in Love&lt;/em&gt;, &lt;em&gt;Scent of a Woman&lt;/em&gt;, &lt;em&gt;The English Patient&lt;/em&gt;, and &lt;em&gt;Life Is Beautiful&lt;/em&gt;. I simply don’t understand what contemporary audiences saw in these films.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;That aside, as usual Daniel makes an interesting larger point, about why we don’t see as many dramas as we used to:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Action and horror, meanwhile, have visceral elements that translate across generations: big dinosaurs, jump scares, campy set pieces, and other straightforward pleasures. The first ten minutes of &lt;em&gt;Raiders of the Lost Ark&lt;/em&gt; are timeless and feature almost no dialogue.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>lastfm-mcp v2.4.0 — Top tracks and 8K fewer lines</title><link>https://elezea.com/2026/04/lastfm-mcp-v2-4-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/lastfm-mcp-v2-4-0/</guid><description>The big shifts in this release: three new tools, a glassmorphism-redesigned landing page, timezone-aware day boundaries on `get_recent_tracks`, and a…</description><pubDate>Thu, 30 Apr 2026 20:09:55 GMT</pubDate><content:encoded>&lt;p&gt;The big shifts in this release: three new tools, a glassmorphism-redesigned landing page, timezone-aware day boundaries on &lt;code&gt;get_recent_tracks&lt;/code&gt;, and a 8,300-line cull of the original session-based worker now that the OAuth path has been the only one in production for a while.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Three new tools.&lt;/strong&gt; &lt;code&gt;get_top_tracks&lt;/code&gt; fills the obvious symmetry gap with the existing &lt;code&gt;get_top_artists&lt;/code&gt; and &lt;code&gt;get_top_albums&lt;/code&gt;. &lt;code&gt;get_artist_top_tracks&lt;/code&gt; and &lt;code&gt;get_artist_top_albums&lt;/code&gt; surface an artist&apos;s globally most-played catalog — useful for &amp;quot;what&apos;s the canonical record by X&amp;quot; questions.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Date-aware &lt;code&gt;get_recent_tracks&lt;/code&gt;.&lt;/strong&gt; New &lt;code&gt;date&lt;/code&gt; param accepts a &lt;code&gt;YYYY-MM-DD&lt;/code&gt; calendar date plus a &lt;code&gt;timezone&lt;/code&gt; (IANA name, e.g. &lt;code&gt;America/New_York&lt;/code&gt;) and the server computes the correct UTC day boundaries. Way better than juggling &lt;code&gt;from&lt;/code&gt;/&lt;code&gt;to&lt;/code&gt; Unix timestamps for &amp;quot;what did I listen to yesterday&amp;quot; queries. The response also echoes the queried range back so an LLM can self-verify it asked the right question.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesigned landing page&lt;/strong&gt; at &lt;a href=&quot;https://lastfm-mcp.com&quot;&gt;lastfm-mcp.com&lt;/a&gt; — glassmorphism, animated waves, glow effects.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;get_album_info&lt;/code&gt; no longer renders &lt;code&gt;[object Object]&lt;/code&gt; when &lt;a href=&quot;http://Last.fm&quot;&gt;Last.fm&lt;/a&gt; returns the album artist as an object instead of a string. Latent bug, fixed via a &lt;code&gt;formatArtist&lt;/code&gt; helper that handles both shapes.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Deleted the legacy worker.&lt;/strong&gt; Removed &lt;code&gt;src/index.ts&lt;/code&gt; plus the homemade JSON-RPC dispatch layer in &lt;code&gt;src/protocol/&lt;/code&gt; and the SSE transport in &lt;code&gt;src/transport/&lt;/code&gt;. The OAuth worker (&lt;code&gt;src/index-oauth.ts&lt;/code&gt;) has been the only production deployment for months; the legacy &lt;code&gt;[env.legacy]&lt;/code&gt; block in &lt;code&gt;wrangler.toml&lt;/code&gt; was never deployed to Cloudflare. Net diff: &lt;strong&gt;−8,293 lines, 0 added.&lt;/strong&gt; Test suite went from 376 tests / 5 failing → 167 tests / 0 failing.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dropped dead deps:&lt;/strong&gt; &lt;code&gt;crypto-js&lt;/code&gt;, &lt;code&gt;@types/crypto-js&lt;/code&gt;, &lt;code&gt;oauth-1.0a&lt;/code&gt; — zero imports.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removed dead throttle.&lt;/strong&gt; &lt;code&gt;LastfmClient.throttleRequest&lt;/code&gt; was per-request (clients are instantiated per-request in the OAuth worker), so it never observed a previous request — it did nothing while implying rate-limit safety. Existing 429-aware retry handles rate limits correctly.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Dynamic tool catalog.&lt;/strong&gt; The &lt;code&gt;lastfm_auth_status&lt;/code&gt; tool list lives in one place now (&lt;code&gt;src/mcp/tools/catalog.ts&lt;/code&gt;) instead of being hardcoded in three.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Output isn’t design</title><link>https://elezea.com/2026/04/output-isnt-design/</link><guid isPermaLink="true">https://elezea.com/2026/04/output-isnt-design/</guid><description>Design is fundamentally about understanding a problem&apos;s context and constraints, not simply creating visual output.</description><pubDate>Thu, 30 Apr 2026 18:14:58 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;The hard part of design is rarely generating the form. It is understanding the problem well enough to know what and how something should exist at all. There is use and place for these tools, but tools are not the design process.&lt;/p&gt;
&lt;p&gt;Christopher Alexander came closer than anyone to naming this clearly. In &lt;em&gt;&lt;a href=&quot;https://amzn.to/4eTct5C&quot;&gt;Notes on the Synthesis of Form&lt;/a&gt;&lt;/em&gt;, he describes design as the search for a good fit between a form and its context. Context, in his sense, is not a background condition. It is the full set of forces that make a problem what it is: human needs, technical constraints, conflicting requirements, habits, edge cases, and relationships that are easy to miss until you spend time with them. Bad design appears where those forces remain unresolved. Good design appears where those misfits have been worked through carefully.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— Karri Saarinen, &lt;a href=&quot;https://x.com/karrisaarinen/status/2045257582470983691&quot;&gt;Output isn’t design&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>tldl v2.4.0 — Broadsheet redesign</title><link>https://elezea.com/2026/04/tldl-v2-4-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/tldl-v2-4-0/</guid><description>TL;DL has a new look. Inspired by classic broadsheet newspapers, the redesigned site puts episode summaries in a layout that&apos;s calmer to read and easier to…</description><pubDate>Wed, 29 Apr 2026 21:25:26 GMT</pubDate><content:encoded>&lt;p&gt;TL;DL has a new look. Inspired by classic broadsheet newspapers, the redesigned site puts episode summaries in a layout that&apos;s calmer to read and easier to scan — with proper typography, a featured &amp;quot;lead&amp;quot; episode, and a cleaner detail page for every summary.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Broadsheet-style homepage.&lt;/strong&gt; A featured lead episode at the top, then the rest of the week&apos;s episodes laid out as numbered index entries. Episode count grows? Pagination kicks in at 20 per page.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Redesigned episode pages.&lt;/strong&gt; New typography (Fraunces + Inter Tight + JetBrains Mono), a generated deck and pull quote on every episode, links out to the podcast&apos;s website and Apple Podcasts, and a &amp;quot;More from this podcast&amp;quot; section.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Search and tag browsing.&lt;/strong&gt; Search the homepage with &lt;code&gt;?q=...&lt;/code&gt;, click any tag to see every episode with that tag, or browse the full tag and podcast directories.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Polished mobile and tablet layouts.&lt;/strong&gt; Episode rows stack their metadata neatly on smaller screens. Tags wrap onto their own row. Pull quotes tighten up.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Subscribe, preferences, and request flows live in the new design.&lt;/strong&gt; No more jarring jump from the new site into the old forms.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Restored social previews.&lt;/strong&gt; Favicon, Open Graph, and Twitter Card tags are back, so links shared on social and in chat apps look right again.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;iPad portrait layout&lt;/strong&gt; no longer cuts off episode titles — the index now collapses to the simpler mobile-style row at tablet widths too.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Masthead date&lt;/strong&gt; shows the correct day in Pacific time instead of drifting based on the reader&apos;s timezone.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Episode summaries&lt;/strong&gt; no longer show a duplicate title at the top — the redundant first heading is now stripped automatically.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Editorial metadata&lt;/strong&gt; (deck and pull quote) generation now retries cleanly on transient failures instead of giving up on the first error.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>How to stay relevant when the PM role keeps rewriting itself</title><link>https://elezea.com/2026/04/pm-role-keeps-rewriting-itself/</link><guid isPermaLink="true">https://elezea.com/2026/04/pm-role-keeps-rewriting-itself/</guid><description>Melissa Perri on why PMs should stop measuring themselves by tickets and docs, and start measuring decisions changed and outcomes shipped.</description><pubDate>Wed, 29 Apr 2026 00:25:50 GMT</pubDate><content:encoded>&lt;p&gt;Melissa Perri &lt;a href=&quot;https://productinstitute.kit.com/posts/how-to-stay-relevant-when-the-pm-role-keeps-rewriting-itself&quot;&gt;chimes in on how AI is changing the product role&lt;/a&gt;, and makes the case for measuring PMs by decisions changed and outcomes shipped, not by tickets written and docs generated:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;If you are a PM, stop measuring your productivity by how many tickets you wrote, how many pages of documentation you spun up, or how fast you closed the loop on the last sprint. That work is going to keep getting easier.&lt;/p&gt;
&lt;p&gt;Measure your productivity by how often you changed a decision that mattered, how often you saw around a corner, how often a senior leader walked out of a room thinking differently because of something you said. How often your shipped features translate into real customer outcomes is what matters.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Everything I read is saying the same thing right now: judgment, customer understanding, and the ability to change a senior leader&apos;s mind in a room are the skills that AI can&apos;t touch. I&apos;m not disagreeing necessarily, but I do think that narrative is missing a big &lt;em&gt;new&lt;/em&gt; skill that is needed. I wrote about this in &lt;a href=&quot;https://elezea.com/2026/04/what-actually-changed-about-being-a-pm/&quot;&gt;What actually changed about being a PM&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I was talking to my wife the other day about what I’m doing, and she asked the obvious question: “Why are you automating your job away?” My answer: the people who automate their own jobs away are the ones who become more valuable, because the craft is now in orchestration — setting up the layers so the AI does the right thing.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I also continue to think about this quote from &lt;a href=&quot;https://robonomics.substack.com/p/org-design-in-the-age-of-ai&quot;&gt;Org Design in the Age of AI&lt;/a&gt; and how the focus is shifting from &amp;quot;information movers&amp;quot; to builders:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The old PM spent most of their energy making ideas legible to other people. The new PM validates directly — prototyping, running data analyses, generating first-pass implementations. [...] The managers who thrive will be the ones whose real contribution was always judgment, coaching, and navigating ambiguity — not routing information.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Product Roadmaps: How the Best Product Teams Plan for Uncertainty</title><link>https://elezea.com/2026/04/product-roadmaps-how-the-best-product-teams-plan-for-uncertainty/</link><guid isPermaLink="true">https://elezea.com/2026/04/product-roadmaps-how-the-best-product-teams-plan-for-uncertainty/</guid><description>The best product roadmaps adapt to uncertainty by shifting from detailed features to broader opportunities and outcomes as you plan further ahead.</description><pubDate>Tue, 28 Apr 2026 22:32:05 GMT</pubDate><content:encoded>&lt;p&gt;I&apos;m &lt;a href=&quot;https://elezea.com/2024/02/why-using-a-now-next-later-roadmap-might-be-right-for-you/&quot;&gt;a big fan of Now/Next/Later roadmaps&lt;/a&gt;, and I think it adapts particularly well to an AI-assisted world, so I was curious to read &lt;a href=&quot;https://www.producttalk.org/product-roadmaps/&quot;&gt;Teresa&apos;s Take on different roadmap models&lt;/a&gt;. It&apos;s a fun trip through different prioritization frameworks, and I do like her reframing of the Now/Next/Later approach:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Here&apos;s what I&apos;ve seen work best: Take the Now Next Later format, but instead of filling every column with features at different levels of detail, change the &lt;em&gt;type&lt;/em&gt; of content as you move across columns. [...]&lt;/p&gt;
&lt;p&gt;Specifically, I list solutions in the Now column, &lt;a href=&quot;https://www.producttalk.org/sourcing-opportunities/&quot;&gt;opportunities&lt;/a&gt; in the Next column, and &lt;a href=&quot;https://www.producttalk.org/shifting-from-outputs-to-outcomes/&quot;&gt;outcomes&lt;/a&gt; in the Later column.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Deezer: AI-generated tracks now represent 44% of all new uploaded music</title><link>https://elezea.com/2026/04/deezer-ai-generated-tracks-now-represent-44-of-all-new-uploaded-music/</link><guid isPermaLink="true">https://elezea.com/2026/04/deezer-ai-generated-tracks-now-represent-44-of-all-new-uploaded-music/</guid><description>AI-generated music now dominates new uploads on Deezer but barely registers with listeners, suggesting artificial tracks struggle to gain genuine audience…</description><pubDate>Sat, 25 Apr 2026 23:40:08 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://newsroom-deezer.com/2026/04/ai-generated-tracks-represent-44-of-new-uploaded-music/&quot;&gt;This is characteristically dry press release language&lt;/a&gt;, but the stats are interesting:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Deezer, the global music experiences platform, is now receiving almost 75,000 AI-generated tracks per day, representing roughly 44% of the daily uploads. This amounts to more than 2 Million AI-generated tracks uploaded per month. Thanks to Deezer&apos;s industry unique measures, consumption of AI-generated music on the platform is still very low, between 1-3% of the total streams. In addition, a majority (85%) of these streams are detected as fraudulent and are demonetized by Deezer.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;I’m simultaneously surprised (but not, because grifters) that the amount of uploads is that high, and surprised (but not, because music lovers) that it’s generally a very unsuccessful way to make money. My continuing refrain will be that let’s use AI for the things that it’s good at, and leave the really important stuff (like art) to humans.&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>The Slide</title><link>https://elezea.com/2026/04/the-slide/</link><guid isPermaLink="true">https://elezea.com/2026/04/the-slide/</guid><description>New managers must learn to delegate significant projects and trust their teams, as mastering this skill is fundamental to effective leadership.</description><pubDate>Sat, 25 Apr 2026 23:34:55 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;The single biggest challenge for new managers — giving up the responsibility for the product… for the building. Learning how to give accountability for projects of significance to the team. It&apos;s an essential set of complex skills involving trust, communication, and, most importantly, judgment. Failure to understand delegation is failing to be a leader. Senior or not.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;— Michael Lopp, &lt;a href=&quot;https://randsinrepose.com/archives/the-slide/&quot;&gt;The Slide&lt;/a&gt;&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>AI Prototyping Is Changing How We Build Products at Uber</title><link>https://elezea.com/2026/04/ai-prototyping-is-changing-how-we-build-products-at-uber/</link><guid isPermaLink="true">https://elezea.com/2026/04/ai-prototyping-is-changing-how-we-build-products-at-uber/</guid><description>As AI makes prototyping faster and cheaper, product requirement documents must evolve from defining ideas to capturing intent, tradeoffs, and decisions.</description><pubDate>Fri, 24 Apr 2026 15:26:01 GMT</pubDate><content:encoded>&lt;p&gt;There is no doubt that &lt;a href=&quot;https://www.uber.com/us/en/blog/ai-prototyping/&quot;&gt;this post&lt;/a&gt; was at least 80% written by AI but I’m not even super mad about it because that is just the way of the world now, and the summary it generated from how Uber works is actually legit interesting:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;A prototype without a PRD can drift away from the problem the team intends to solve. A PRD without a prototype can remain abstract, leaving room for inconsistent interpretations. [...] If going from idea to prototype is now fast and cheap, the PRD can no longer be the primary place where ideas are defined. Its value increasingly lies in capturing intent, tradeoffs, success metrics, and decisions.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;The PRD as an artifact is in the spotlight right now in a way that I think is really healthy. Should it remain but change its JTBD? Should it be &lt;a href=&quot;https://elezea.com/2026/04/evals-are-the-new-prd/&quot;&gt;an eval instead&lt;/a&gt;? Who knows. Let’s figure it out together...&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>tldl v2.3.0 — Email subscriptions</title><link>https://elezea.com/2026/04/tldl-v2-3-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/tldl-v2-3-0/</guid><description>Per-podcast email subscriptions for tldl. Pick the shows you care about at [/subscribe](https://tldl-pod.com/subscribe) and the summary lands in your inbox as…</description><pubDate>Wed, 22 Apr 2026 23:11:37 GMT</pubDate><content:encoded>&lt;p&gt;Per-podcast email subscriptions for tldl. Pick the shows you care about at &lt;a href=&quot;https://tldl-pod.com/subscribe&quot;&gt;/subscribe&lt;/a&gt; and the summary lands in your inbox as soon as a new episode is out.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Per-podcast email subscriptions.&lt;/strong&gt; Sign up at &lt;code&gt;/subscribe&lt;/code&gt;, confirm via double-opt-in, and get an HTML summary email (TL;D&lt;strong&gt;L&lt;/strong&gt; header, red CTA, summary body inline) every time a monitored podcast publishes a new episode.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Preferences management.&lt;/strong&gt; Returning subscribers can update which podcasts they&apos;re subscribed to via a signed &lt;code&gt;/preferences/manage&lt;/code&gt; link delivered by email. One-click unsubscribe per podcast, or unsubscribe from everything.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;From address on &lt;a href=&quot;http://tldl-pod.com&quot;&gt;tldl-pod.com&lt;/a&gt;.&lt;/strong&gt; Emails now come from &lt;code&gt;&amp;quot;TL;DL&amp;quot; &amp;lt;summaries@tldl-pod.com&amp;gt;&lt;/code&gt; with DKIM and SPF aligned on the &lt;a href=&quot;http://tldl-pod.com&quot;&gt;tldl-pod.com&lt;/a&gt; domain.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;New D1 database (&lt;code&gt;tldl-subscribers&lt;/code&gt;) for subscribers, subscriptions, and pending confirmations.&lt;/li&gt;
&lt;li&gt;Postmark broadcast stream (&lt;code&gt;episode-summaries&lt;/code&gt;) with HMAC-SHA-256 signed manage/unsubscribe tokens.&lt;/li&gt;
&lt;li&gt;Zone-level rate limiting on &lt;code&gt;POST /subscribe&lt;/code&gt; and &lt;code&gt;POST /preferences&lt;/code&gt; (5 req / 10 min per IP + colo, 1-hour block).&lt;/li&gt;
&lt;li&gt;Double-opt-in flow with throttled per-email pending confirmations.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Org Design in the Age of AI</title><link>https://elezea.com/2026/04/org-design-in-the-age-of-ai/</link><guid isPermaLink="true">https://elezea.com/2026/04/org-design-in-the-age-of-ai/</guid><description>Companies must rethink organizational design from scratch to leverage AI&apos;s potential rather than merely using it to optimize existing structures.</description><pubDate>Wed, 22 Apr 2026 00:15:59 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://robonomics.substack.com/p/org-design-in-the-age-of-ai&quot;&gt;This post &lt;/a&gt; on org design really resonated.&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;Most companies today are using AI the way you&apos;d use a faster horse — to make the existing structure run a little better. The companies that pull ahead will be the ones willing to ask a harder question: what would we build if we were designing this organization from scratch, today, knowing what AI can do?&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;We have to seriously rethink the SDLC, design it from scratch in the context of how &lt;em&gt;our own organizations&lt;/em&gt; work. It’s not about a global “right” process any more. The question now becomes “How can the humans in our team, at our company, at this point in time, work best together to serve our customers?”&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>The peril of laziness lost</title><link>https://elezea.com/2026/04/the-peril-of-laziness-lost-2/</link><guid isPermaLink="true">https://elezea.com/2026/04/the-peril-of-laziness-lost-2/</guid><description>AI systems lack the human laziness that drives engineers to build elegant, efficient solutions, risking bloated systems without constraints on complexity.</description><pubDate>Tue, 21 Apr 2026 23:31:35 GMT</pubDate><content:encoded>&lt;p&gt;Oh, &lt;a href=&quot;https://bcantrill.dtrace.org/2026/04/12/the-peril-of-laziness-lost/&quot;&gt;this is very good&lt;/a&gt;. On the classic take that the core characteristic of outstanding engineers is “laziness”:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;The problem is that LLMs inherently &lt;strong&gt;lack the virtue of laziness&lt;/strong&gt;. Work costs nothing to an LLM. LLMs do not feel a need to optimize for their own (or anyone&apos;s) future time, and will happily dump more and more onto a layercake of garbage. Left unchecked, LLMs will make systems larger, not better — appealing to perverse vanity metrics, perhaps, but at the cost of everything that matters. As such, LLMs highlight how essential our human laziness is: our finite time &lt;strong&gt;forces&lt;/strong&gt; us to develop crisp abstractions in part because we don&apos;t want to waste our (human!) time on the consequences of clunky ones.&lt;/p&gt;
&lt;p&gt;The best engineering is always borne of constraints, and the constraint of our time places limits on the cognitive load of the system that we&apos;re willing to accept. This is what drives us to make the system &lt;em&gt;simpler&lt;/em&gt;, despite its essential complexity.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is exactly why &lt;a href=&quot;https://elezea.com/2026/04/what-actually-changed-about-being-a-pm/&quot;&gt;I practice Fear-Driven Development&lt;/a&gt;, and why everything I do in code includes multiple versions of asking Claude Code “do we need this?” and “is this adding bloat?”&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>Two small new things on the blog</title><link>https://elezea.com/2026/04/two-small-new-things-on-the-blog/</link><guid isPermaLink="true">https://elezea.com/2026/04/two-small-new-things-on-the-blog/</guid><description>Two small improvements the WordPress migration unlocked: auto-posted side-project releases and per-content-type RSS feeds.</description><pubDate>Sun, 19 Apr 2026 20:29:02 GMT</pubDate><content:encoded>&lt;p&gt;Now that &lt;a href=&quot;https://elezea.com/2026/04/free-from-wordpress/&quot;&gt;the site is off WordPress&lt;/a&gt;, I can finally start doing a bunch of things I&apos;ve wanted to do for years. Here are the first two:&lt;/p&gt;
&lt;h2&gt;1. Auto-posting side-project releases&lt;/h2&gt;
&lt;p&gt;When I tag a GitHub release on one of my side projects — &lt;a href=&quot;https://tldl-pod.com/&quot;&gt;tldl&lt;/a&gt;, &lt;a href=&quot;https://listentomore.com/&quot;&gt;listentomore&lt;/a&gt;, &lt;a href=&quot;https://github.com/rianvdm/discogs-mcp&quot;&gt;discogs-mcp&lt;/a&gt;, and others — a post now appears on this site automatically. Title, tagline, release notes, and a link back to the GitHub release.&lt;/p&gt;
&lt;p&gt;I ship a lot of small improvements, and historically none of that work was visible anywhere except the GitHub tab nobody reads. Now it shows up on the blog as a first-class content type.&lt;/p&gt;
&lt;h2&gt;2. Per-content-type RSS feeds&lt;/h2&gt;
&lt;p&gt;If you only want the long essays and not my link posts or quotes about other people&apos;s writing (or the release notes, for that matter), you can now subscribe to just those. There are six feeds:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;a href=&quot;https://elezea.com/feed.xml&quot;&gt;Everything&lt;/a&gt; — the full firehose&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elezea.com/feed/standard.xml&quot;&gt;Essays only&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elezea.com/feed/link.xml&quot;&gt;Link posts&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elezea.com/feed/quote.xml&quot;&gt;Quotes&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elezea.com/feed/release.xml&quot;&gt;Releases&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://elezea.com/feed/summary.xml&quot;&gt;Summary&lt;/a&gt; — titles and descriptions only&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I&apos;ve also updated &lt;a href=&quot;https://elezea.com/subscribe/&quot;&gt;/subscribe&lt;/a&gt; with the full list. And a reminder that RSS is very much alive and well. Get started with &lt;a href=&quot;https://aboutfeeds.com/&quot;&gt;What is a Feed?&lt;/a&gt;.&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>discogs-mcp v3.2.0 — Catalog-wide search</title><link>https://elezea.com/2026/04/discogs-mcp-v3-2-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/discogs-mcp-v3-2-0/</guid><description>Adds `search_discogs` for catalog-wide queries beyond your own collection, plus two real-world accuracy fixes: owned-marker correctness across pressings, and…</description><pubDate>Sun, 19 Apr 2026 19:58:22 GMT</pubDate><content:encoded>&lt;p&gt;Adds &lt;code&gt;search_discogs&lt;/code&gt; for catalog-wide queries beyond your own collection, plus two real-world accuracy fixes: owned-marker correctness across pressings, and exact genre/style matching.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;search_discogs&lt;/code&gt; tool&lt;/strong&gt; — search the full Discogs catalog, not just your collection. Default type is &lt;code&gt;master&lt;/code&gt; so album lookups don&apos;t return duplicate pressings. Results get a ✓ marker when you already own them.&lt;/li&gt;
&lt;li&gt;Tool lists in README, marketing page, &lt;code&gt;auth_status&lt;/code&gt;, and &lt;code&gt;server_info&lt;/code&gt; refreshed with grouped categories (Search, Collection, Folders, Custom Fields, Diagnostics).&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Exact genre/style matching&lt;/strong&gt; (&lt;a href=&quot;https://github.com/rianvdm/discogs-mcp/issues/17&quot;&gt;#17&lt;/a&gt;) — substring matching caused &lt;code&gt;music&lt;/code&gt; to match &lt;code&gt;Non-Music&lt;/code&gt;, flipping the filter to OR mode and returning unrelated releases. Now uses exact equality per release.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Release-result owned-marker is now strict on &lt;code&gt;release.id&lt;/code&gt;.&lt;/strong&gt; Previously, owning one pressing of an album marked every other pressing as owned too, because &lt;code&gt;isOwned()&lt;/code&gt; matched on &lt;code&gt;master_id&lt;/code&gt; first. Caught by real-world dogfood on &amp;quot;Christian Scott Stretch Music&amp;quot;.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Root &lt;code&gt;CLAUDE.md&lt;/code&gt; for Claude Code auto-discovery; removed stale &lt;code&gt;development/CLAUDE.md&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;GitHub release workflow auto-cross-posts to &lt;a href=&quot;http://elezea.com&quot;&gt;elezea.com&lt;/a&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>tldl v2.2.0 — RSS-first monitoring and audio-URL dedup</title><link>https://elezea.com/2026/04/tldl-v2-2-0/</link><guid isPermaLink="true">https://elezea.com/2026/04/tldl-v2-2-0/</guid><description>Two meaningful changes since v2.1.0. tldl now detects new podcast episodes directly from RSS feeds with conditional GETs instead of relying on Podcast Index…</description><pubDate>Sun, 19 Apr 2026 18:59:50 GMT</pubDate><content:encoded>&lt;p&gt;Two meaningful changes since v2.1.0. tldl now detects new podcast episodes directly from RSS feeds with conditional GETs instead of relying on Podcast Index re-crawls, so episodes typically land in the queue within minutes of publication. A second fix catches episodes that get retitled or have their GUIDs regenerated after publication — a surprisingly common pattern in the wild.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What&apos;s new&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;RSS-first monitoring.&lt;/strong&gt; The monitor now fetches RSS feeds directly with &lt;code&gt;If-Modified-Since&lt;/code&gt; / &lt;code&gt;If-None-Match&lt;/code&gt; headers, queues full episode metadata without a Podcast Index round-trip, and falls back to PI only on RSS errors. Detection lag drops from &amp;quot;hours&amp;quot; (PI re-crawl cadence) to &amp;quot;minutes&amp;quot; for feeds that update frequently.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;&lt;code&gt;POST /admin/rebuild-index&lt;/code&gt;.&lt;/strong&gt; Backfill endpoint now populates &lt;code&gt;audioUrl&lt;/code&gt; on every existing index entry so the new dedup check works retroactively.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Fixes&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Silent duplicate episodes.&lt;/strong&gt; Episodes that publishers edited after publishing — new title, regenerated GUID, or both — used to slip past dedup and get transcribed twice. A new audio-URL dedup signal (origin + pathname, query-stripped, lowercased) catches them. Confirmed against a real-world retitle where Lenny&apos;s Podcast re-published an episode with a different title + GUID, and 100 historical near-duplicates silently deduped on the first force-check after deploy.&lt;/li&gt;
&lt;/ul&gt;
&lt;h2&gt;Under the hood&lt;/h2&gt;
&lt;ul&gt;
&lt;li&gt;Queue messages carry full episode metadata when the source is RSS, so the consumer branches on &lt;code&gt;rssSourced&lt;/code&gt; and skips Podcast Index + iTunes enrichment entirely on that path.&lt;/li&gt;
&lt;li&gt;New &lt;code&gt;audioUrl&lt;/code&gt; field on &lt;code&gt;EpisodeIndexEntry&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;Monitor cron cadence tuned to every 2 hours — RSS conditional GETs keep the feed-scan cost low, and most monitored feeds don&apos;t publish often enough to justify the previous 30-minute cadence.&lt;/li&gt;
&lt;/ul&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item><item><title>What actually changed about being a PM</title><link>https://elezea.com/2026/04/what-actually-changed-about-being-a-pm/</link><guid isPermaLink="true">https://elezea.com/2026/04/what-actually-changed-about-being-a-pm/</guid><description>Fear-Driven Development, evals as the new PRD, and what actually shifts in the PM job when AI becomes part of the stack.</description><pubDate>Sat, 18 Apr 2026 14:54:37 GMT</pubDate><content:encoded>&lt;p&gt;I have decided that in this new AI era I will be practicing FDD. Fear-Driven Development. Every time I send a pull request, which happens a lot now, I&apos;m terrified of an engineer sending it back to me and asking me to please stay in my lane and stop sending them slop. So I plan, write specs and implementation plans, test thoroughly, and I don&apos;t trust the agent&apos;s inevitable confidence.&lt;/p&gt;
&lt;p&gt;I&apos;ll come back to that, but let me first frame what this post is about. The loudest take on PM work right now is that AI is collapsing the role — that we&apos;re one product cycle away from redundancy, or being reduced to prompt jockeys. That hasn&apos;t been my experience at all. The job got more hands-on, harder (&lt;a href=&quot;https://hbr.org/2026/03/when-using-ai-leads-to-brain-fry&quot;&gt;brain fry&lt;/a&gt; is real), but also a lot more fun. What follows is what actually shifted for me over the last 5 months at Cloudflare, what didn&apos;t, and a couple of things I got wrong.&lt;/p&gt;
&lt;!--more--&gt;
&lt;h2&gt;What changed&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;We all ship now.&lt;/strong&gt; The biggest shift in my day-to-day is that my team and I write code. Not as a vanity exercise or to replace engineers — there is no universe in which I&apos;m touching our data pipeline code. But for prototypes, internal tools, small features, and live bugs or UX improvements that are safe for us to do, we just go ahead and make a PR instead of adding things to the backlog. This quote from one of our EMs sums it up well:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;I like these dashboard revamps. Far better if PMs can express their visions for the product directly to Opencode, avoids a lot of back and forth.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;This is where FDD comes in. The terror of shipping slop is the thing that keeps me responsible. Telling Claude &amp;quot;hey, build me X&amp;quot; is a fast road to code that doesn&apos;t work the way it should, or worse, works but introduces ten regressions along the way. So the pattern I run now is: brainstorm first, usually with &lt;a href=&quot;https://github.com/obra/superpowers&quot;&gt;a skill&lt;/a&gt; that forces me to articulate what I&apos;m actually trying to do; write a spec; turn the spec into an implementation plan; and only then start generating code.&lt;/p&gt;
&lt;p&gt;Counterintuitively, the planning is what makes the whole thing faster (and better!). Skip the brainstorm and you&apos;ll spend ten rounds of PR review untangling code the model wrote confidently and incorrectly. Plan properly and the build itself is usually the fast part.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Context is the product, and evals are the new PRD.&lt;/strong&gt; The second change is arguably even more consequential: I spend real time maintaining a context layer. A &lt;a href=&quot;http://CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt;, a library of skills, stakeholder memory, agent routing, a second brain that feeds all of it. None of this was part of my job a year ago, and treating AI as a chat window means missing most of what it can do. My own PM rubrics live inside this layer too. My &lt;code&gt;/okr&lt;/code&gt; and &lt;code&gt;/prd&lt;/code&gt; commands load the problem-first frameworks and antipattern checklists I&apos;d apply myself, so the first pass on any draft or review is already done before I open the doc.&lt;/p&gt;
&lt;p&gt;The same shift is showing up in specs and PRDs. When a document has two audiences (the team building the product and the agent helping them) the writing changes. Ambiguity gets expensive. Rhetorical flourishes don&apos;t survive the first load into context. A good spec is one that loads cleanly as context and runs as a plan — that&apos;s a different job than writing a memo for stakeholders. Ornella at Braintrust &lt;a href=&quot;https://x.com/braintrust/status/2039356267949445230&quot;&gt;has a good post on how evals are the new PRDs&lt;/a&gt;:&lt;/p&gt;
&lt;blockquote&gt;
&lt;p&gt;An eval is a structured, repeatable test that answers one question. Does my AI system do the right thing? Think of it as a unit test for AI behavior.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;Her argument is that in AI-native products the eval suite is what actually defines the product. A PRD says what you want; an eval tells you whether you got it. For PMs, the artifact that matters is the one you can run.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We take more load off engineering.&lt;/strong&gt; CUSTESCs (our customer escalations) used to take hours and hours of PM and engineering capacity. Someone would dig through Jira, read code across a dozen repos, chase down the relevant ClickHouse tables, check the docs against what the customer expected, and go back and forth for days before anyone had a useful working hypothesis.&lt;/p&gt;
&lt;p&gt;Our team now has a &lt;code&gt;/custesc&lt;/code&gt; command that does most of that in parallel. It pulls the ticket, runs three agents at once across code, Jira, and the wiki, generates and runs ClickHouse queries to check the leading hypothesis, and passes the draft through a blind validator and challenger before it lands as a classified analysis. Ticket ID to root cause in about 20 minutes, most of the time.&lt;/p&gt;
&lt;p&gt;This moves where the investigation work sits. A CUSTESC used to be a tax on engineering. Now I can run the full investigation myself and come to engineering with a classified issue and a working hypothesis, instead of a vague &amp;quot;can someone take a look at this?&amp;quot; One enormous side benefit: I&apos;ve learned more about our products in the past couple of months than I have in the 1.5 years before that.&lt;/p&gt;
&lt;h2&gt;What didn&apos;t change&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;Figuring out what to bet on.&lt;/strong&gt; What to say yes/no to is still the hardest part of the job. AI can lay out the tradeoffs; it can&apos;t tell you which user/business opportunities to prioritize this quarter. The roadmap is still a set of bets you own. (What &amp;quot;roadmap&amp;quot; even means in this new world deserves a post on its own, but suffice to say we have fully adopted &lt;a href=&quot;https://elezea.com/2024/02/why-using-a-now-next-later-roadmap-might-be-right-for-you/&quot;&gt;Now/Next/Later&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Trust with engineers.&lt;/strong&gt; There is no AI shortcut for being useful to your team over time. Showing up and owning the ambiguous stuff is still the job. The calls no one wants to make are still yours. If anything, PMs being able to prototype makes the line between helping and stepping on toes harder to hold. It&apos;s a human line, and it gets redrawn every week.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Owning outcomes when things go wrong.&lt;/strong&gt; AI doesn&apos;t absorb accountability. It won&apos;t take the hit in a postmortem, and it won&apos;t rebuild trust with a customer after an incident — you will. The hardest moments in the job haven&apos;t changed.&lt;/p&gt;
&lt;h2&gt;What I got wrong&lt;/h2&gt;
&lt;p&gt;&lt;strong&gt;I underestimated the context layer.&lt;/strong&gt; For the first year I treated AI as a chat tool: ask good questions, get good answers. I thought prompt engineering was the skill. The thing I missed is that skills, memory, agent routing, and the specs you load in &lt;em&gt;are&lt;/em&gt; the product. Prompts sit downstream.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;I thought adoption would be gradual.&lt;/strong&gt; I assumed PMs would pick this up on a normal curve: some fast, some slow, most in the middle. What I&apos;m seeing industry-wide is a widening gap between PMs who are willing to change how they work and PMs who aren&apos;t. You can see the gap in how fast they investigate a problem, how concretely they argue about a design, and how useful they are to other teams.&lt;/p&gt;
&lt;p&gt;Getting started is easy and the early wins are obvious. The hard part is being open to changing your job. I was talking to my wife the other day about what I&apos;m doing, and she asked the obvious question: &amp;quot;Why are you automating your job away?&amp;quot; My answer: the people who automate their own jobs away are the ones who become more valuable, because the craft is now in orchestration — setting up the layers so the AI does the right thing.&lt;/p&gt;
&lt;h2&gt;Where this leaves us&lt;/h2&gt;
&lt;p&gt;I don&apos;t know what this job looks like in another year. The pattern of the last few months has been that the ground shifts faster than the opinions written about it, and most of the stable-sounding takes age badly within a quarter. What I&apos;m trying to do is pay attention to what&apos;s getting easier, what&apos;s getting harder, and what&apos;s making me uncomfortable. And reminding myself that &amp;quot;uncomfortable&amp;quot; is usually where the real learning happens.&lt;/p&gt;
&lt;br&gt;&lt;br&gt;&lt;hr&gt;Thanks for still believing in RSS! Feel free to &lt;a href=&quot;https://elezea.com/contact&quot;&gt;get in touch&lt;/a&gt;.</content:encoded><author>Rian van der Merwe</author></item></channel></rss>