Non c'è scatola!
C'è un problema specifico da risolvere e una serie di vincoli che potrebbero essere applicati. Scopri qual è il problema (pensa in modo astratto e in termini reali), definendolo sia in termini specifici basati sull'argomento, sia in termini più generali.
Esamina ciascuno dei vincoli (non fare ipotesi) per vedere se, quando e in che misura potrebbero essere applicati. Guarda il problema dal punto di vista di chi colpisce (non dimenticare l'obiettivo) e da dietro le quinte.
Non fare ipotesi.
Se supponi che certe cose siano vere quando non lo sono, ti impedirai di esaminare diverse prospettive. Sfida anche le decisioni / assunzioni esistenti che altri hanno preso: potrebbe esserci una buona ragione, o potrebbe non esserci, o ce n'era una che non si applica più.
Pensa in modo astratto.
Impara a vedere le cose come schemi e in termini astratti. Quando si individua un modello, considerare cose simili e vedere se è possibile applicare azioni da esso alla cosa corrente. Se la tua area tematica ha dei motivi denominati, imparali, ma non trattarli come soluzioni per tagliare i biscotti.
Non pensare in modo astratto.
Cerca sempre di vedere le cose così come sono: ricorda che gli "utenti" sono persone e non sono sempre logici o razionali. Pratica empatia con le persone usando ciò che crei.
Non dimenticare l'obiettivo.
A volte è facile impantanarsi con un particolare target / implementazione (ad esempio "come adattiamo questi controlli X nell'interfaccia utente?") Invece di ricordare il vero obiettivo (come "come permettiamo all'utente di fare Y?" )
Mai smettere di imparare.
Le conoscenze generali possono essere una grande fonte d'ispirazione - molti problemi sono già stati risolti da qualcuno - più sai e più potresti ricordare qualcosa applicabile alla situazione attuale.
Sii un buon programmatore, non solo un [linguaggio di programmazione].
Non aver paura di apprendere più tecnologie e tecniche: anche più lingue "sovrapposte" possono aiutarti a vedere le cose in termini diversi, ma una buona varietà di lingue diverse può aiutare di più. Naturalmente scegli alcune aree da specializzare / padroneggiare, ma assicurati anche di avere una base decente in concetti generali, che puoi ottenere imparando più lingue diverse,
Non dare per scontato che qualcuno sia troppo inesperto per aiutare.
A volte le persone che sembrano poco informate o che non hanno mai programmato possono sembrare inutili per un problema di programmazione, ma ciò non significa che dovresti ignorarle. Ognuno ha diverse prospettive e set di abilità e potrebbe fornire una visione unica che ti spinge a una soluzione.
I bambini piccoli possono soprattutto essere una buona fonte di una prospettiva "non contaminata" che può essere d'ispirazione.