Your new post is loading...
Your new post is loading...
Dans le premier article de cette série, j’ai défini la notion de dette technique et celle de dette fonctionnelle, ou « Functional Debt », qui est fondamentalement du code bien écrit mais pas terminé ou plus utilisé. A l’inverse de la dette technique, ce code inutile (dette fonctionnelle) n’est pas imputable à un mauvais développement.
Dans le second article sur la dette fonctionnelle, je vous ai donné quelques clés pour identifier les zones de votre application où s’est installée la dette fonctionnelle au fil du temps. Par exemple, discuter avec les utilisateurs est un préalable pour identifier la dette fonctionnelle. Vous collecterez un tas d’informations utiles, voire surprenantes, sur le logiciel existant.
Aujourd’hui je souhaite continuer cette série avec un exemple concret. J’espère qu’il vous aidera à éliminer petit à petit la dette fonctionnelle de vos applications.
Don't let legacy code technical debt slow down your business. Learn agile techniques to help manage and reduce product debt.
Ramanathan: I'm going to talk about my experiences with building Piranha and deploying it at Uber, to reduce stale feature flag debt. I will provide an introduction to feature flags, explain how they can introduce technical debt, and the challenges associated with handling the debt.
The panelists discuss how they identify technical debt, how they make room to invest in paying debt down, and how they approach work to minimize future debt.
Réécrire ou ne pas réécrire ? « Sur la base de mon expérience ici, vous ne devriez probablement pas le faire si vous croyez dans le battage médiatique indiquant que la réécriture n'est jamais la bonne décision. Dans tous les cas, vous devez par défaut choisir la position ‘non’, puis travailler très dur pour la justifier si nécessaire. Voici quelques scénarios où une réécriture pourrait être justifiée : Si votre architecture ou schéma est très loin de s’aligner avec ce dont vous avez besoin et qu'il n'y a pas de chemin de migration clair, car la mise à jour incrémentielle de l'architecture ou des schémas serait extrêmement difficile Si ces problèmes ralentissent considérablement votre équipe Si votre pile technologique actuelle empêche de nombreux ingénieurs de contribuer et les former à la pile technologique n'est pas une option. « Même si vous cochez toutes ces cases, vous devez tenir compte des réalités commerciales et savoir si cela a du sens pour votre entreprise, votre équipe. Il peut y avoir plus de scénarios où une réécriture est justifiée. Il est difficile de le justifier, mais cela en vaut la peine et peut être couronné de succès ». En définitive, une réécriture de code vous donne l'avantage de l'expérience : vous connaissez les faiblesses de l'ancien système, les défauts de conception, les exigences actuelles et la future feuille de route. Vous pouvez faire des planifications et concevoir un système qui surmontera les problèmes que vous avez anticipés. L'inconvénient est que vous devez maintenir deux systèmes pendant que vous écrivez le nouveau. En revanche, le refactoring vous permet de remplacer lentement les anciens morceaux de code de votre système par de nouveaux. Prenez une fonction, une classe ou un module, et vous le/la réécrivez dans le cadre de votre projet. Tous vos tests et intégrations sont là, il est facile de vérifier que vous n'avez rien cassé, pour vous assurer que la fonctionnalité reste la même. Mais vous ne pouvez pas faire des merveilles avec le refactoring de code, vous ne pouvez pas choisir un langage de programmation différent et la plupart du temps, vous ne pouvez même pas remplacer le framework principal de votre projet.
These 10 VS Code extensions will help you keep your codebase healthy and manage technical debt continuously.
Much of the time, following the Boy Scout Rule won’t be hard. It’s an incremental strategy. It’s easy to start and easy to sustain. Here are some typical challenges and ideas on how to be a Boy Scout. Adding to a Long Function Extract something; there must be plenty of opportunities to pull out some idea and name it. You want to add 3 lines, take out 5. Net improvement leaves a function 2 lines shorter. But I bet you can easily do better. Fix another complex conditional nearby to start a pattern of improvement. Adding to a complex conditional Extract the conditional into a helper function. Name it and its parameters well. Write a few tests for it. That’s picking up the obvious beer cans. Look at the extracted code carefully. Does the conditional really belong with some other module? If so, the complex conditional is likely to be duplicated and the newly extracted function should be moved. Do the work or add it to your technical debt list. Copy/Paste/Tweak Temptation You see a copy/paste/tweak opportunity that meets the functional requirements. Don’t do it, except maybe to test your hypothesis. Before, or after the change, do what the code is telling you: extract the common code into a helper function. Generalize and parameterize it so it handles both cases. Write tests around the code to be extracted to guard against breaking existing functionality. Make a list of the other previous cut/paste/tweaks of the same code for conversion. Cryptic Local Variable Name Once you figure out what the variable is for, rename it to help you, and your teammates, on the next code visit. Deep Nesting Pull out a nesting level or two into a helper function. Broken Glass and Beer Cans in the Fire Pit Put on some gloves. Clean out the big pieces of glass and cans. Bag the trash. A heavy duty bag is best. Be careful not to put any embers in the bag. Take the trash back to the boat.
Attends… reste ! je vais te raconter quelque chose ! � Dans cet article, je vais t’expliquer comment avec une équipe de trois développeurs nous avons fait évoluer le socle technique d’une grosse application monolithique, de manière transparente pour les utilisateurs.
Cigref has published its latest report entitled "Managing IT debt and obsolescence: Preserving the agility, security and innovation capacity of IT".This...
La Qcon London 2017 a dédié une track complète autour du dark code et du legacy. Perspective autour de la suppression de code, des Quality Views et d'une boule de cristal de priorisation de la dette technique.
La dette logicielle existe sous différentes formes. La dette technique, largement connue, et d'autres formes comme la dette de compétence ou de qualité. La dette logicielle peut causer une augmentation des coûts de maintenance du produit et peut déprimer les développeurs. Plusieurs solutions existent pour la gérer.
Le Cigref publie son dernier rapport intitulé “Pilotage de la dette et de l’obsolescence IT : Préserver l’agilité, la sécurité et la capacité d’innovation...
Here are some specific blueprints to make refactoring part of your team’s schedule, so it doesn’t get to be a burden on your agility...
|
Lisez aussi :
Réduire la dette technique et fonctionnelle « Functional Debt » – Part #3
Dette fonctionnelle vs. dette technique – Part #2 : comment identifier la “functional debt”
Gérer la dette technique, c’est bien, mais qui gère la dette fonctionnelle ? – Part #1
It's tempting to get straight to the point: how to remove tech debt, and how to keep it at bay. But that would be missing the journey. The journey without which you can't really appreciate the destination. So let's start with the time when you were not aware of this thing called "tech debt."
Technical debt is complicated to handle and has no specific metrics attached to it. Moreover, quantifying the principal debt amount from the point the shortcut was first taken and estimating the accurate resources needed to pay off the interest and the principal is no easy job. It is equally difficult to predict the expenditure of resources on technical debt over the years. All this uncertainty around the quantification of technical debt eventually leads to ignorance. For starters, as there is no definite loss associated with it, you will ignore it for as long as you can. However, there’s only so much time you can go before the debt becomes a burden you can no longer carry. The repercussions of unattended technical debt are visible at all levels within the company. There are 3 types of debts that organizations experience:- Accidental technical debt - As systems undergo modifications and evolve according to changing user requirements, development teams often realize that the earlier functionality does not work. As a result, refactoring the application becomes a priority, and while balancing every aspect of the development process, your teams may accidentally build technical debt on the way. Deliberate technical debt - A common debt that development teams choose to grow due to tight deadlines or unexpected work pressure. In this scenario, the teams have the required knowledge of what can be improved but intentionally overlook it to achieve on-time product delivery. Bit rot technical debt - This type of debt occurs over time as developers frequent changes in the system. The original components are modified without considering the initial application design.
Recently, OutSystems surveyed 500 large companies around the world to examine the cost of technical debt facing businesses and uncover the challenges companies face as they confront its causes. The results from the companies surveyed were many of the same things I’ve observed throughout my career. It’s important to note that while the causes of technical debt have largely remained the same, the pace at which technical debt occurs has grown substantially. “And so it's a hack, right? What we call a hack at OutSystems, they did a hack to just release the software quickly. And those hacks compound into technical debt.” - on the Dev Interrupted podcast at 27:11 The survey we conducted isolated three major causes of technical debt. They are as follows: - The amount of developer frameworks. An increase in frameworks leads to an increase in technical debt.
- Developer erosion. Employees leaving an organization and taking legacy knowledge with them.
- Compromises in quality of architecture and code. Often caused by a shortsighted view that what needs to be done now is more important than long-term stability of the codebase.
In the past, companies believed they could buy their way out of this problem, but that strategy has proven ineffective. The reality is, the most successful companies must build the software they require to meet their business needs. Simply purchasing what you need doesn’t solve your problems because even purchased systems must be cobbled together, requiring unique API’s, unique UI’s, unique portals, and unique mobile applications.
Recently, Stepsize surveyed 200+ software engineers from different industries to learn how codebase health impacts engineer hiring and retention. In this article, I’ll share some of the key stats from the survey, why investing in a codebase is crucial for businesses, and questions you can ask in the interview as an engineer to learn about the company’s codebase health. Our Findings 82% believe that lack of proper development practices affects their job satisfaction. 62% consider code quality as an important factor when choosing a new job. 51% of engineers left or considered leaving a job because of technical debt. For 21% of engineers, excessive amounts of technical debt have been the number one reason for changing a job. Both junior and senior developers equally consider codebase health to be an important factor when choosing a new job. Today, hiring and retaining developers is one of the biggest challenges for tech companies. And while recruiters, hiring managers, and leaders are focusing on attracting new tech talent, they might be ignoring one of the biggest reasons they are losing them in the first place: codebase health.
Small, Medium, and Large Technical Debt To start managing your technical debt, you first need to decide whether you are dealing with the small, medium, or large pieces of debt and work separately with each. Small pieces of debt: the type of tech debt that can be addressed as soon as the engineer spots it in the code and it’s within the scope of the ticket they're working on. Medium pieces of debt: the type of debt that can be addressed within a sprint. It should go through the same sprint planning process as any feature work and be considered just as rigorously. Large pieces of debt: the tech debt that cannot be addressed immediately or even in one sprint. The best companies we've interviewed have quarterly technical planning sessions in which all engineering leaders participate.
Nom : rewrite.png Affichages : 80932 Taille : 40,5 Ko Quelles étaient les options ? À ce stade, Remesh a réalisé que sa base de code avait besoin d'un changement majeur. Dans ce cas de figure, trois options se posent à vous : Le refactoriser jusqu'à ce que le problème soit résolu Le réécrire d'une traite Le réécrire au coup par coup « Pour le frontend, le refactoring n'était pas vraiment une option. Notre version d'Angular était suffisamment ancienne pour que, malheureusement, nous n'ayons pas vraiment de chemin de mise à niveau clair vers une version moderne d'Angular (de toute façon nous ne voulions pas être sur une version d'Angular). Et puisque nous anticipions des changements majeurs dans l'interface utilisateur et l'API, un refactoring ne serait pas réalisable. Donc, sur le frontend, nous devions décider entre réécrire d'un seul coup ou réécrire au coup par coup. « Le back-end avait quelques problèmes que nous voulions résoudre - notre schéma, notre langage et notre base de code ne correspondaient plus au problème que nous résolvions. Nous avons utilisé Elixir pour son support massif de concurrence, pourtant nous n'en avons jamais eu besoin et cela a fini par nous porter préjudice : la façon dont la concurrence est gérée dans la machine virtuelle Erlang a rendu le profilage très difficile, car vous savez ce qui est calculé, mais pas d'où il est appelé - et bonne chance avec le réglage des performances. La base de code Elixir a également limité la contribution de nos ingénieurs ML à la base de code backend : ils travaillaient en Python tous les jours et n'avaient pas le temps de se plonger profondément dans Elixir. Pour faire court, nous voulions quitter Elixir et passer à Python, car alors toute notre équipe aurait pu contribuer, le langage prendrait en charge les problèmes et nous aurions plus de facilité à profiler le code ». Au bout du compte, l’argument en faveur de la réécriture se résumait vraiment à cette confluence de facteurs : Remesh voulait que chaque membre de son équipe puisse contribuer à la base de code backend, et Python avait l’avantage d'avoir déjà une large adoption déjà au sein de l’équipe et d’être facile à apprendre L’ancienne base de code était si fragile et si peu testée que sa refactorisation serait un processus ardu. Remesh pouvait gagner en efficacité en passant à un framework « opinionated » comme Django, avec beaucoup de valeurs par défaut permettant de gagner du temps (comme Django Admin). Remesh voulait avoir l'opportunité de créer une toute nouvelle version influencée par ce que l’entreprise avait appris des clients et pourrait ensuite gérer la transition vers la nouvelle version plutôt que de mener une bataille pendant 12 mois avec beaucoup de clients à chaque changement.
Dans cet article, trois experts discutent sur ce que peuvent faire les équipes d'ingénieurs pour communiquer l'importance du traitement de la dette technique aux dirigeants des entreprises.
If you were buying a car, or a TV, you as the purchaser would do your best to understand the product that you are buying, the quality tradeoffs, and the capabilities. So why is so much of software opaque to the business? Why does the business have a fire-and-forget mentality and little interest in understanding […]
Pour permettre le développement de produits sécurisés, les processus dédiés aux développements de l'application doivent inclure des tâches liées à la sécurité.
Faire des logiciels, tout le monde sait. Revenir aux fondamentaux, peu en sont capable. Cette présentation revient sur le principe de Dette Technique et montre la différence avec l'entropie liée aux pratiques de développement.
The book Kill it with Fire by Marianne Bellotti provides strategies that organizations can use to modernize, maintain, and future-proof their systems. She suggests choosing strategies based on the organizational context, and defining what value you’re hoping to see from modernization.
|