Differenze tra SCRUM e Extreme Programming (XP)

Recentemente mi è stata posta questa domanda durante una presentazione dei metodi Agili: “Quali sono le differenze tra SCRUM e XP?”

Entrambi sono classificabili come “applicazioni” dei principi Agili.

La differenza principale è che SCRUM è maggiormente orientato alla gestione di un processo mentre XP è maggiormente focalizzato sugli aspetti tecnici legati allo sviluppo del software.

SCRUM è un framework di management che comprende aspetti quali il reporting, il planning, lo stato di avanzamento, la definizione degli incontri con l’obiettivo di favorire la comunicazione e avere un feedback molto rapido (al limite giornaliero) dello stato di un progetto.
releaseburndown
SCRUM cerca di ridurre al minimo l’overhead di burocrazia necessario per la gestione di un progetto e si focalizza su un processo iterativo e incrementale che porta a produrre solo ciò che serve e di maggior valore per l’azienda.

SCRUM in questo senso non è quindi strettamente legato ai processi IT ma può essere applicato con successo a qualsiasi processo aziendale.

Nell’ambito stesso di un’azienda IT si sottolinea l’importanza del fatto che SCRUM deve essere abbracciato dall’intera azienda quindi anche dal management, dai commerciali, dal marketing.

Una delle principali differenze pratiche è che SCRUM identifica una nuova figura, lo Scrum Master. Lo Scrum Master si discosta dal più classico Project Manager che definisce i task e dice chi fa cosa ma è un più generico servant-leader con questi compiti:

  • rimuovere gli impedimenti
  • assicurarsi che il processo SCRUM venga applicato correttamente
  • proteggere il Team dalle “distrazioni” (comprese le ingerenze del management e dei commerciali)

pair-programmingXP (Extreme Programming) pone invece maggiore enfasi su aspetti tecnici e pratici per lo sviluppo software.

Nel contenitore XP sono presenti tematiche quali:

  • Test-Driven Development
  • Continuous Integration
  • Pair Programming
  • Refactoring
  • Collective Ownership
  • On-site customer
  • Coding standards

Quale scegliere?

Secondo me in una azienda che sviluppa software la risposta corretta è entrambi in quanto le metodologie sono perfettamente complementari.

SCRUM da solo porterebbe sicuramente benefici in un ottica Just in time ma per raggiungere la massima efficacia e per far si che le promesse del Manifesto Agile vengano rispettate le tecniche XP si rivelano utili se non fondamentali.

All’opposto XP beneficia di SCRUM in quanto riceve un “contenitore” che garantisce il project management e l’interfaccia con il business, i commerciali ed i clienti senza troppo overhead e senza costrizioni.

Share

TeamCity 7.0 crea e distribuisce pacchetti NuGet

Sono incappato nelle release notes del nuovo TeamCity versione 7.0 rilasciato il 22 febbraio.

Solo per esclamare: NOOOO!! Quando ho letto che “Non solo TeamCity può creare dei package NuGet ma può anche fare lui stesso da server NuGet”.

Proprio oggi parlavo di TeamCity da un cliente e poi il discorso è caduto anche su NuGet e gli ho fatto notare come sia uno strumento eccezionale per distribuire dei package all’interno dell’azienda.

Pensare al connubio tra TeamCity e NuGet mi fa correre ad installarlo subito.

Share

Installare Redmine su Windows con SQLite

I requisiti per installare Redmine su Windows sono i seguenti:

  • lo stack Ruby+RubyGems+Rake+Rack
  • MySQL, PostgreSql oppure SQLlite

Per una prima installazione ho deciso di utilizzare SQLlite in modo da non dover installare un ulteriore motore di database.

Sul sito di Redmine c’è una completa guida di installazione ma in alcuni passi non è perfetta per una macchina Windows quindi li riporto di seguito.

Download di Redmine

http://www.redmine.org/projects/redmine/wiki/Download

Installare Rubyinstaller

Rubyinstallar è il package manager più diffuso per il mondo Windows.

Scaricare ed installare Rubyinstaller:

http://rubyinstaller.org/

Configurare database.yml

Copiare il file config/database.yml.example in config/database.yml

Configurare la sezione “production” per utilizzare SQLlite in questo modo:

production:
adapter: sqlite3
database: db/redmine.db
host: localhost

Installare la gemma SQLlite

Installare la gemma SQLite con il comando:

gem install sqlite3

Generare un session store

