interface based coding