How OOP Earned Our Trust and Let Us Down
Session Abstract
Object-oriented programming helped shape modern software engineering — but also gave us shared mutable state, fragile hierarchies, and accidental complexity. Using real Scala adoption stories, this talk explores why legacy OOP thinking fails and how functional principles help teams build simpler systems.
Session Description
Object-oriented programming dominated software development for decades. It improved code reuse, abstraction, and modelling, and many developers — myself included — started their careers with it. But over time, the same ideas often produced systems that became difficult to reason about: shared mutable state, deep inheritance trees, overengineered patterns, and growing technical debt.
In this talk, I’ll share lessons from real-world Scala adoption projects where the biggest challenge was not learning a new language, but bringing existing habits into a different paradigm. Instead of embracing immutability, pure functions, and explicit effects, teams often recreated familiar OOP architectures with shinier syntax — and repeated the same mistakes.
Through practical examples we’ll examine how good engineering intentions can still lead to systems that are harder to maintain and evolve.
Finally, I’ll show how functional programming principles can help teams write simpler and more sustainable software — not only in Scala, but across modern language ecosystems. Attendees will leave with practical ideas for reducing accidental complexity and avoiding common overengineering traps.