abstractions and specifications work