how developers solve problems