Pourquoi faire une V2 de son application ?
Refonte UX
Migration technique
Pourquoi mettre en production son application rapidement est crucial ?
Utilisable à chaque étape de la production
Les retours utilisateurs !
Retours maquette ou sur prototype
+ Itérable rapidement
+ Peu coûteux à développer
+ Maquettes indispensables
Retours sur produit
en production
+ Satisfaction de l'équipe technique
+ Parcours complets
+ Utilisation en cas réel
+ Détection des incohérences UX
+ Détection des bugs
From Scratch
Progressive
Situation A (actuelle) ---> Situation A' (améliorée) ---> Situation B (désirée)
Situation A (actuelle) ---> Situation B (désirée)
La Situation A' :
Migration progressive
Site Medium like pour bloggeur professionels
Doit pouvoir itérer rapidement pour prendre en compte les retours utilisateurs
1/2 journée
ArticleCreation.prototype.changeTab = function(element) {
if (!element.hasClass('lock') && !element.hasClass('on'))
{
if (element.hasClass('third'))
{
element.off();
window.open(
element.find('a').attr('href'),
'_blank'
);
return;
}
if (element.hasClass('second'))
{
_articleCreation.openMoveModule();
}
else
{
_articleCreation.closeMoveModule();
}
$('.tabs li').removeClass('on');
$('.ctab').removeClass('on');
$(element).addClass('on');
$('#' + $(element)
.find('a')
.attr('href')
).addClass('on');
_articleCreation.launchAutowidth();
}
}
ArticleCreation.prototype.changeTabEvents = function() {
$('.tabs-second li a').click(function(e){
e.preventDefault();
var parentLi = $(this).parents('li');
if (parentLi.hasClass('lock'))
{
return;
}
if (parentLi.hasClass('first'))
{
$('.tabs li.first a').click();
}
if (parentLi.hasClass('second'))
{
$('.tabs li.second a').click();
}
$('.tabs-second li').each(function(){
$(this).removeClass('active');
});
parentLi.addClass('active');
});
$('.tabs li a').click(function(e){
if (!$(this).hasClass('notab'))
{
e.preventDefault();
_articleCreation.changeTab(
$(this).parent('li')
);
}
});
}
Javascript
<ul class="tabs-second"><!--
--><li class="first
{% if app.request.get('tab') != 'second-tab' %}active{% endif %}
">
<a href="first-tab">{{ "Info"|trans({}) }}</a>
</li><!--
--><li class="second
{% if app.request.get('tab') == 'second-tab' %}active{% endif %}
">
<a href="second-tab">{{ "Média"|trans({}) }}</a>
</li>
</ul>
...
<ul class="tabs" style="display:none;">
<li class="first
{% if app.request.get('tab') != 'second-tab' %}active{% endif %}
">
<a href="first-tab">{{ "Les informations"|trans({}) }}</a>
</li><!--
--><li class="second
{% if app.request.get('tab') == 'second-tab' %}active{% endif %}
">
<a href="second-tab">{{ "La story"|trans({}) }}</a>
</li><!--
--><li class="third">
<a href="">{{ "Voir la story"|trans({}) }}</a>
</li>
</ul>
Twig
Code Spaghetti
Logique dans le template Twig et le JS
Process de build pas clair et pas documenté
Situation A = Symfony Twig + Jquery
Situation B = Symfony as API + React front
Cette situation B demande que l'on refasse beaucoup de choses en front qui existent déjà en back : le routing, les traductions, la gestion des utilisateurs, la gestion du state de l'application...
Il va falloir rendre accessible par API beaucoup de contenus qui pour le moment ne le sont que depuis des controllers Symfony.
Situation A' = Symfony Twig + React sur la page d'édition de l'article
Cette situation est bien plus simple à atteindre, elle permet en plus de tester des choses :
Comment est-ce que nous avons fait :
Avantages :
Inconvénients :
UGC viens nous voir et nous dit qu'ils veulent créer une V2 de l'application. Ils ont déjà refait leur site web mobile en accord avec le nouveau design qui correspondra plus ou moins à celui l'application mobile.
Situation A = Application native V1 en PROD
Situation B = Application native V2 en PROD avec les mêmes features que la V1
Parmi ces features, les features standards pour consulter les films en salle, les salles où les films sont diffusés, les cinémas et les films favoris.
Certaines features semblent plus longues : le tunnel de paiement avec le 3D secure, l'utilisation de cartes de fidélités pour payer, l'affichage et la gestion de ses cartes de fidélité.
Situation A' = Application Native V2 affichant le site mobile pour la plupart des pages
Cela permet de mettre l'application rapidement en production sans tout recoder et de remplacer les features faites par des webviews au fur et à mesure sans détruire de valeur pour l'utilisateur
Comment est-ce que nous avons fait :
Inconvénients :