SlideShare a Scribd company logo
1 of 48
Agile Day 2012

   Sviluppo agile in un
    contesto bancario:
come far convivere team,
sistemi e metodi di lavoro
          diversi
        di Tommaso Torti
Il progetto
Rifacimento di un sistema di pagamento elettronico
VINCOLI
- nessun disservizio
- team misto
- contratto fixed time fixed scope
NUMERI
- Durata prima fase: 4/7/2011 – 30/3/2012
- gruppo di progetto > 10 persone
- 1487 gg/uomo, 300 erogati dal cliente
Difficoltà n° 1




Da noi non si può fare
Altre difficoltà



        Collective Code Ownership
Parte del team impegnata in attività pregresse


               “Outsourcing”
           Divisione in sottoteam
Setup progetto
Setup Progetto
In un tipico contesto bancario..
Accordi prematrimoniali

Richieste assecondate

Libertà sulle macchine di sviluppo
Ambiente di sviluppo automatizzato con script
Monitor più grandi, tende, lavagne..

Non assecondate

Database
Controllo versione
Accesso root in produzione
Le specifiche
Le specifiche
In un tipico contesto bancario..
Le specifiche
In un tipico contesto bancario..
Le specifiche

Specifiche recuperate interrogando il precedente
                   sistema

  curl --insecure --dump-header - --data-binary
                    @$input_file
                http://...legacy url...
                      +
   Esperto di dominio a nostra disposizione


                      Wiki



               Acceptance Tests
Convivenza sistemi

Sistema da sostituire       Nuovo sistema
                            (Phoenix)
         Bilanciatore                Bilanciatore




Apache             Apache   Apache             Apache




Tomcat             Tomcat   Tomcat             Tomcat




            Db                          Db
Deploy
Big Bang Deploy




       x
In un tipico contesto bancario..
      Sistema da sostituire        Nuovo sistema
                                   (Phoenix)
               Bilanciatore                 Bilanciatore




      Apache             Apache    Apache             Apache




      Tomcat             Tomcat    Tomcat             Tomcat




                  Db                           Db
Convivenza sistemi

Sistema da sostituire       Nuovo sistema
                            (Phoenix)
         Bilanciatore                Bilanciatore




Apache             Apache   Apache             Apache




Tomcat             Tomcat   Tomcat             Tomcat




            Db                          Db
Modulo Perl
<Location /vecchio_sistema/servlet/TranPortalXMLServlet>
  <Limit POST>
    SetHandler perl-script

     PerlSetEnv PHOENIX_REDIRECT_URL

     
     http://url_phoenix_apache/phoenix-0.0/phoenixServlet/
tranpipe
     PerlSetEnv LEGACY_REDIRECT_URL

     
     http://vecchio_sistema/servlet/TranPortalXMLServlet

    PerlSetEnv PHOENIX_TERMINAL_ID (123|456|789)
    PerlSetEnv PHOENIX_NUM_OF_TRANSACTIONS_TO_HANDLE 0

    PerlResponseHandler PhoenixPostHandler::Redirect
  </Limit>
</Location>
Convivenza sistemi

Sistema da sostituire       Nuovo sistema
                            (Phoenix)
         Bilanciatore                 Bilanciatore




Apache             Apache    Apache             Apache




Tomcat             Tomcat    Tomcat             Tomcat




            Db                           Db
Migrazione




 Ma non mi fido....
Squaring

[18/05/2012 00:10:04] Verify Migration Script executed
on environment production

Incorrect data migration:


 -- Captured transactions --
Phoenix data: [Amount: 498561.03 , Transaction Counter: 7469],
  Legacy data: [Amount: 498461.03 , Transaction Counter: 7468]
...
Automazione
Diversi reparti
In un tipico contesto bancario..
   Reparto di Gestione IT responsabile della
     produzione
Diversi reparti


$ ./deployToEnv.sh
Usage: ./deployToEnv.sh [stage|pre-production|production]
                          [latest|<version number>]
Deploy plan
Deploy plan
Test plan
Application

Come evitare
If (environment().is(STAGE)) { ... } else {...}


PRODUZIONE            Phoenix                Autorizzativo



                                             Autorizzativo
STAGE                 Phoenix
                                             di stage


                                             Autorizzativo
PRE-PRODUZIONE        Phoenix                Fake
Demo page



            Input




            Output
Planning
Planning
In un tipico contesto bancario..
Planning

