design by interfaces