Generare un session store con il comando:

rake generate_session_store

Creare la struttura del database

Per generare la struttura del database entrare nella root directory dell’applicazione ed eseguire il comando:

rake db:migrate RAILS_ENV=production

Caricare i dati di configurazione

E’ consigliabile caricare nel database alcuni dati di configurazione di base da cui partire.

E’ sufficiente usare il comando:

rake redmine:load_default_data RAILS_ENV=production

In questo modo vengono caricati alcuni valori di default per i ruoli, i tracker, gli stati e gli enumerati.

Test dell’installazione

Installare la gemma WEBrick

gem install webrick

Lanciare il web server WEBrick

ruby script/server webrick -e production

e collegarsi all’url http://localhost:3000/

Se tutto è configurato correttamente viene visualizzata la welcome page.

Le credenziali di default sono username: admin e password: admin

NB: il webserver WEBrick non deve essere usato in produzione ma solo per le attività di testing. In un altro post vedremo come utilizzare Mongrel come servizio Windows per eseguire Redmine.

Share

Installazione di Redmine – L’appliance VMWare

Il primo dubbio che ho avuto nel testare Redmine ha riguardato l’installazione.

E’ scritto in Ruby, è cross-platform (Linux, Unix, Mac e Windows) e utilizza MySQL, PostgreSQL o SQLite.

La procedure di installazione è completamente dettagliata sul sito però l’idea di dover capire molte cose di questo ecosistema che non conosco mi faceva temere di perdere molto tempo prima di arrivare ad una configurazione di test da cui partire.

Fortunatamente sono già disponibili delle appliance pre-configurate su questi due siti:

Le appliance sono disponibili per VMWare  e per Amazon EC2.
Ho scelto quella di bitnami e ho scaricato la virtual machine per VMWare (circa 500mb) per usarla con Virtual Box.
 
A questo punto ho creato in VirtualBox una nuova macchina virtuale Ubuntu seguendo la sezione “How to start your BitNami Virtual Applicance with Virtual Box“. Se volete usare il vostro DHCP la rete va impostata come bridged.
 
Nel giro di circa 15 minuti mi son ritrovato un’installazione di Redmine perfettamente funzionante.
 
Non male come inizio.
Share

Project management con Redmine

Una delle prime domande che mi viene posta ogni volta che inizio una consulenza Agile è

Quale strumento di project management ci consigli di usare?

Ovviamente la prima risposta è che i processi Agili privilegiano le persone e l’interazione piuttosto che gli strumenti e consiglio di partire con un progetto pilota usando Excel che tutti conoscono (dal dev fino al business e al cliente finale) in mondo da non introdurre troppa carne al fuoco.

E’ importante notare che il Manifesto Agile dà enfasi a persone e interazione ma non elimina gli strumenti (ci mancherebbe) e quindi l’adozione di un software di project management è indispensabile in qualunque software house, a meno che non si stia sviluppando la gestione DVD del negozio sotto casa.

Tra i vari tool che ho visto dai clienti oppure provato direttamente mi sono imbattuto in Redmine.

redmine-logo

Le caratteristiche sono di tutto rispetto:

  • Supporto multi-progetto
  • Gestione della sicurezza basata su ruoli
  • Issue Tracking system
  • Calendario
  • Gantt (tanto amato dai PM)
  • News, documenti e gestione file
  • Feeds
  • Notifiche via email
  • Wiki per progetto
  • Forum per progetto
  • Time tracking
  • Campi custom per le issue, le time entry, i progetti e gli utenti
  • Completa integrazione con i principali SCM (SVN, CVS, Git, Mercurial, Bazaar e Darcs)
  • Creazione di segnalazione tramite email
  • Autenticazione LDAP
  • Auto registrazione degli utenti
  • Supporto multilingua (italiano compreso)
  • Supporto multidatabase (MySQL, PostgreSQL, SQLite)
Sul sito è disponibile una installazione demo che mi ha molto impressionato e mi ha spinto a provarlo.
La cosa interessante è che sono già disponibili moltissimi plugin per coprire esigenze particolari non implementate direttamente in Redmine.
Ad esempio esiste un plugin per la gestione di un processo tramite SCRUM.
Mi sà che scriverò qualche altro post al riguardo.
Share

Scusa ma nel tuo lavoro quotidiano non usi gli strumenti migliori? Non metti i dipendenti nelle migliori condizioni?

