contract-first approach