Il n'a jamais été aussi facile de se lancer dans le développement iOS qu'aujourd'hui. Les outils sont en grande partie gratuits et il existe une pléthore de contenus éducatifs de qualité disponibles en ligne, y compris certains provenant d'Apple elle-même. Tous ceux qui travaillent sur iOS depuis longtemps vous le diront : il y a un sentiment magique à démarrer un nouveau projet et à créer rapidement quelque chose à partir de rien.
Cependant, à mesure que la taille d'une base de code augmente et que le nombre de développeurs qui y contribuent se multiplie, ce sentiment de progrès rapide peut se transformer en une lente tristesse. Le développement de logiciels est un processus très itératif, de sorte que le temps qui s'écoule entre une petite modification du code et la possibilité de tester/expérimenter cette modification est très important pour la productivité globale du développeur. Chez DoorDash, nous nous efforçons de minimiser ce temps de latence, afin que notre développement soit rapide et que nos ingénieurs soient satisfaits.
Nous allons parler de quelques-unes des approches que nous adoptons pour augmenter la vitesse de développement, mais la première est aussi la plus simple : achetez à vos ingénieurs iOS de nouveaux Macbook Pros M1 Max !
Les nouveaux MacBooks M1 accélèrent tout
Apple a lancé les puces M1 grand public dans le Mac Mini et le MacBook Air à la fin de l'année 2020 (avec des performances impressionnantes) et, selon les rumeurs, les nouveaux MacBook Pros devaient sortir peu de temps après. Nous voulions prendre de l'avance et nous avons donc commencé à élaborer un argumentaire en faveur de la mise à niveau de toute notre équipe iOS vers ces nouveaux ordinateurs portables dès que possible.
D'un point de vue commercial, le calcul est simple : Un investissement dans la productivité des développeurs a un "délai de récupération". Il s'agit simplement d'une fonction des gains de temps escomptés et des coûts d'ingénierie. Au lieu de récupérer l'investissement en dollars, on peut le récupérer en temps d'ingénierie qui aurait été perdu autrement. Dans notre cas, il s'agissait d'estimer le temps que ces nouveaux ordinateurs portables permettraient à l'ingénieur moyen de gagner chaque jour et de le multiplier de manière appropriée.
Based on rough usage patterns, we assumed an average iOS engineer does around five clean builds and 30 incremental builds each day... We multiply that by our average build times to get a sense for how much time each engineer spends “waiting for the compiler” each day. A certain xkcd comic comes to mind.
De même, nous avons dû mesurer la rapidité des nouveaux ordinateurs portables pour calculer le temps gagné. Pour ce faire, avant que le matériel ne soit disponible, nous avons dû faire des estimations approximatives basées sur les puces grand public ainsi que sur les informations marketing d'Apple, en appliquant une légère décote.
Dans notre cas, nous avons pu estimer que la mise à niveau d'un ingénieur iOS se traduirait par un "gain de temps" d'environ 35 minutes par jour. En multipliant ce chiffre par le coût moyen de l'emploi d'un ingénieur iOS, nous avons trouvé une "période de retour sur investissement" de moins de deux mois !
Il est important de noter que ces calculs bruts ont été si largement positifs que nous n'avons pas eu besoin de prendre en compte un certain nombre d'avantages moins évidents ou plus difficiles à mesurer découlant de ces machines plus rapides. Par exemple, nous n'avons pas pris en compte quantitativement le fait que les ingénieurs seraient moins frustrés, que Xcode serait plus réactif, que l'auto-complétion fonctionnerait plus rapidement ou qu'il y aurait moins de changements de contexte pendant les temps d'attente de la compilation.
Avec un dossier solide, nous avons passé une commande pour mettre à niveau tous les ingénieurs iOS actuels et futurs vers un MacBook Pro 16 pouces avec M1 Max et 64 Go de RAM.
Restez informé grâce aux mises à jour hebdomadaires
Abonnez-vous à notre blog d'ingénierie pour recevoir régulièrement des informations sur les projets les plus intéressants sur lesquels notre équipe travaille.
Veuillez saisir une adresse électronique valide.
Merci de vous être abonné !
Quels sont les résultats réels ?
Quelques mois plus tard, nous avons enfin reçu notre première livraison de ces nouvelles machines. Nous avons rapidement mis en place une comparaison de la vitesse de construction entre les nouveaux et les anciens ordinateurs portables et nous attendions avec impatience les résultats.
que nous avons fait dans notre présentation. En tout et pour tout, notre construction de référence est passée de 7:46 min. à 3:48 min. C'est presque deux fois plus rapide !
Deux fois. Comme. Rapide.
Nous avons trouvé cela particulièrement impressionnant. Si vous réfléchissez aux autres modifications que vous pourriez apporter à une base de code importante pour l'accélérer du même pourcentage - une série de micro-optimisations qui peuvent être effectuées ici, un code obsolète à supprimer là, etc.
Cependant, tout n'est pas rose. Compte tenu de la forte demande pour ces ordinateurs portables et des problèmes persistants de la chaîne d'approvisionnement mondiale, nous n'avons pas encore reçu les ordinateurs portables de remplacement pour tous nos ingénieurs, mais ils sont en cours d'acheminement.
Comment faire autrement pour accélérer les temps de compilation ?
Même avec toute cette puissance supplémentaire, il faut encore quelques minutes pour terminer une construction moyenne. Ce n'est pas terrible, mais ce n'est pas exactement l'itération rapide que nous visons. Et comme notre équipe et notre base de code continuent de croître, le temps passé à compiler continuera d'augmenter - probablement plus vite qu'Apple ne peut le réduire avec des ordinateurs portables plus rapides. Alors que pouvons-nous faire d'autre ?
Nous pouvons modulariser notre base de code. Au lieu d'avoir à compiler un million de lignes de code, nous décomposons l'application en plusieurs petits morceaux de code, en cartographiant les dépendances entre eux. Les ingénieurs et les équipes peuvent alors travailler sur des sous-ensembles de la base de code, ce qui améliore considérablement la vitesse d'itération du développement. Il s'agit encore d'un travail en cours pour nous, mais nous commençons à en voir les avantages et nous aurons plus de détails à ce sujet à l'avenir.
Parallèlement à notre effort de modularisation, nous adoptons également de nouvelles technologies telles que SwiftUI et Xcode Previews. Ces technologies nous permettent d'éliminer presque entièrement la boucle "tweak-compile-and-run" lors du développement d'interfaces utilisateur. Au lieu de cela, nous pouvons définir nos données de prévisualisation et "coder en direct" le code de la vue actuelle, en obtenant un retour d'information presque instantané directement dans le canevas Xcode. Bien que cela n'aide que le développement de "vues", nous avons constaté que c'est un domaine où l'itération rapide est particulièrement utile.
Nous espérons publier d'autres articles approfondissant ces méthodes alternatives pour accélérer notre développement iOS, alors restez à l'écoute.
Conclusion
En fin de compte, si vous faites du développement professionnel dans Xcode toute la journée, il ne fait aucun doute que la mise à niveau vers l'un de ces nouveaux MacBook Pros M1 est un excellent choix. Et si travailler dans une grande base de code iOS avec d'autres développeurs passionnés vous intéresse, rejoignez-nous. Un MacBook Pro M1 Max vous attendra.