Extensibility - Why it matters

Basically, every developer wants to create value. We don't want to re-invent the wheel; instead we'd like to re-use as much as possible. This is why we believe it is quite natural for many developers to somehow create "generic" solutions intended to be applicable to a wider range of problems than originally intended. However, we think there is no silver bullet – we cannot just build the most generic solution possible; and then we are "finished" for all our projects.

Instead, we need to find a sweet spot. We should develop features in a way applicable to as many use-cases as make sense, but no more. Finding this spot is a constant journey, involving lots of experience, discussions, and it will always be somewhat subjective.

The Basis: A Module System

In order to have an extensible framework, you need some kind of module or package system. A way to add code to the core codebase of a framework. Many systems provide this, be it Flow/Neos, Symfony, Spring, Ember.js, Rails, ...

When having a module system, you hopefully never need to fork or patch the base system.

Two of a Kind

We in the Neos team generally think about extensibility patterns in two very broad categories:

