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 intentar diseñar el sistema yo mismo (en paralelo).
En el transcurso de algunas iteraciones de ideas de ideas y de proponer lo que vi como sugerencias de arquitectura, mi líder me ha dado la respuesta de que la mayoría de lo que he estado haciendo fue "diseñar" y no "diseñar".
Describió la diferencia como que la arquitectura 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 preguntarte:
¿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 y que mi líder no consideró relevantes para la arquitectura:
- Se me ocurrió un algoritmo para cargar y descargar recursos de nuestro sistema y mi líder dijo que los algoritmos categóricamente no son arquitectura.
- Se me ocurrió una serie de eventos que el sistema debería generar y en qué orden debería generarlos, pero esto tampoco parecía cortarlo como arquitectura.
Parece que estoy atrapado en los detalles y no retrocedo lo suficiente. Encuentro que incluso cuando se me ocurre algo que está en el nivel de la arquitectura, a menudo llego allí probando varias implementaciones y analizando los detalles y luego generalizando y abstrayendo. Cuando describí esto a mi liderazgo, dijo que estaba tomando el enfoque equivocado: necesitaba pensar "de arriba abajo" y no "de abajo hacia arriba".
Aquí hay algunos detalles más 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.
- Somos una nueva empresa. Nuestro equipo de ingeniería es de aproximadamente 3-5 personas.
- Lo más parecido a lo que podría comparar nuestra aplicación es un CMS liviano. 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 complemento.
- La aplicación es ajax-y. El usuario descarga el cliente una vez y luego solicita los datos que necesita del servidor.
- Usaremos el patrón MVC.
- La aplicación tendrá autenticación.
- No estamos muy preocupados por el antiguo soporte del navegador (¡vaya!), Por lo que estamos buscando aprovechar lo último y lo mejor que está disponible y que saldrá a la luz. (HTML5, CSS3, WebGL ?, Extensiones de fuente 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 decenas de miles a millones y más.
- Esperamos que la aplicación esté disponible para siempre. Esta 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 sensible.
- La aplicación debe ser estable. (Idealmente, sería estable alrededor del nivel de Gmail, pero no necesita estar en el extremo de un rover de Marte).