What to Open, What to Close: A Pragmatic Guide to Interface Design

The playbook for building software seams that bend with change, not break.

The playbook for building software seams that bend with change, not break.

Quick take: Every architectural regret starts as a small “harmless” interface. Four posts, twenty patterns, and dozens of code snippets show you how to choose the seam that stays harmless — no matter how your product mutates.

Why this series exists

Interfaces are the pressure valves of a codebase. Pick the wrong valve:

  • new features ricochet through unrelated files,
  • plug‑ins fight your core types,
  • or consumers rage when their integration breaks.

Pick the right one and change flows like water.

This series is a hands‑on field guide to that choice — rooted in Java, Go, TypeScript, Scala, and Kotlin, but focused on principles you can port anywhere.

The 4-Part Series

Part 1: The Expression Problem & Interface Shape

“Should extensibility favour behaviours or data variants?” → trade‑offs, guiding heuristics, code walkthroughs.

Read Part 1 →

Part 2: Designing for Real-World Volatility

How to quarantine fast‑changing behaviours (audits, reports, analytics) without polluting domain logic.

Read Part 2 →

Part 3: Preventing Fragile Base Class Bugs

Inheritance landmines, composition refactors, sealed abstractions, and hook patterns that keep OO trees from toppling.

Coming Soon

Part 4: Evolving Interfaces Without Breaking Consumers

Versioning, schema evolution, plugin contracts, and runtime type‑safety techniques that keep dependents unbroken.

Coming Soon

Who will benefit

  • Backend & API engineers crafting contracts that must survive quarterly rewrites
  • Architects & tech leads responsible for plug‑in ecosystems, microservices, or modular monoliths
  • Senior devs tired of “one‑line” changes spawning 15‑file PRs

If you’ve ever whispered “I hope this change doesn’t ripple…”, this series is for you.

Stay in the loop

  • Follow @maneesh‑chaturvedi here on Medium for future deep dives.
  • Have a colleague firefighting interface debt? Share this series — help them refactor less and ship more. 🚀

Ready? Start with Part 1 and learn why half of extensibility is knowing what not to extend.

Read more