Cuál es la mejor manera de diseñar software?

Esto es como preguntar: ¿cómo puede un gramático escribir una buena historia? Se requiere un conjunto de habilidades diferentes. Además, ¿a qué tipo de diseño te refieres?

Así que eres capaz de ocuparte de los detalles de la implementación. Eso es un buen comienzo. Si tu proyecto es muy pequeño y tienes una idea bastante buena de lo que quieres conseguir, puedes intentar el método del codificador vaquero: empezar a escribir el programa más simple posible, refactorizar, extender, refactorizar. Este método (o su ausencia) tiene la virtud de ensuciar las manos del programador. Aprenderá algo. Construirás algo. Puede que sea monstruoso. Al menos, evitarás la parálisis del análisis y, posiblemente, la sobreingeniería.

Tradicionalmente, el diseño en la ingeniería de software significa que debes intentar trazar cómo pretendes que todo funcione, incluso antes de escribir una sola línea de código. Ahí es donde entran en juego el diseño orientado a objetos y otros métodos similares (véase el post de Keith Ensign para ver algunos enlaces sobre el tema). Las metodologías ágiles no son una excusa para saltarse este paso, pero pueden servir de recordatorio para mantener la sencillez del proyecto inicial y evitar diseñar futuras extensiones demasiado pronto. La fase de diseño de la ingeniería comienza con unas buenas especificaciones y el buen diseño suele surgir de las ideas extraídas de la experiencia práctica más que de la aplicación de metodologías conocidas. Tiene poco que ver con el diseño del producto, ya que requiere conocer primero lo que se va a construir y responder adecuadamente a estos requisitos.

Las buenas especificaciones también se diseñan. Decidir qué hará su software y cómo servirá a su propósito se nutre de varios conocimientos. Los de la vieja escuela (ingenieros de software) lo llaman etapa de análisis. Otros hablarán de diseño del servicio. Esta actividad puede variar en función del tipo de software que se vaya a crear. La experiencia en el conocimiento del dominio, la comprensión del comportamiento del usuario y la capacidad de adaptar los procesos organizativos son buenas cualidades para empezar antes de intentar escribir historias de usuario y pruebas de aceptación. El lápiz y el papel también pueden hacer maravillas en esta fase, ya que pueden ayudarle a explorar soluciones basadas en sus observaciones con pocas limitaciones.

Una tercera categoría de diseño es el diseño de los visuales y de la experiencia del usuario. Un buen toque final puede marcar una diferencia considerable en su producto final. De nuevo, su experiencia no se puede resumir tan sucintamente...

Cada uno de estos esfuerzos de diseño viene con su lote de prácticas. Muchas de estas prácticas tienen como objetivo guiar o estructurar los conocimientos del diseñador. Cuanto más conozca a sus usuarios, sus objetivos y los materiales con los que va a trabajar, más cerca estará de proponer una solución satisfactoria. Tu experiencia en programación debería guiarte en las líneas del diseño de ingeniería. Puede que te ayude a vislumbrar nuevas posibilidades en el frente del diseño de servicios. Sin embargo, puede que tengas que dejar de lado la tecnología y aprender desde diferentes perspectivas para imaginar un producto que sirva para su propósito.