good design is problem solving