= Environnement et méthodes de travail

"Make it work, make it right, make it fast"
-- Kent Beck

En fonction de vos connaissances et compétences, la création d’une nouvelle application est relativement facile à mettre en place. 
Le code qui permet de faire tourner cette application peut ne pas être élégant, il fonctionnera. 
Les problèmes arriveront lorsqu'une nouvelle demande sera introduite, lorsqu'un bug sera découvert et devra être corrigé 
ou lorsqu'une dépendance cessera de fonctionner ou d'être disponible. 
Or, une application qui n’évolue pas, meurt. 
Tout application est donc destinée, soit à être modifiée, corrigée et suivie, soit à déperrir et à être délaissée 
par ses utilisateurs.
Et c’est juste cette maintenance qui est difficile. 

L’application des principes présentés et agrégés ci-dessous permet surtout de préparer correctement tout ce qui pourra arriver, 
sans aller jusqu’au « *YAGNI* » qui consiste à surcharger tout développement avec des fonctionnalités non demandées, 
juste « au cas ou ». Pour paraphraser une partie de l’introduction:

Getting software right is hard: it takes knowledge and skills that most young programmers don’t take the time to develop. 
It requires a level of discipline and dedication that most programmers never dreamed they’d need. 
Mostly, it takes a passion for the craft and the desire to be a professional.
-- Robert C. Martin, Clean Architecture

Avant de démarrer le développement, il est nécessaire de passer un peu de temps sur la configuration de l'environnement.

Les morceaux de code que vous trouverez ci-dessous seront développés pour Python3.9+ et Django 3.2+. 
Ils nécessiteront peut-être quelques adaptations pour fonctionner sur une version antérieure.

Dans cette partie, nous allons parler de *méthodes de travail*, avec comme objectif d'éviter que l'application ne tourne que sur notre machine et que chaque déploiement ne soit une plaie à gérer. 
Chaque mise à jour doit être réalisable de la manière la plus simple possible:

. démarrer un script,
. prévoir un rollback si cela plante
. se préparer une tisane en regardant nos flux RSS (si cette technologie existe encore...).

NOTE: La plupart des commandes qui seront présentées dans ce livre le seront depuis un shell sous GNU/Linux. Certaines d'entre elles pourraient devoir être adaptées si vous utilisez un autre système d'exploitation (macOS) ou n'importe quelle autre grosse bouse commerciale.

include::maintainable-applications/_index.adoc[]

include::environment/_index.adoc[]

include::django/_index.adoc[]
