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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.