●   Stime di massima iniziali
anche a sacrificio della precisione,
ma costante lavoro sullo scope pur di
raggiungere

●
             o della settimana
    L'obiettiv
spostando tutto il non essenziale
nella sezione 'futuro'
SAL settimanali




         Dove siamo?
 Che problemi ci sono stati?
Priorità prossima settimana?
Focus sull’obiettivo

Ci concentriamo sui merchant top 100?
Amount




            Distribuzione Merchant
Focus sull’obiettivo
Iniziamo dal protocollo piu semplice ma con pochi merchant
 o dal piu complesso che ha la maggior parte dei merchant?
Metriche

Invece di focalizzarci sul rispetto del piano, teniamo traccia di
varie metriche:



                                       Merchant Legacy


                                        Merchant Migrati
Metriche



       Transazioni su sistema legacy



       Transazioni su Phoenix
Metriche



       Amount su sistema legacy



       Amount su Phoenix
Qualità
Quality Assurance
In un tipico contesto bancario..


            • Team dedicato
            all’esecuzione dei test


            • Regole per l’aderenza a
            policy aziendali
Collective Ownership
Monitoring
BAM
In un tipico contesto bancario..
Monitoraggio

  Nagios, Cacti
Monitoraggio

Script di analisi log
Conclusioni

 Purchè sia mantenuta l’aderenza ai valori
di XP coraggio, semplicità, comunicazione e
                  feedback


         ...da noi si può fare!
Contacts


•   Website www.xpeppers.com


•   E-Mail info@xpeppers.com


•   torti.tommaso@gmail.com


•   Twitter @xpeppers
Appendice - Test - Javascript
Appendice - Primo vagito

11 luglio 2011   primo commit

29 agosto 2011 prima transazione in
produzione
Appendice -Codice Modulo Perl


sub handler {
    my $r = shift; $request_rec = $r; my $data = content($r);
     if (match($data, "<id>", "</id>")) {
           return forward_to($r, $ENV{'PHOENIX_REDIRECT_URL'}, 'text/
xml', $data);
     }
           return forward_to($r, $ENV{'LEGACY_REDIRECT_URL'}, 'text/
xml', $data);
}

sub match {
  my $data = shift; my $start_tag = shift; my $end_tag = shift;
  my $does_match_terminal_id = $data =~ m/(?:$start_tag|&lt;id&gt;)
$ENV{'PHOENIX_TERMINAL_ID'}(?:$end_tag|&lt;/id&gt;|$)/i;
  return $does_match_terminal_id;
}

More Related Content

Similar to Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere team, sistemi e metodi di lavoro diversi

"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
"Sistemi managed in alta affidabilità e in open source" by Andrea Di MarcoThinkOpen
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality CodeDaniele Mondello
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ CodeDaniele Mondello
 
100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)antonio_tonani
 
DynamicDataCenter: performance@T-Systems
DynamicDataCenter: performance@T-SystemsDynamicDataCenter: performance@T-Systems
DynamicDataCenter: performance@T-SystemsFSCitalia
 
Introduzione all'Information Gathering
Introduzione all'Information GatheringIntroduzione all'Information Gathering
Introduzione all'Information GatheringSalvatore Lentini
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBSteve Maraspin
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS Imola Informatica
 
Differenze tra Alfresco Community ed Enterprise
Differenze tra Alfresco Community ed EnterpriseDifferenze tra Alfresco Community ed Enterprise
Differenze tra Alfresco Community ed EnterpriseSoftInstigate
 
Hekaton: Natively Compiled Stored Procedures
Hekaton: Natively Compiled Stored ProceduresHekaton: Natively Compiled Stored Procedures
Hekaton: Natively Compiled Stored ProceduresFrancesco Milano
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSMorlini Gabriele
 
Open Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologici
Open Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologiciOpen Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologici
Open Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologiciPar-Tec S.p.A.
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2Bkino2k
 

Similar to Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere team, sistemi e metodi di lavoro diversi (20)

"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
"Sistemi managed in alta affidabilità e in open source" by Andrea Di Marco
 
Cesvip 20110127
Cesvip 20110127Cesvip 20110127
Cesvip 20110127
 
Continuous Integration e High Quality Code
Continuous Integration e High Quality CodeContinuous Integration e High Quality Code
Continuous Integration e High Quality Code
 
Continous Delivery & HQ Code
Continous Delivery & HQ CodeContinous Delivery & HQ Code
Continous Delivery & HQ Code
 
100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)100526 Sa 1.1 Platespin Forge Webinar (2)
100526 Sa 1.1 Platespin Forge Webinar (2)
 
