Soy un desarrollador junior (~ 3 años de experiencia) y en mi trabajo estamos en el proceso de diseñar un nuevo sistema. Mi desarrollador principal será el arquitecto principal, sin embargo, me desafió a que intentara diseñar el sistema yo mismo (en paralelo).
En el transcurso de algunas iteraciones de ideas de lluvia de ideas y de proponer lo que vi como sugerencias de arquitectura, mi ejemplo me ha dado la opinión de que la mayor parte de lo que he estado haciendo era "diseñar" y no "diseñar".
Describió la diferencia como una arquitectura que es independiente de la implementación, mientras que un diseño es la descripción de una implementación. Dijo que necesito quitarme el sombrero de diseñador y ponerme el sombrero de arquitecto. Me dio un pequeño consejo sobre cómo hacerlo, pero también me gustaría preguntarle:
¿Cómo salgo del modo de diseñador de software y empiezo a pensar más como un arquitecto?
Aquí hay algunos ejemplos de "diseños" que se me ocurrieron que no fueron vistos como relevantes para la arquitectura por mi ejemplo:
- Se me ocurrió un algoritmo para cargar y descargar recursos de nuestro sistema y mi ejemplo dijo que los algoritmos no son categóricamente arquitectura.
- Se me ocurrió un conjunto de eventos que el sistema debería estar generando y en qué orden debería hacerlo, pero esto tampoco parece ser una arquitectura.
Parece que estoy atrapado en los detalles y no retrocedo lo suficiente. Encuentro que incluso cuando se me ocurre algo que está en un nivel de arquitectura, a menudo llegué allí probando varias implementaciones y revisando los detalles, luego generalizando y abstrayendo. Cuando le describí esto a mi guía, él dijo que estaba tomando el enfoque equivocado: tenía que estar pensando "arriba hacia abajo" y no "abajo hacia arriba".
Aquí hay algunos más detalles específicos sobre el proyecto :
- El proyecto que estamos diseñando es una aplicación web.
- Estoy estimando alrededor de 10-100 mil líneas de código.
- Estamos en un inicio. Nuestro equipo de ingeniería está formado por unas 3-5 personas.
- Lo más parecido a lo que podría comparar nuestra aplicación es un CMS ligero. Tiene una complejidad similar y se ocupa en gran medida de la carga y descarga de componentes, la gestión del diseño y los módulos de estilo de plug-in.
- La aplicación es ajax-y. El usuario descarga el cliente una vez y luego solicita datos a medida que los necesita del servidor.
- Utilizaremos el patrón MVC.
- La aplicación tendrá autenticación.
- No estamos muy preocupados por el soporte del navegador antiguo (¡qué pena!), por lo que buscamos aprovechar lo último y lo mejor que existe y que se publicará. (HTML5, CSS3, WebGL, Extensiones de origen de medios, ¡y más!)
Aquí hay algunos objetivos del proyecto :
- La aplicación necesita escalar. En el corto plazo, nuestros usuarios estarán en el orden de cientos a miles, pero estamos planeando para decenas de miles a millones y más.
- Esperamos que la aplicación sea para siempre. Esto no es una solución temporal. (En realidad, ya tenemos una solución temporal, y lo que estamos diseñando es el reemplazo a largo plazo de lo que tenemos).
- La aplicación debe ser segura, ya que puede tener contacto con información personal confidencial.
- La aplicación debe ser estable. (Idealmente, sería estable en el nivel de gmail, pero no necesita estar en el extremo de un rover de Marte).