designing software is for solving problems