- start with a positive outlook
- look at the problem with a helicopter view
- dissect problem into bite-sized chunks
- focus on end-state
- take notes and record progress
- check answers and challenge your assumptions
I think the last two are particularly very important. I am looking at this in a software engineering point of view. Taking down notes on your assumptions and progress, gives you a good sense of satisfaction, improving on your positive outlook. And the last point, checking answer, in the software world probably translates to testing out the code. The second part is however more important. Challenging your assumptions make your code more complete and robust. Product validation teams usually call this negative testing. They go and challenge all the possible assumptions. If they are indeed valid assumptions, then the code should give out valid error/warning messages. If they are not valid assumptions, the code should be enhanced to take care of these cases.
Check out Dave’s 13 nuggets here.