SlideShare a Scribd company logo
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

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