<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Working notes — Haisham</title><description>Things I’ve tried, problems I’ve run into, and how I’ve worked through them.</description><link>https://hshm.dev</link><language>en</language><item><title>Why I Avoid PHP Traits</title><link>https://hshm.dev/blog/why-i-avoid-php-traits</link><guid isPermaLink="true">https://hshm.dev/blog/why-i-avoid-php-traits</guid><description>I want to add a private method without checking the internals of every trait the class uses. PHP&apos;s trait mechanics make that harder than it should be.</description><pubDate>Mon, 12 Oct 2026 00:00:00 GMT</pubDate><category>php</category><category>laravel</category><category>architecture</category></item><item><title>What Makes a Rewrite?</title><link>https://hshm.dev/blog/what-makes-a-rewrite</link><guid isPermaLink="true">https://hshm.dev/blog/what-makes-a-rewrite</guid><description>Starting again gives us a chance to use what we’ve learned. Deciding whether to do it means understanding what we can improve, what we might lose, and what it takes to keep the next system worth building on.</description><pubDate>Sat, 10 Oct 2026 00:00:00 GMT</pubDate><category>architecture</category><category>process</category></item><item><title>Treading the Worn Water - Dependency Injection vs Dependency Inversion</title><link>https://hshm.dev/blog/treading-the-worn-water</link><guid isPermaLink="true">https://hshm.dev/blog/treading-the-worn-water</guid><description>My thoughts on this well explored topic, and why I struggled to truly differentiate between the two concepts for a long time.</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><category>dependency injection</category><category>dependency inversion</category><category>software architecture</category></item><item><title>How I Structure Projects: Vertical Slices Over Layers</title><link>https://hshm.dev/blog/project-structure-vertical-slices</link><guid isPermaLink="true">https://hshm.dev/blog/project-structure-vertical-slices</guid><description>Grouping code by technical layer means jumping across the project to follow one feature. I group by feature instead, and adapt the structure to whatever the language and framework expect.</description><pubDate>Sun, 22 Mar 2026 00:00:00 GMT</pubDate><category>architecture</category><category>process</category></item><item><title>The Work AI Moves</title><link>https://hshm.dev/blog/the-work-ai-moves</link><guid isPermaLink="true">https://hshm.dev/blog/the-work-ai-moves</guid><description>AI doesn&apos;t eliminate engineering work. It moves it — onto reviewers, and onto your future self.</description><pubDate>Fri, 20 Mar 2026 00:00:00 GMT</pubDate><category>ai</category><category>process</category></item><item><title>Iteration is the Key to Software</title><link>https://hshm.dev/blog/iteration-key-to-software</link><guid isPermaLink="true">https://hshm.dev/blog/iteration-key-to-software</guid><description>Your understanding of a problem is lowest before you write the code. The systems that actually last are grown through real-world feedback, not built from a master plan.</description><pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate><category>process</category><category>architecture</category></item><item><title>WebAssembly: Escaping the Browser</title><link>https://hshm.dev/blog/wasm-edge-compute</link><guid isPermaLink="true">https://hshm.dev/blog/wasm-edge-compute</guid><description>Wasm is a genuinely interesting runtime primitive. I think it could become the compute layer of the web. I also think that probably won&apos;t happen anytime soon.</description><pubDate>Sat, 10 Jan 2026 00:00:00 GMT</pubDate><category>wasm</category><category>rust</category></item></channel></rss>