Je suis développeur junior (~ 3 ans d'expérience) et mon travail consiste à concevoir un nouveau système. Mon développeur principal sera l'architecte principal, mais il m'a mis au défi d'essayer de concevoir le système moi-même (en parallèle).
Au fil de quelques itérations d'idées de brainstorming et proposant ce que je considérais comme des suggestions d'architecture, mon responsable m'a indiqué que la plupart de ce que je faisais était "conçu" et non "architecturé".
Il a décrit la différence en tant qu'architecture indépendante de la mise en œuvre, alors qu'une conception est la description d'une implémentation. Il a dit que je devais enlever mon chapeau de designer et mettre mon chapeau d'architecte. Il m'a donné quelques conseils sur la façon de procéder, mais j'aimerais également vous poser la question suivante:
Comment sortir du mode concepteur de logiciel et commencer à penser davantage comme un architecte?
Voici quelques exemples de "designs" que j'ai créés et qui n'étaient pas considérés comme pertinents par l'architecture pour l'architecture:
- Je suis arrivé avec un algorithme pour charger et décharger des ressources de notre système et mon responsable a dit que les algorithmes ne sont catégoriquement pas architecturaux.
- Je suis venu avec un ensemble d'événements que le système devrait être en train de dresser et dans quel ordre il devrait les élever, mais cela aussi n'a pas semblé le couper en tant qu'architecture.
Il me semble que je suis pris dans les détails et que je ne recule pas suffisamment. Je trouve que même lorsque je trouve quelque chose qui se situe au niveau de l'architecture, j'y arrive souvent en essayant diverses implémentations et en bricolant dans les détails, puis en généralisant et en faisant abstraction. Quand j'ai décrit cela à mon tour, il a dit que je prenais la mauvaise approche: je devais penser «de haut en bas» et non de «bas en haut».
Voici quelques détails plus spécifiques sur le projet :
- Le projet que nous architectons est une application Web.
- Je compte entre 10 000 et 100 000 lignes de code.
- Nous sommes une start-up. Notre équipe d'ingénieurs est composée de 3 à 5 personnes.
- La chose la plus proche à laquelle nous pourrions comparer notre application est un CMS léger. Il présente une complexité similaire et traite en grande partie du chargement et du déchargement des composants, de la gestion de la structure et des modules de style de plug-in.
- L'application est ajax-y. L'utilisateur télécharge le client une fois, puis demande les données requises par le serveur.
- Nous utiliserons le modèle MVC.
- L'application aura une authentification.
- Nous ne sommes pas très préoccupés par la prise en charge des anciens navigateurs (ouf!), Nous cherchons donc à tirer parti des informations les plus récentes et les plus performantes qui soient. (HTML5, CSS3, WebGL?, Extensions de source multimédia et plus encore!)
Voici quelques objectifs du projet :
- L'application doit évoluer. À court terme, nos utilisateurs atteindront des centaines, voire des milliers, mais nous prévoyons des dizaines de milliers, voire des millions.
- Nous espérons que l'application sera là pour toujours. Ce n'est pas une solution temporaire. (En fait, nous avons déjà une solution temporaire, et ce que nous concevons est le remplacement à long terme de ce que nous avons).
- L'application doit être sécurisée, car elle peut entrer en contact avec des informations personnelles sensibles.
- L'application doit être stable. (Idéalement, il serait stable par rapport au niveau de gmail, mais il n'aurait pas besoin d'être à la limite d'un rover sur Mars.)