Software Craftsmanship with PHP

"Raising the bar of professional software development by practicing it and helping others learn"

This is a collection of material I find helpful. Email me if you want something added.


How to get from legacy software to a modern, event-driven system? A presentation with deep insights into challenges and solutions from the viewpoint of a consultant with many years of experience in the field.

Domain-Specific Languages

Good code is readable code. Why not use the language of your business, and build a domain-specific language on top of PHP? This presentation shows how to approach this without additional technical effort.

PHP 7 Workshop

The past, present, and future of PHP 7. Insights into state-of-the-art system architectures with PHP 7, nginx, and PHP-FPM. A detailed look into migration concepts, and sound advice on selling the move to PHP 7.

PHP 7 Explained

This ebook explains why the release of PHP 7 opened a new chapter in the future development of the PHP programming language. Learn how to get your code ready for PHP 7, and how to work around the features that are gone.

PHP 7 Backwards Compatibility

Software needs to be maintained, just like buildings need to be refurbished and renovated. The enormous benefits of PHP 7 come at the cost of removed features. Is this appropriate or just annoying for every developer?

How to Validate Data

Objects must never enter an invalid state. This article shows how self-validating objects can make validator methods and classes largely superfluous. The result are small and meaningful objects that are easy to reuse.

Dependency Disguise

First rule of dependencies: avoid them. Second rule of dependencies: make them explicit, if you cannot avoid them. Passing around a service container is an antipattern called dependency disguise.

PHPUnit Best Practices

As PHP evolves, new possibilites open up. Using annotations to test for exceptions, which used to be the best practice for long, is no longer the best choice. A new approach offers much better IDE support when refactoring.

Typed Arrays in PHP

PHP does not have built-in collections. There is no need to sacrifice type safety, though. Tim Bezhashvyly shows a neat trick to work around PHP's limitations. His post also nicely shows how to introduce elements of functional programming into PHP.


MVC is still a predominant pattern that many consider an application architecture (which it is not). This presentation shows what is wrong with MVC, and what needs to be done to write SOLID and maintainable code using MVC.

Five Rules of Craftsmanship

Originating from a Code as Craft presentation at Etsy in New York, this presentation condenses Software Craftsmanship into five principles. Following these principles will help to write better software, and greatly increase job satisfaction.

The Hidden Cost of Bad Code

Developers know that bad code is hard to maintain. To make the case for writing better code, the time wasted due to bad code must be made visible. This presentation makes an impressive statement based on almost real numbers.

Test-Driven Domains

What happens if you combine the ideas of Test-Driven Development with a Domain-Driven Design approach? Done right, the result is an executable specification of your business rules that non-technical people can understand.

Dealing with Legacy Code

Everybody has to deal with legacy code. Does this prevent us from writing clean, new code? This presentation gives a very hands-on explanation of how to add new components on to legacy code using results-producing bridge technologies.