Me he dado el lujo de diseñar varias bases de datos de complejidad media, todas utilizadas en empresas, con varios front-end que incluyen web, Access y C #.
Por lo general, me he sentado y elaboré el esquema de la base de datos de antemano. Esto siempre tuvo más sentido para mí. Sin embargo, no ha habido un solo caso en el que no termine haciendo cambios, agregando nuevas tablas o viviendo con aspectos que me molestaron y que básicamente fueron demasiado tarde para solucionarlos.
No creo que la cura sea escribir el código primero. Y no creo que el problema sea "requisitos comerciales insuficientes" o, al menos, no uno que podría haberse resuelto por completo. Los usuarios no saben lo que necesitan y no tengo el poder para hacerlos pensar más o ser más inteligentes o más conscientes o responder mejor a mis preguntas. O discuten y me ordenan hacer algo de cierta manera.
Los sistemas que construyo generalmente están en áreas nuevas en las que nadie ha entrado antes. No tengo el compromiso de la organización, los recursos o las herramientas para hacer el tipo de trabajo que podría hacer un equipo de desarrollo de profesionales de diseño de primer nivel a quienes se les pagó como equipo diez veces más de lo que hago para construir cosas dos veces el tiempo
Soy bueno en lo que hago. Pero solo uno de mí lo hace en un entorno que "no hace desarrollo".
Dicho todo esto, estoy mejorando para descubrir las reglas de negocios. Y veo una especie de tercera opción:
Antes de diseñar la base de datos, y antes de escribir cualquier código, dibuje pantallas crudas que muestren cómo funcionará la aplicación. Deben estar dibujados a mano para evitar que alguien comente sobre la fuente, el tamaño o las dimensiones; solo desea la función.
Con transparencias y trozos de papel, puede intercambiarlos, hacer que una persona sea la computadora, dos sean usuarios no técnicos expertos en la materia (dos para que hablen en voz alta) y una persona allí como facilitador que toma notas y dibuja los usuarios sobre sus procesos de pensamiento y confusiones. Los usuarios "hacen clic" y arrastran y escriben en cuadros, la "computadora" actualiza la pantalla y todos pueden experimentar el diseño. Aprenderá cosas que de otro modo no podría haber aprendido hasta muy avanzado el proceso de desarrollo.
Tal vez me estoy contradiciendo a mí mismo, tal vez sea un mejor descubrimiento de requisitos. Pero la idea es diseñar la aplicación primero, sin escribir ningún código. ¡He comenzado a hacer esto a pequeña escala, y está funcionando! A pesar de los problemas en mi entorno, me está ayudando a diseñar mejor la base de datos desde el principio. Aprendo que una columna debe moverse a una nueva tabla principal porque hay varios tipos. Aprendo que la lista de trabajo debe tener órdenes permanentes que no provienen del sistema de órdenes integrado. ¡Aprendo todo tipo de cosas!
En mi opinión, esta es una gran victoria.