DynamicDataCenter: performance@T-Systems
DynamicDataCenter: performance@T-SystemsDynamicDataCenter: performance@T-Systems
DynamicDataCenter: performance@T-Systems
 
Introduzione all'Information Gathering
Introduzione all'Information GatheringIntroduzione all'Information Gathering
Introduzione all'Information Gathering
 
UI Composition
UI CompositionUI Composition
UI Composition
 
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDBPolyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
Polyglot Persistance con PostgreSQL, CouchDB, MongoDB, Redis e OrientDB
 
m-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Netm-v-vm @ UgiAlt.Net
m-v-vm @ UgiAlt.Net
 
F24ZZ - DDD applicato
F24ZZ - DDD applicatoF24ZZ - DDD applicato
F24ZZ - DDD applicato
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
Differenze tra Alfresco Community ed Enterprise
Differenze tra Alfresco Community ed EnterpriseDifferenze tra Alfresco Community ed Enterprise
Differenze tra Alfresco Community ed Enterprise
 
Hekaton: Natively Compiled Stored Procedures
Hekaton: Natively Compiled Stored ProceduresHekaton: Natively Compiled Stored Procedures
Hekaton: Natively Compiled Stored Procedures
 
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFSLa nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
La nostra infrastruttura di produzione a container con Docker, Rancher e ZFS
 
Virtualizzazione
VirtualizzazioneVirtualizzazione
Virtualizzazione
 
Open Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologici
Open Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologiciOpen Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologici
Open Source Day 2015 - Migrare a JBoss: andare oltre gli aspetti tecnologici
 
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
#LRIS2014 - MessageBus, Cluster communication and Caching on B2B
 
Fmdp Total System Monitor
Fmdp Total System MonitorFmdp Total System Monitor
Fmdp Total System Monitor
 
XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13XPages Tips & Tricks, #dd13
XPages Tips & Tricks, #dd13
 

More from Tommaso Torti

Lavorare in un team agile
Lavorare in un team agileLavorare in un team agile
Lavorare in un team agileTommaso Torti
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAXTommaso Torti
 
Presentazione noestimates
Presentazione noestimatesPresentazione noestimates
Presentazione noestimatesTommaso Torti
 
JProfiler / an introduction
JProfiler / an introductionJProfiler / an introduction
JProfiler / an introductionTommaso Torti
 
Workshop Sul Refactoring Agile Day 2008
Workshop Sul Refactoring   Agile Day 2008Workshop Sul Refactoring   Agile Day 2008
Workshop Sul Refactoring Agile Day 2008Tommaso Torti
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacyTommaso Torti
 

More from Tommaso Torti (6)

Lavorare in un team agile
Lavorare in un team agileLavorare in un team agile
Lavorare in un team agile
 
Antica presentazione AJAX
Antica presentazione AJAXAntica presentazione AJAX
Antica presentazione AJAX
 
Presentazione noestimates
Presentazione noestimatesPresentazione noestimates
Presentazione noestimates
 
JProfiler / an introduction
JProfiler / an introductionJProfiler / an introduction
JProfiler / an introduction
 
Workshop Sul Refactoring Agile Day 2008
Workshop Sul Refactoring   Agile Day 2008Workshop Sul Refactoring   Agile Day 2008
Workshop Sul Refactoring Agile Day 2008
 
Dominare il codice legacy
Dominare il codice legacyDominare il codice legacy
Dominare il codice legacy
 

Agile Day 2012 - Sviluppo agile in un contesto bancario: come far convivere team, sistemi e metodi di lavoro diversi

Editor's Notes

  1. \n
  2. \n
  3. \n
  4. \n
  5. \n
  6. \n
  7. \n
  8. \n
  9. \n
  10. \n
  11. \n
  12. \n
  13. \n
  14. \n
  15. \n
  16. \n
  17. \n
  18. \n
  19. \n
  20. \n
  21. \n
  22. \n
  23. \n
  24. \n
  25. \n
  26. \n
  27. \n
  28. \n
  29. \n
  30. \n
  31. \n
  32. \n
  33. \n
  34. \n
  35. \n
  36. \n
  37. \n
  38. \n
  39. \n
  40. \n
  41. \n
  42. \n
  43. \n
  44. \n
  45. \n
  46. \n
  47. \n
  48. \n