PHP 8.1 introduced Fibers as a foundation for cooperative multitasking. Most developers use them only indirectly through ReactPHP or Amp. But understanding Fibers at the mechanism level unlocks the ability to build your own concurrency primitives. I show how Fibers work, implement a minimal cooperative scheduler, and use it to run parallel HTTP requests without a framework dependency.
The N+1 problem is especially acute in GraphQL because resolvers compose independently without awareness of each other. A query for 20 products that each have categories will trigger 20 separate category queries without batching. Magento 2’s BatchServiceContractResolverInterface and the DataLoader pattern solve this. I show both approaches with cache tag integration.
The PHP 8.5 RFC vote on the pipe operator passed. After years of debate it is officially coming in November 2025. Readonly property inheritance also passed – child classes can now override parent readonly properties in specific cases. array_first() and array_last() join the array function family. I show what the final syntax looks like and how it changes real code.
Hyvä is faster than Luma – everyone says so. But by how much, on what metrics, and does it translate to business results? I ran controlled benchmarks on identical hardware with the same Magento 2.4.8 installation and both themes, measuring LCP, TTFB, Lighthouse scores, and load test results with k6. The numbers are concrete.
Most PHP applications eventually run on Kubernetes – but developers rarely touch it until something breaks in production. Understanding the basics of Deployments, Services, ConfigMaps, and HPA makes debugging much faster. I show the minimum Kubernetes knowledge a PHP/Magento developer needs: reading logs, exec into pods, understanding why a pod is crashing, and writing a sensible Deployment YAML.
Specification is a pattern that encapsulates a business rule as a composable object. Instead of scattering if-else checks throughout the codebase, you name the rule, make it testable, and combine it with AND, OR, NOT. I show a PHP implementation with composition operators and apply it to product eligibility rules in Magento 2.
This is the 100th post on this blog. I started writing in July 2018, documenting what I was learning and building. 6.5 years, PHP 7.2 through 8.4, Magento 2.2 through 2.4.8, 100 posts. A retrospective – what changed, what stayed the same, and what I would tell myself in 2018 if I could.
PHP 8.5 RFCs are actively being discussed on the php.net internals list. The pipe operator proposal has been debated for years and may finally ship. Readonly property inheritance fixes an inconsistency. Generics are discussed but will not come in 8.5. I look at the most impactful proposals, show what the code would look like, and explain why generics remain out of reach in the short term.
Magento 2 indexers maintain denormalised data structures – flat tables, price indexes, category-product mappings – that make frontend queries fast. The built-in indexers cover most needs, but complex custom features sometimes need their own. I show how to build a custom indexer from scratch: mview.xml for change tracking, the indexer class with full and partial reindex, and triggering via cron.
2025 is shaping up as a year of consolidation in the PHP ecosystem. FrankenPHP changes how PHP applications are deployed. AI tooling has matured from “experimental toy” to “daily assistant”. OpenSearch has fully replaced Elasticsearch in the Magento ecosystem. Hyvä has become the default frontend choice. I review where things stand and what is worth learning in the next twelve months.
