No hay caja!
Hay un problema específico que resolver y un conjunto de restricciones que podrían aplicarse. Determine cuál es el problema (piense de manera abstracta y en términos reales), definiéndolo en términos específicos basados en temas y en términos más generales.
Examine cada una de las restricciones (no haga suposiciones) para ver si, cuándo y en qué medida podrían aplicarse. Mire el problema desde la perspectiva de a quién afecta (no olvide el objetivo), así como desde detrás de escena.
No hagas suposiciones.
Si asumes que ciertas cosas son ciertas cuando no lo son, evitarás examinar diferentes perspectivas. También desafíe las decisiones / suposiciones existentes que otros han tomado: puede haber una buena razón para ello, o tal vez no, o haya una que ya no se aplique.
Piensa de manera abstracta.
Aprende a ver las cosas como patrones y en términos abstractos. Cuando detecte un patrón, considere cosas similares y vea si puede aplicar acciones desde él al elemento actual. Si su área temática tiene patrones con nombre, apréndalos, pero no los trate como soluciones para cortar galletas.
No pienses de manera abstracta.
Siempre trate de ver las cosas como son también: recuerde que los "usuarios" son personas, y no siempre son lógicos o racionales. Practica la empatía con las personas que usan lo que creas.
No olvides el objetivo.
A veces es fácil empantanarse con un objetivo / implementación particular (por ejemplo, "¿cómo encajamos estos controles X en la interfaz de usuario?") En lugar de recordar el objetivo real (como "¿cómo permitimos que el usuario haga Y?" )
Nunca dejes de aprender.
El conocimiento general puede ser una gran fuente de inspiración (alguien ya ha resuelto muchos problemas), cuanto más sepa, más recordará algo aplicable a la situación actual.
Sé un buen programador, no solo un buen [lenguaje de programación].
No tenga miedo de aprender múltiples tecnologías y técnicas, incluso múltiples lenguajes "superpuestos" pueden ayudarlo a ver las cosas en diferentes términos, pero una buena variedad de diferentes puede ayudar más. Por supuesto, elija algunas áreas para especializarse / dominar, pero también asegúrese de tener una base decente en conceptos generales, que puede obtener al aprender varios idiomas diferentes,
No asumas que alguien es demasiado inexperto para ayudar.
A veces, las personas que parecen poco informadas, o que nunca han programado, pueden parecer inútiles para un problema de programación, pero eso no significa que deba ignorarlas. Todos tienen diferentes perspectivas y conjuntos de habilidades, y pueden proporcionar una visión única que los tramita a una solución.
Los niños pequeños pueden ser especialmente una buena fuente de una perspectiva "no contaminada" que puede ser inspiradora.