Qualche domanda, spero retorica:

  • se sei un fotografo usi la Polaroid o una Canon/Nikon reflex di fascia alta? (per par condicio le ho messe entrambe così si evitano discussioni off topic)Utensili Beta
  • se sei un meccanico utilizzi gli attrezzi della Beta o la brugola dell’Ikea?
  • se sei un manager nel tuo ufficio hai 5 server di fianco alla scrivania? L’aria condizionata in fronte? La sedia senza schienale o senza ruote?

E così via, credo che potrei andare avanti per coprire qualunque settore lavorativo.

Ma allora qualcuno deve spiegarmi perché quando giro in aziende che sviluppano software sento e vedo sempre più spesso situazioni del genere seguente.

“Il cliente tipicamente rimane sbalordito dalle caratteristiche del mio portatile”

La brugola, lo strumento simbolo dell'IkeaSi ho un portatile con processore di ultima generazione, tutta la ram che ci può stare dentro e 2 dischi di cui uno SSD.

Non vedo perché dovrei usarne uno più lento visto che ci lavoro sopra 8 ore al giorno, compilo, ci girano i test (hai i test vero?), gira il database, magari qualche macchina virtuale.

Oggi l’hardware ha dei costi veramente irrisori rispetto al tempo che ci fa risparmiare e al minore stress che ci provoca una macchina lenta.

“Ho visto aziende con sviluppatori ammassati su tavoli scomodissimi, piccoli e con sedie rotte o in posizioni infernali (tipo col sole alle spalle o vicino alla rumorosa sala server).

Oppure in cui i dev scrivono il nome sullo schienale perché non ci sono abbastanza sedie per tutti e domani potrebbero non trovarla!”

Ricordo che chi produce software ancora per oggi è un essere umano. La produttività di uno sviluppatore è legata anche all’ambiente lavorativo che lo circonda. Quindi magari può essere utile che non sia troppo rumoroso, troppo caldo, troppo freddo, che la sedia abbia lo schienale, che il tavolo mi consenta di starci sotto senza che abbia un piede del tavolo stesso tra le gambe. Pensate che i dev chiedano troppo? O forse spesso non chiedono perchè per passione o per sovraccarico sono talmente immersi nel lavoro che non ci pensano o per reverenza e pudore non ve lo chiedono.

“Incontro sviluppatori che programmano 8 ore su monitor da 15 o 17 pollici.”

Anche questo è legato alla produttività e alla qualità di quello che facciamo. Un monitor più grande mi consente di avere sotto controllo più informazioni, di facilitare i confronti, di affaticarmi di meno. Tralascio sull’utilità di 2 monitor affiancati…

“Mi serve un software per fare l’attività X. Ne ho trovato uno eccezionale, fatto da una società molto in gamba. Però costa troppo allora uso questa alternativa open-source. Spesso si blocca, non ha documentazione e devo manutenerlo di continuo ma costa zero”

Ecco qui il tema non è la diatriba open-source/closed source ma se esiste un software che mi fa lavorare meglio, produrre di più, ridurre i costi siamo sicuri che il ROI legato al costo di acquisto non sia ben più favorevole di un’altra soluzione? Per non parlare di chi si sviluppa in casa tool che magari sul mercato sono già ampiamente collaudati e ricchi di funzionalità.

A volte prima di parlare di architettura, DDD, Agile, SCRUM che vanno tanto in voga oggi e che piacciono tanto ai PM credo che sarebbe necessario partire dall’abc che ogni imprenditore o manager di qualunque settore dovrebbe conoscere e applicare.

Come fai ad essere Agile su un Pentium?

Come al solito l’informatica è diversa dagli altri settori e come spesso capita questa diversità è in negativo.

Dai che con poco si può fare un grosso salto in avanti!

PS: qualche consiglio pubblicitario per gli acquisti:

  • monitor: almeno 24 pollici, magari 2 monitor
  • Ram: tanta, almeno 4 gb
  • se proprio non volete cambiare il PC o il notebook fate la cosa che oggi ha in assoluto il miglior rapporto prezzo/prestazioni: comprate un disco allo stato solido!
  • un sistema operativo performante e stabile (leggasi Windows 7 se si parla di mondo Microsoft)
  • il migliore IDE che ci sia in commercio (leggasi Visual Studio 2010 se si parla di nuovo di mondo Microsoft)
  • la sedia con le ruotine please!
  • magari spostare i dev dal magazzino ad un ufficio
Share