1 of 13

Réu d’archi Drive/mobile

11/12/2017

2 of 13

Constat

  • Manque de stabilité, régressions fréquentes�
  • UX pas totalement satisfaisante
    • Certaines features manquent vraiment (viewer PDF, “sélectionner tout”, “Ajouter à”, meilleure intégration avec l’OS…)
    • Pas le “feeling” natif (fluidité, UI native) (c’est mon avis, ce n’est pas la priorité)�
  • Complexité accidentelle du code
    • Process de dev trop organique à l’origine
    • Code éclaté dû à de mauvaises conventions
    • Manque de tests
    • Code complexifié par son utilisation dans 3 contextes différents�
  • Mais on a quand même des apps en prod et des users contents !

3 of 13

if (isMobile()) {...��if (isCordova()) {...��if (__TARGET__ === ‘mobile’) {...��

4 of 13

  • Trop de responsabilités pour un même composant�
  • Trop de logique pour un composant “feuille”

5 of 13

“Learn once, write anywhere”

�Mieux vaut 2 codebases distincts pour 3 apps distinctes (web/mobile) avec des briques de logique commune, des composants dumb communs, mais du code globalement séparé���Attention à la stratégie mobile actuelle de Cozy : 1 codebase Cozy = 3 apps (il suffit de wrapper dans du Cordova)

6 of 13

Enjeux

  • Stabiliser, refactorer, sans tomber dans le syndrome du “big rewrite”�
  • Garder nos options ouvertes�
  • Continuer à améliorer l’existant�
  • Faciliter le dev d’apps cozy (Bank, MAIF, …)�

7 of 13

Stratégie

3 mois

6 mois

1 an

Stabiliser et renforcer

Apprendre à faire en natif

2 apps distinctes�web/cordova ?

Pivot vers React-native ? vers le natif pur ?

PWA ?

8 of 13

Stabiliser et renforcer

  • Consolider cozy-client
    • Realtime / modèle de souscription
    • Synchro
    • Partage et autres documents particuliers
  • Inter apps
  • Consolider (et commonaliser) l’onboarding
  • Refactorer certaines features centrales
    • Sauvegarde
    • Gestion du hors-ligne (en particulier des fichiers)
  • Tester !
    • Apprendre à tester
    • 1 bug -> 1 test
    • Si bug critique, on fixe d’abord et on discute teste ensuite
  • Identifier les stories d’opportunité technique�

9 of 13

Stabiliser et renforcer

  • Exploiter la composition
  • Séparation des concerns -> plus de composants, plus dumb
  • Ne pas chercher à avoir des composants gérant 2 contextes différents
    • Remonter le code et utiliser les render props
  • Apprendre du mobile
    • Navigation
    • Animations

10 of 13

Apprendre à faire du natif par des spikes

  • Savoir intégrer le thème cozy dans une UI native (variables / cozy-ui)
  • Savoir se connecter à la stack en OAuth
  • Savoir afficher une grosse liste
  • Savoir lister les fichiers à sauvegarder
  • Savoir gérer le background
  • Savoir gérer la navigation entre écrans
  • Savoir gérer les gestures
  • Savoir utiliser PouchDB�

11 of 13

Exemple : la sauvegarde

{

media: [

  • {
  • idOS, // identifiant ou path du fichier sur l'OS
  • idCozy, // identifiant cozy-stack
  • uploadDate, // date d'upload
  • media, // les infos de l'OS sur l'image renvoyées par le plugin
  • },
  • ],
  • current_upload: [
  • idOS
  • ]

}

Store redux persistant

const backuper = new Backuper(client)

Gestionnaire de sauvegarde

  • S’appuie sur le store
  • Utilise cozy-client
  • Instancié par le service background ou le composant d’UI de la sauvegarde (inclus dans le layout)

12 of 13

Stratégie

Ready?

Ready?

GO!

V1 en 1 sprint

13 of 13

Synthèse / actions

  • Un effort particulier doit être porté sur cozy-client lors des prochaines sprints (dépendance des équipes et de la communauté)
    • Cozy-client ne devrait plus dépendre de cozy-client-js
  • Apprendre à tester
  • Identifier les stories d’opportunité pour du refacto
  • Lister les fonctionnalités spécifiques mobile de Drive et en estimer la difficulté d’implé en fonction de la techno
  • Se reposer la question des codebases multiples d’ici 2 mois