Non c'è casella!
C'è un problema specifico da risolvere e una serie di vincoli che potrebbero essere applicati. Stabilisci quale sia il problema (pensa in modo astratto e in termini reali), definendolo sia in termini specifici basati su argomenti, sia in termini più generali.
Esaminare ciascuno dei vincoli (non fare supposizioni) per vedere se, quando e in quale misura potrebbero applicarsi. Osserva il problema dal punto di vista di chi influenza (non dimenticare l'obiettivo) e da dietro le quinte.
Non fare supposizioni.
Se si assume che certe cose siano vere quando non lo sono, ti impedirai di esaminare diverse prospettive. Metti in discussione anche le decisioni / assunzioni esistenti che altri hanno fatto - potrebbe esserci una buona ragione, o potrebbe non esserlo, oppure ce n'era una che non si applica più.
Pensa in modo astratto.
Impara a vedere le cose come modelli e in termini astratti. Quando si individua un pattern, considerare cose simili e vedere se è possibile applicare azioni da esso alla cosa corrente. Se la tua area tematica ha chiamato modelli, imparali - ma non trattali come soluzioni di cookie cutter.
Non pensare in modo astratto.
Cerca sempre di vedere le cose come sono - ricorda che gli "utenti" sono persone e non sono sempre logici o razionali. Pratica empatia con le persone che usano ciò che crei.
Non dimenticare l'obiettivo.
A volte è facile impantanarsi con un particolare obiettivo / implementazione (ad es. "Come inseriamo questi controlli X nell'interfaccia utente?") Invece di ricordare l'obiettivo reale (come "come possiamo consentire all'utente di fare Y?" )
Non smettere mai di imparare.
La conoscenza generale può essere una grande fonte di ispirazione - molti problemi sono già stati risolti da qualcuno - più conosci e più potresti ricordare qualcosa che è applicabile alla situazione attuale.
Sii un buon programmatore, non solo un bravo in [linguaggio di programmazione].
Non avere 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 altre può aiutare di più. Naturalmente scegli alcune aree per specializzarti / padroneggia, ma assicurati anche di avere una base decente in concetti generali, che puoi ottenere imparando più lingue diverse,
Non presumere che qualcuno sia troppo inesperto per aiutare.
A volte le persone che sembrano non molto informate, o che non hanno mai programmato, possono sembrare inutili per un problema di programmazione - ma ciò non significa che dovresti ignorarle. Ognuno di noi ha punti di vista e competenze diverse e potrebbe fornire una visione unica che ti porta a una soluzione.
I bambini piccoli possono essere in particolare una buona fonte di una prospettiva "incontaminata" che può essere d'ispirazione.