<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/"><channel><title>Elie Nehme — Ideas and publications</title><link>https://elienehme.fr/en/</link><description>Ideas published on elienehme.fr and publications on Medium and Hashnode, by Elie Nehme</description><language>en</language><managingEditor>contact@elienehme.fr (Elie Nehmé)</managingEditor><atom:link href="https://elienehme.fr/en/rss.xml" rel="self" type="application/rss+xml"/><item><title>Plus le projet grossit, plus l’IA se trompe: le bounded context comme investissement</title><link>https://elie29.hashnode.dev/plus-le-projet-grossit-plus-l-ia-se-trompe</link><guid isPermaLink="true">https://elie29.hashnode.dev/plus-le-projet-grossit-plus-l-ia-se-trompe</guid><description>On a green-field project, generative AI works wonders; as the project grows, its answers lose accuracy. The model has not changed: what has grown is the context it has to hold. Context Budget, the method I have introduced on several projects, splits the code into bounded contexts the AI can hold in full: the split is paid for once, and each request then pays only for its own context.</description><pubDate>Fri, 02 Oct 2026 00:00:00 GMT</pubDate><dc:language>fr</dc:language></item><item><title>When everyone ships a website</title><link>https://elienehme.fr/en/ideas/when-everyone-ships-a-site/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/when-everyone-ships-a-site/</guid><description>Vibe coding lets anyone build a website, but it cannot make that website unique and safe</description><pubDate>Mon, 28 Sep 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Corriger ou atténuer: le CRA ne prévoit que deux réponses</title><link>https://elie29.hashnode.dev/corriger-ou-attenuer-le-cra-ne-laisse-que-deux-reponses</link><guid isPermaLink="true">https://elie29.hashnode.dev/corriger-ou-attenuer-le-cra-ne-laisse-que-deux-reponses</guid><description>Since 11 September 2026, the Cyber Resilience Act (CRA) has required an early warning within 24h for an actively exploited vulnerability in a product, including products already on the market. Meeting that deadline depends on work done well before the incident: in the delivery chain, in the number of versions maintained, and in whether products can be mitigated without a developer.</description><pubDate>Fri, 25 Sep 2026 00:00:00 GMT</pubDate><dc:language>fr</dc:language></item><item><title>A vision that is never executed is just a dream</title><link>https://elienehme.fr/en/ideas/a-vision-that-is-not-executed-is-not-one/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/a-vision-that-is-not-executed-is-not-one/</guid><description>A vision is only worth what teams can follow: execution that is faithful and practicable, a pragmatic trajectory rather than fine ideas nobody can keep up with</description><pubDate>Wed, 23 Sep 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>From Legacy Artifacts to Served Context: My Six-Stage Method</title><link>https://elie29.medium.com/from-legacy-artifacts-to-served-context-my-six-stage-method-09f668052904</link><guid isPermaLink="true">https://elie29.medium.com/from-legacy-artifacts-to-served-context-my-six-stage-method-09f668052904</guid><description>Six stages to build a knowledge graph from C, PL/SQL, PHP and twenty years of documents, keep it true release after release and serve it to an LLM: deterministic collectors, a SHACL gate, append-only facts, and a graph that selects before the model reads.</description><pubDate>Fri, 18 Sep 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Why reinvent what already exists, or what will be native tomorrow</title><link>https://elienehme.fr/en/ideas/reinventing-what-already-exists/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/reinventing-what-already-exists/</guid><description>Rebuilding generic skills that plugins and integrations already provide, and that the next models will absorb, is rarely the right investment</description><pubDate>Mon, 14 Sep 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Ontology-Based Context Engineering: When RAG Is Not Enough</title><link>https://elie29.medium.com/ontology-based-context-engineering-when-rag-is-not-enough-124e6b1de6bb</link><guid isPermaLink="true">https://elie29.medium.com/ontology-based-context-engineering-when-rag-is-not-enough-124e6b1de6bb</guid><description>Why vector RAG failed on a two-million-line legacy system, and how a small ontology kept in Git, with RDF, SHACL and SPARQL, gives an LLM release-filtered context and a traceable path.</description><pubDate>Fri, 11 Sep 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>If AI replaces developers, who will decide what it builds?</title><link>https://elienehme.fr/en/ideas/if-ai-replaces-developers-who-decides/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/if-ai-replaces-developers-who-decides/</guid><description>&quot;AI will replace everyone&quot;, or, in the targeted version, &quot;developers&quot;. Replacing a profession because its tool can now be generated confuses the two</description><pubDate>Sun, 30 Aug 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>I Tried BMAD on a Real Feature</title><link>https://elie29.medium.com/i-tried-bmad-on-a-real-feature-69afd0ba53b3</link><guid isPermaLink="true">https://elie29.medium.com/i-tried-bmad-on-a-real-feature-69afd0ba53b3</guid><description>BMAD with Superpowers on a real feature across a Java backend and an Angular frontend: what a formal method adds to a living specification, where the two collide, and what to adopt, adapt or skip.</description><pubDate>Mon, 24 Aug 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>The Living Specification: How I Keep AI-Written Code Correct</title><link>https://elie29.medium.com/the-living-specification-how-i-keep-ai-written-code-correct-907be05c9eed</link><guid isPermaLink="true">https://elie29.medium.com/the-living-specification-how-i-keep-ai-written-code-correct-907be05c9eed</guid><description>A living specification, invariants, adversarial AI reviews and real verification keep AI-written code correct, and engineering shifts from writing code to exercising judgement. Second part of a two-article series.</description><pubDate>Wed, 19 Aug 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Code is a means, not an end</title><link>https://elienehme.fr/en/ideas/code-is-a-means-not-an-end/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/code-is-a-means-not-an-end/</guid><description>A developer who only writes code will have less work, or none at all. The question is not whether AI writes the code, but what the developer brings beyond it</description><pubDate>Sun, 16 Aug 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>AI Writes the Code. So What Is the Engineer’s Job Now?</title><link>https://elie29.medium.com/ai-writes-the-code-so-what-is-the-engineers-job-now-79fa3fdf1b88</link><guid isPermaLink="true">https://elie29.medium.com/ai-writes-the-code-so-what-is-the-engineers-job-now-79fa3fdf1b88</guid><description>How I asked Claude Code to attack a design instead of building it, the three bugs the adversarial review found before any code, and why engineering is moving from code production to technical validation.</description><pubDate>Sat, 15 Aug 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Sustainable competitive advantage, when AI writes the code</title><link>https://elienehme.fr/en/ideas/competitive-advantage-when-ai-writes-the-code/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/competitive-advantage-when-ai-writes-the-code/</guid><description>As AI writes more and more of the code, companies need to rethink where their sustainable competitive advantage will come from</description><pubDate>Mon, 10 Aug 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Advanced patterns never make up for a fragile foundation</title><link>https://elienehme.fr/en/ideas/patterns-never-make-up-for-a-fragile-foundation/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/patterns-never-make-up-for-a-fragile-foundation/</guid><description>Hexagonal architecture, clean architecture, CQRS: powerful patterns, often shown off without the good development practice that holds them up</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>What AI changes, and what it doesn’t, in software engineering</title><link>https://elienehme.fr/en/ideas/what-ai-changes-and-what-it-doesnt/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/what-ai-changes-and-what-it-doesnt/</guid><description>A short list of what AI has changed in the work, a shorter one of what it has not, and what that means for the engineer’s job</description><pubDate>Mon, 02 Feb 2026 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Quand false ne veut rien dire</title><link>https://elie29.hashnode.dev/quand-false-ne-veut-rien-dire</link><guid isPermaLink="true">https://elie29.hashnode.dev/quand-false-ne-veut-rien-dire</guid><description>When a method can fail for several reasons, returning true or false throws away the one thing the caller needs: the cause. Why the boolean return is an anti-pattern, where it comes from, and what to return instead.</description><pubDate>Thu, 18 Dec 2025 00:00:00 GMT</pubDate><dc:language>fr</dc:language></item><item><title>Kill Feature Branching or Die Trying</title><link>https://elie29.medium.com/kill-feature-branching-or-die-trying-5da0fe41b806</link><guid isPermaLink="true">https://elie29.medium.com/kill-feature-branching-or-die-trying-5da0fe41b806</guid><description>Why long-lived feature branches work against continuous delivery, what feature toggles offer instead, and a .NET sample that puts a new feature behind a request header in five steps.</description><pubDate>Mon, 12 May 2025 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>La CI/CD n’est pas une priorité !</title><link>https://elie29.hashnode.dev/la-cicd-nest-pas-une-priorite</link><guid isPermaLink="true">https://elie29.hashnode.dev/la-cicd-nest-pas-une-priorite</guid><description>Setting up CI/CD is often a team’s first DevOps reflex, and often premature: what a real pipeline is, what must be settled first, and why the persistence layer and the infrastructure deserve their own care.</description><pubDate>Wed, 07 May 2025 00:00:00 GMT</pubDate><dc:language>fr</dc:language></item><item><title>Justifier le Craftsmanship auprès des DSI: ROI, contexte et impact réel</title><link>https://elie29.hashnode.dev/justifier-le-craftsmanship-aupres-des-dsi-roi-contexte-et-impact-reel</link><guid isPermaLink="true">https://elie29.hashnode.dev/justifier-le-craftsmanship-aupres-des-dsi-roi-contexte-et-impact-reel</guid><description>A CTO who cannot demonstrate the ROI of Sonar and GitLab, a director who cannot quantify the benefits of pair programming: why Craftsmanship must be justified by the business problems it solves, and measured on two levels.</description><pubDate>Thu, 01 May 2025 00:00:00 GMT</pubDate><dc:language>fr</dc:language></item><item><title>Building a Resilient Site-Aware Synchronization</title><link>https://elie29.hashnode.dev/building-a-resilient-site-aware-synchronization</link><guid isPermaLink="true">https://elie29.hashnode.dev/building-a-resilient-site-aware-synchronization</guid><description>Several on-premise sites, each with its own database, that must keep working through days of network outage and still converge: an outbox table, a RabbitMQ cluster, a fanout exchange, idempotent consumers and a golden source for replaying events.</description><pubDate>Mon, 14 Apr 2025 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Moving to the cloud is not moving the servers</title><link>https://elienehme.fr/en/ideas/moving-to-the-cloud-is-not-moving-the-servers/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/moving-to-the-cloud-is-not-moving-the-servers/</guid><description>Putting everything on infrastructure as a service, or containerising everything as is with huge images, is not a migration: it is a move that costs more</description><pubDate>Sat, 02 Mar 2024 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>A user story is not a technical task list</title><link>https://elienehme.fr/en/ideas/a-user-story-is-not-a-technical-task-list/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/a-user-story-is-not-a-technical-task-list/</guid><description>Code, test, describe the implementation: repeated in every user story, these tasks bring no business value, and Jira is not a development tool</description><pubDate>Tue, 10 Oct 2023 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Stratégie de déploiement Blue/Green</title><link>https://elie29.hashnode.dev/strategie-de-deploiement-bluegreen</link><guid isPermaLink="true">https://elie29.hashnode.dev/strategie-de-deploiement-bluegreen</guid><description>Beyond the textbook definition: the decisions a team must take, component by component, for Blue/Green to work in practice, from persistence compatibility and sessions to decommissioning and rollback.</description><pubDate>Sun, 27 Aug 2023 00:00:00 GMT</pubDate><dc:language>fr</dc:language></item><item><title>Why architecture reviews often fail</title><link>https://elienehme.fr/en/ideas/why-architecture-reviews-often-fail/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/why-architecture-reviews-often-fail/</guid><description>Reviews happen at the wrong time, with the wrong question. What has made them useful in my experience</description><pubDate>Mon, 06 Feb 2023 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Java functional programming to leverage polymorphism</title><link>https://elie29.hashnode.dev/java-functional-programming-to-leverage-polymorphism</link><guid isPermaLink="true">https://elie29.hashnode.dev/java-functional-programming-to-leverage-polymorphism</guid><description>How a factory’s switch statement grows with every new case, and how a map of functional interfaces, then an enum, keeps its complexity constant however many types you add.</description><pubDate>Wed, 13 Apr 2022 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Apache Kafka along with RxJS operators</title><link>https://elie29.medium.com/apache-kafka-along-with-rxjs-operators-31c00d46c35a</link><guid isPermaLink="true">https://elie29.medium.com/apache-kafka-along-with-rxjs-operators-31c00d46c35a</guid><description>A Kafka processor between two topics must not lose a message while its producer is paused: why takeUntil, switchMap and combineLatest all drop data, and how windowToggle and bufferToggle keep it.</description><pubDate>Thu, 24 Mar 2022 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>The hidden cost of technical decisions</title><link>https://elienehme.fr/en/ideas/the-hidden-cost-of-technical-decisions/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/the-hidden-cost-of-technical-decisions/</guid><description>The price of a technical decision is what it does to every decision that follows. Three questions to ask before making one</description><pubDate>Thu, 11 Nov 2021 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Deploy Quarkus Application with GitLab-CI to Heroku PaaS</title><link>https://elie29.medium.com/deploy-quarkus-application-with-gitlab-ci-to-heroku-paas-72c0e9214669</link><guid isPermaLink="true">https://elie29.medium.com/deploy-quarkus-application-with-gitlab-ci-to-heroku-paas-72c0e9214669</guid><description>From an empty Quarkus project to three Heroku environments with one GitLab-CI pipeline: branch and tag rules, protected variables, dependency caching and free-tier security scans.</description><pubDate>Sat, 03 Apr 2021 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Frontend JWT token storage</title><link>https://elie29.medium.com/frontend-jwt-token-storage-77cbe6dc680b</link><guid isPermaLink="true">https://elie29.medium.com/frontend-jwt-token-storage-77cbe6dc680b</guid><description>Local storage, session storage and plain cookies leave a JWT open to theft: three ways to hold the token in a browser (a closure, a secure cookie, a service worker) and what each one trades away.</description><pubDate>Sun, 14 Mar 2021 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>What makes a codebase evolvable?</title><link>https://elienehme.fr/en/ideas/what-makes-a-codebase-evolvable/</link><guid isPermaLink="true">https://elienehme.fr/en/ideas/what-makes-a-codebase-evolvable/</guid><description>Evolvability is measured by doing, not read off a diagram. Five unglamorous traits of codebases that age well</description><pubDate>Thu, 02 Apr 2020 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Refactoring: from strategy to interpreter pattern with Jest testing tool</title><link>https://elie29.medium.com/refactoring-from-strategy-to-interpreter-pattern-with-jest-testing-tool-58ef7bf0f2fb</link><guid isPermaLink="true">https://elie29.medium.com/refactoring-from-strategy-to-interpreter-pattern-with-jest-testing-tool-58ef7bf0f2fb</guid><description>Evaluating arithmetic expressions with operator precedence: from a switch that breaks the open/closed principle to polymorphism, then a lexer, a parser and an interpreter, each step checked by Jest tests.</description><pubDate>Sun, 25 Nov 2018 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Refactoring: How to avoid nested or several conditionals within a function?</title><link>https://elie29.medium.com/refactoring-how-to-avoid-nested-or-several-conditionals-within-a-function-a25df6c27f62</link><guid isPermaLink="true">https://elie29.medium.com/refactoring-how-to-avoid-nested-or-several-conditionals-within-a-function-a25df6c27f62</guid><description>Two ways out of the pyramid of doom: a small assertion function that chains instead of nesting, and conditions turned into getters so that Math.max replaces the branching.</description><pubDate>Mon, 05 Nov 2018 00:00:00 GMT</pubDate><dc:language>en</dc:language></item><item><title>Object Calisthenics: One level ! But how can we manage to exit a loop ?</title><link>https://elie29.medium.com/object-calisthenics-one-level-but-how-can-we-manage-to-exit-a-loop-4485dbaf7f7d</link><guid isPermaLink="true">https://elie29.medium.com/object-calisthenics-one-level-but-how-can-we-manage-to-exit-a-loop-4485dbaf7f7d</guid><description>Only one level of indentation per method, and still a way out of a loop: array_reduce or recursion instead of a nested early return, with the cost of each measured on fifty thousand elements.</description><pubDate>Tue, 30 Oct 2018 00:00:00 GMT</pubDate><dc:language>en</dc:language></item></channel></rss>