Darkwood · PHP architecture · 2026
The context
Should we migrate from Phalcon to Symfony?
Where should performance, boundaries, and workflows live?
High-traffic PHP platform · proven performance · growing workflow complexity · maintenance pressure.
The false debate
Framework choice is only part of the architecture.
Three native layers
Phalcon
Zephir/C · low overhead on the MVC path.
Predictable latency · monolith APIs · cache-friendly.
v5.x active · releases in 2026 · ecosystem backers.
When MVC performance and team expertise still dominate.
The shift
Obsolete? Wrong question. What optimization matters now?
Architecture
flowchart TB
subgraph orch [Orchestration layer]
W[Workflows and pipelines]
end
subgraph app [Application layer]
S[Symfony structure\nboundaries DI ecosystem]
end
subgraph fw [Framework layer]
P[Phalcon native MVC]
end
subgraph rt [Runtime layer]
T[TrueAsync ext-async\noptional execution]
end
Q[Where does complexity live?]
Q --> orch
Q --> app
Q --> fw
Q --> rt
Four independent decisions - not one migration checkbox.
Boundaries
Redraw boundaries first. Framework second.
Archetype · PEFT
flowchart LR IN[Ingestion] --> PUB[Publication] PUB --> STORE[(Canonical store)] PUB --> INV[Invalidation] INV --> RM[Read models] RM --> API[Read APIs]
Orchestration
Multi-step workflows need a first-class architectural place.
Flow
DriverInterface - business logic stable, execution model changes.$flow = (new Flow(job: new Validate(), driver: $driver))
->fn(new Persist())
->fn(new RebuildReadModel());
Flow explores orchestration as an architectural primitive - not a framework replacement.
Paths
Anti-patterns
Conclusion
Where do multi-step pipelines live?
Where does domain end and coordination begin?
Who owns execution strategy?
Native code distributes across the stack.