There’s a lot of excitement right now around AI agents, tools, and modular systems.
Define tools.
Describe them well.
Let something else decide when to use them.
Sound familiar?
It should.
Because we’ve been doing this for years | we just called them plugins .
The core idea
A well-designed system doesn’t hardcode features.
Instead, it does one thing at startup:
Load modules (plugins)
That’s it.
No giant Program.cs doing everything.
No tightly coupled feature logic.
Just a host application that loads capabilities dynamically.
Everything is a plugin
In this model:
Pages → plugins
UI components → plugins
Business logic → plugins
Side effects (logging, API calls, events) → plugins
Even things you don’t normally think about, like routing, become plugins.
Why this matters
When every feature is a plugin:
Adding a feature → drop in a file
Removing a feature → delete a file
Replacing a feature → swap a file
No refactoring.…