Contexte : Je suis un développement incorporé avec seulement 2 ans d'expérience solide. Je suis le seul employé technique d'une start-up de 4 personnes. Nous avons un MVP de notre produit et sommes prêts à développer la prochaine itération de celui-ci. Le MVP original a été développé par une équipe d'entrepreneurs partenaire, avec un devis plus ancien pour tout logiciel. J'ai rejoint la société trop tard pour avoir une contribution à la conception du MVP. Le produit est un périphérique de type passerelle: Linux incorporé, les messages sont d'une manière d'une manière un moyen, une intelligence limitée se produit à l'intérieur, ils sortent de l'autre côté.
le "problème": Tout dans le système semble être interprété dans une seule base de données SQLite. Les messages traités et non transformés vivent dans la même table (avec un champ utilisé pour indiquer lequel ils sont), le provisionnement des choses liées à une autre table, même la journalisation et le débogage sont effectuées en écrivant à une autre table dans la base de données. Le système est écrit en grande partie dans python mais la plus grande partie de celle-ci est une classe massive remplie de wrappers pour complexes SQL qui semblent faire la majeure partie de la manipulation des données.
Tout cela me met mal à l'aise, en particulier les messages, car il ressemble à un cas classique de "base de données en tant que motif de conception de la file d'attente". Cela étant dit que j'ai du mal à articuler exactement pourquoi cela ne va pas à mon patron de non-développement, autre que les mentions de maintenabilité vagues et nébuleuses, difficulté à introduire des changements en raison du manque de modularisation, ainsi que du manque de clarté dans la manière dont les données flux et est en cours de traitement. Cela n'aide pas que l'entrepreneur a "l'autorité des années d'expérience" sur mon jugement.
Suis-je justifié de me sentir mal à l'aise de ce choix de conception? Je veux dire, la chose fonctionne en principe. Je sais que le désir de refacteur peut être assez fort, irrationnel et ne devrait pas toujours être agi sur des contraintes commerciales données. Mais alors ... j'ai un peu envie de commencer principalement à partir de zéro que déchirant que des bits utiles du premier MVP seraient plus propres et prennent moins de temps que de travailler avec le système créé jusqu'à présent. Mais est-ce juste ma plus jeune-tête-à-la-chaussée?
Votre premier problème est que vous pensez que la conception est "erronée". Ce n'est vraiment pas la bonne façon de considérer les choses. Des conceptions différentes font plutôt des compromis de conception différents. Toute conception a des avantages et des inconvénients qui ont pesé les uns contre les autres. S'il y a un problème avec la conception, ce n'est pas "faux" mais plutôt que cela fait un mauvais choix de compromis. Ne le pensez pas ou n'expliquez-le pas comme cela, la conception est fausse, mais pense plutôt en ce qui concerne la manière dont un meilleur compromis pourrait exister.
Le fait que vous utilisiez sqlite et qu'un système de linux intégré rend la base de données comme une queue beaucoup moins problématique que ce serait dans d'autres circonstances. La base de données-comme-weee a deux inconvénients majeurs:
Cependant, les opérations SQLITE sont beaucoup moins chères qu'une base de données typique. La perte de performance est donc minime. SQLite prend également en charge une notification modifiée par des données permettant au programme de détecter les modifications de la base de données sans interroger à plusieurs reprises la base de données.
SQLite vous donne beaucoup de fonctionnalités gratuitement. Fondamentalement, vous définissez vos tables et SQLite s'occupe de la persister de les persister sur le disque, de les charger lorsque vous redémarrez, en veillant à ce que le fichier ne soit pas corrompu, vous donnant de puissants outils de requête, permettant ainsi des opérations complexes sur les données. De plus, SQLite vous donne tout cela sans configurer d'autres applications, sa bibliothèque que votre code utilise. Si vous n'utilisez pas SQLite pour toutes ces affaires, vous devrez mettre en œuvre cette fonctionnalité vous-même.
Dans mon évaluation, l'utilisation de SQLite de cette manière est un choix assez judicieux. Votre réponse me concerne comme quelqu'un qui n'a pas assez utilisé des bases de données pour connaître leur pouvoir. Bien sûr, il peut y avoir d'autres considérations que je ne sais pas ce changement qui change, ni le système est simplement mal construit d'une autre manière.
Mais si vous voulez vous préoccuper de votre patron:
Je pense que vous faites une erreur de programmeur junior courante dans votre jugement ici. Parce que la solution n'est pas la façon dont vous l'auriez fait, vous voulez la repenser. L'une des choses les plus importantes que vous devez être à l'aise est que la conception est la façon dont vous pensez que cela devrait être peu importe. C'est vraiment, voire n'a pas d'importance du tout. Tout ce qui compte est de savoir si cela fonctionne, qu'il puisse être amélioré et ce que cela coûtera (temps et argent) pour apporter ces améliorations.
Vous n'avez pas mentionné un seul problème concret. Vous voyez un design que vous n'aimez pas. Mais pourquoi votre responsable devrait-il prendre soin de votre responsable? Avez-vous produit des solutions logicielles de production de travail d'une échelle et d'une complexité similaires? Ils ont une vache à la traite parfaitement bonne et vous leur voulez pour l'échanger pour des haricots magiques.
Commençons par l'hypothèse que ce logiciel fonctionne. C'est fiable et fonctionne bien. La satisfaction de la clientèle est élevée. Maintenant, vous entrez et dites au gestionnaire que vous voulez réécrire. Fondamentalement, vous dites que l'heure et les investissements initiaux qui sont allés construire en construction sont un COÛT SUNK et que vous souhaitez fermer un logiciel professionnel et rentable pour vos capacités inconnues.
Écrire le code n'est que le début de la production. Très probablement, il existe de nombreux défis techniques résolus dans la solution actuelle que vous n'êtes pas au courant. Prendre une refonte signifie que vous devrez ré-découvrir les choses qui étaient déjà résolues. En cours de route, vous êtes tenu d'introduire de nouveaux problèmes. Il y a une bonne chance pour créer de nouveaux bugs de production. Et vous voulez que votre responsable s'inscrit pour cette période, le coût et le risque avec zéro avantage concret? Comprenez-vous pourquoi ce n'est pas un bon choix de leur part? Être non technique le fait en réalité plus Probablement le gestionnaire vous permettra de le faire, pas moins. Il est beaucoup plus facile de convaincre un responsable non technique qu'une réécriture inutile vaut la peine de faire. Un responsable compétent saura qu'il n'y a pas de pratiquement no pas à l'envers pour laisser le développeur junior réécrire la solution de travail du vétéran.
Maintenant, disons que la mise en œuvre actuelle est buggy, lente et/ou instable. Peut-être que la solution est fragile et que quelques modifications prendront plus de temps qu'une réécriture complète. C'est une situation différente entièrement. Mais vous pourriez toujours ne pas gagner l'argument: Parfois, le coût de la correction est supérieur au bénéfice. J'ai perdu le nombre de fois que j'ai dû travailler dans les limites d'un mauvais design, car une réécriture n'était pas réalisable ou justifiable.
À ce stade de votre carrière, vous devriez être moins inquiet de la construire votre chemin et de plus en plus d'apprendre de ce que d'autres ont fait. Ce n'est pas toujours le cas que vous apprenez de bonnes façons de faire les choses. Mes premières années en tant que développeur ont été consacrées à un autre code assez atrocent dans un design pauvre construit avec une plate-forme mourante. Je l'ai détesté à l'époque, mais c'était une partie de la meilleure éducation que j'aurais pu espérer. J'ai beaucoup appris sur la façon dont non faire des choses et pourquoi la bonne conception compte. Une personne sage m'a dit une fois: "Les gens intelligents apprennent de leurs erreurs. vraiment Les gens intelligents apprennent des erreurs des autres."
Je peux me mettre à votre place, ainsi que dans l'entrepreneur.
Demandez-vous les questions suivantes:
Tout d'abord, combien de temps faudra-t-il pour changer la conception? ça en vaut vraiment la peine?
Effort dans l'ajout de nouvelles fonctionnalités au produit.
Bons points de la conception tel qu'il est (c'est la clé, car il a beaucoup plus d'expérience que vous, il pourrait être conçu pour certains utilisateurs, ...)
Avez-vous eu un transfert du produit? C'est peut-être ce dont vous avez besoin, vous ne comprenez pas le produit, la motivation et sa conception.
Ce n'est peut-être pas si mauvais, juste un peu plus d'informations requises