Modules don't compose well

There’s Phoenix.Endpoint.init/1, which is called when your endpoint starts up. Not per controller, but still.

Controllers in phoenix also implement a interface (even if not explicitly via a elixir behaviour). They’re plugs. MyController.call(conn, action) and you don’t need to start any infrastructure around it.