Interface-driven development