Upgrade to Pro — share decks privately, control downloads, hide ads and more …

2026_10_PHPDD_SpeedIsNotVelocity_AI_Complexity_...

Avatar for Sebastian Kurfürst Sebastian Kurfürst
October 09, 2026
0

 2026_10_PHPDD_SpeedIsNotVelocity_AI_Complexity_OurRoleAsDevs.pdf

Avatar for Sebastian Kurfürst

Sebastian Kurfürst

October 09, 2026

More Decks by Sebastian Kurfürst

Transcript

  1. Speed is not velocity AI, complexity, and our role as

    developer Sebastian Kurfürst, PHPDD26
  2. Vibe Coding ... forget that the code even exists ...

    ... code grows beyond my usual comprehension ... ... It's not too bad for throwaway weekend projects ...
  3. A quarter of the W25 startup batch have 95% of

    their codebases generated by AI. https://techcrunch.com/2025/03/06/a-quarter-of-startups-in-ycs-current-cohort-have-codebases-that-are-almost-entirely-ai-generated/
  4. “As a concrete example, an engineer at Spotify on their

    morning commute from Slack on their cell phone can tell Claude to x a bug or add a new feature to the iOS app, [...] And once Claude nishes that work, the engineer then gets a new version of the app, pushed to them on Slack on their phone, so that he can then merge it to production, all before they even arrive at the o ce.” ffi fi fi Gustav Söderström, Co-CEO, CPO & CTO at Spotify https://techcrunch.com/2026/02/12/spotify-says-its-best-developers-havent-written-a-line-of-code-since-december-thanks-to-ai/
  5. neos/openapi OpenAPI Server neos/schematic simple types (arrays) <=> objects neos/jsonschema

    a class can declare its JSON schema and validate incoming data
  6. final class Mapper { private readonly Coercer $coercer; private readonly

    Instantiator $instantiator; very generic names fl public function __construct( con ated instantiation Coercer|null $coercer = null, and runtime Instantiator|null $instantiator = null) { $this->coercer = $coercer ?? new Coercer(); $this->instantiator = $instantiator ?? new Instantiator(); }
  7. public function map(Schema $schema, mixed $input): CoercionResult { $coerced =

    $this->coercer->coerce($schema, $input); if (!$coerced->success) { Result Object return $coerced; } try { Exception as $instance = $this->instantiator->instantiate($schema, Return Type $coerced->value()); } catch (InvalidValue $exception) { return CoercionResult::failure(Issues::create(Issue::create( $exception->path, InvalidValue::ISSUE_CODE, $exception>getMessage()))); unpacking and re-packing results } return CoercionResult::success($instance); }
  8. /** * A discriminated union is determinate: the discriminator names

    exactly one candidate, so descend into that * one rather than trying every branch. An unresolvable discriminator is passed through untouched, so the * Validator reports it precisely instead of this method guessing. * * The discriminator key stays in the value throughout — each candidate declares it as a `const` property, so * it validates, survives projection, and later tells the Instantiator which candidate to build. */ 😵💫
  9. e ort per feature overall complexity full reliance on AI

    little architecture (no AI) little architecture (AI) complexity cli (AI) complexity cli (no AI) ff ff ff time
  10. e ort per feature overall complexity code complexity = 😞

    data complexity = 😵💫 how do we migrate the legacy data? ff time
  11. e ort per feature overall complexity full reliance on AI

    little architecture (no AI) little architecture (AI) complexity cli (AI) complexity cli (no AI) good architecture ff ff ff time
  12. How do we end up with good architecture? Stay in

    control. Foto von Brooke Balentine auf Unsplash
  13. Code Review becomes part of the Inner Loop Develop Everybody

    needs to learn Code Reviews Test Review Everybody is a Code Reviewer
  14. Interface (cost: less is better) Functionality (bene t: more is

    better) fi Prefer Deep Modules over Shallow Modules