developer thinking process