While BDD focuses on specifying user-facing behavior, dismissing functional design patterns altogether is a dangerous oversimplification. Functional design isn’t about rigidity, it’s about clarity, predictability, and composability. It creates a stable foundation beneath the behavior, enabling you to write code that’s testable, maintainable, and resilient to change.
Yes, AI models can adapt to varying implementations, but that doesn’t mean we should throw away architectural discipline. Relying solely on AI to interpret shifting implementations ignores the real-world complexity of systems where behavior is emergent, not always deterministic. Functional design provides the deterministic scaffolding needed for robust software so your “green tests” actually mean something beyond the surface.
BDD and functional design aren’t at odds, they’re complementary. BDD defines what the system should do. Functional design ensures how it does it remains understandable, correct, and evolvable. Without structure, your tests pass, but your system becomes a black box, opaque, fragile, and eventually untestable.