[Autocritica] Analisi “by customer”

(Sottotitolo: Quando il “cloud” non è riferito solo al computing...)

Si, è soprattutto colpa mia.

Avrei dovuto dire:

Cariiiino, ha anche il frontespizio bello formattato,
tutte le tabelle di non so bene cosa,
i grafici, i colori...
ha pure il sommario!
Bello, bello.

Adesso però chiudiamo ‘sto coso e iniziamo “l’intervista” per l’analisi vera.

Non l’ho fatto per non mancare di rispetto al cliente (trattandosi oltretutto del referente appena conosciuto di una “worldwide”...), ma adesso ne sto pagando le conseguenze.

Sperando che mi serva di lezione per il futuro.

“Validation First” development in DDD e refactoring

La validazione, a livello di dominio, di business e di DAL, è la vera garanzia che le entità che stiamo creando/utilizzando contengano dati coerenti.

Nella versione finale dell’applicazione è ovviamente assolutamente cruciale che esista un unico punto centralizzato dell’applicazione (ovunque esso sia) che si occupi della validazione di dominio ed un altro che si occupi della validazione a livello di database, in modo da sapere sempre dove andare ad agire quando effettuiamo del refactoring sul domain model (discorso differente per la validazione a livello di casi d’uso, che si può centralizzare ma rimane comunque frammentata).

La cosa di cui però mi sto sempre più rendendo conto “grazie” (…) ai ritmi MOLTO estremi con cui mi ritrovo costretto a sviluppare in queste settimane è il grande beneficio che porta, in caso di modifiche di requisiti in corsa o comunque post-deploy, il fatto di modificare, ovviamente dopo il Domain Model :-), prima di tutto il codice di validazione e poi le altre parti dell’applicazione.

Una sorta di RED-GREEN refactor applicato alla validazione.

Countdown avviato! Tutto pronto?

Mancano solo 15 giorni alla “prima” e non so descrivere il mio stato d’animo a riguardo.

No, non è ancora tutto pronto, ma sono stranamente calmo, per nulla agitato; non perchè non mi interessi la cosa, anzi...
E allora, mi sono chiesto sinceramente: perché sono così tranquillo?

Forse perchè tutto fin’ora è andato come speravo andasse, anzi meglio! L’iniziativa non aveva e non ha tutt’ora obiettivi audaci ed ambiziosi: dialogare, condividere esperienze, sentirsi a proprio agio nel confrontarsi riguardo le problematiche lavorative che ci si trova di fronte.

La DotNetteria, come già scritto, ha già raggiunto questo obiettivo prima ancora di iniziare i lavori.

Sono davvero contento che tutte le decisioni prese insieme in occasione della cena abbiano trovato, dopo il confronto, tutti d’accordo. In particolare, anche gli stessi speakers sono stati concordi nel dare la precedenza alle domande ed ai dubbi pratici dei partecipanti, ovviamente nei limiti dell’in-topic e delle esperienze personali (che per quanto possano essere ampie, ovviamente non copriranno mai tutte le casistiche). Ergo: potremo fare domande e chiedere pareri su esperienze lavorative vissute in prima persona.

Mi ha fatto molto piacere il fatto che le sessioni in programma non siano state “richieste”, ma siano frutto di un’offerta spontanea dei tre speakers.

Mi ha fatto un enorme piacere sentire l’interesse e l’entusiasmo di diverse persone. Probabilmente è anche complice l’ingrediente “novità”, che male non fa, ma spero che la sostanza di quella mezza giornata fra 15 giorni sia tale da rinnovare queste sensazioni.

Un’ultima nota: come si legge nella scheda dell’evento i posti totali sono solo 18, proprio pochini...

E’ stata una scelta voluta, per agevolare il dialogo ed il confronto; ma anche una scelta che ha richiesto coraggio, perchè l’evento é gratuito ed in questi casi troppo spesso ci si trova a dover fare i conti con la percentuale di assenze inaspettate. In altre parole se 5-6 iscritti danno forfait ci ritroveremmo col 30% in meno di partecipanti...

Abbiamo scommesso su di voi, sulla vostra professionalità... Se vi registrerete, non mancate; se non potrete partecipare per qualche imprevisto, annullate l’iscrizione per dar modo ad altri di partecipare.

Ancora una volta, grazie a tutte persone che stanno rendendo tutto ciò una esperienza davvero positiva!

DotNetteria: è già tempo di ringraziamenti!

Ebbene si; ne sono passati parecchi, di mesi, dal primo “sasso nello stagno” ed ormai ci rimane poco tempo, come ci ha giustamente fatto notare Lorenzo, per mettere in atto i nostri propositi :-), ma ormai, finalmente, siamo vicini all’inaugurazione.

La cosa più sorprendente è che questa iniziativa abbia già offerto risultati positivi nonostante non sia ancora ufficialmente partita: cercando di capire insieme quali fossero gli obiettivi, ci siamo involontariamente ritrovati ad approfondire le tematiche di proprio interesse, confrontarci sulle esperienze personali, conoscere nuove persone e poter anche conoscere meglio persone già conosciute. Sono rimasto letteralmente e piacevolmente sorpreso di fronte alla disponibilità dimostrata da diverse persone, per giunta già decisamente impegnate nel fronte “community”, nei confronti della nostra iniziativa.

Per questi motivi, il mio bilancio personale riguardante questa iniziativa è già più che positivo fin d’ora. Mi ha dato una forte iniezione di fiducia (in un momento in cui forse ne avevo anche un po’ bisogno) nei confronti di un settore professionale (IT) che in troppe occasioni, ovviamente IMHO, evidenzia una pericolosa superficialità di fronte alle proprie lacune e/o difficoltà.

Grazie!

Tempo di ringraziamenti, recita il titolo, ed ecco i miei personali award! :-)

Grazie a “Darth” Andrea, il copilota della DotNetteria senza il quale l’iniziativa non avrebbe preso vita.
Non anticipo altro su di lui perché spero che possiate conoscerlo voi stessi ascoltandolo e chiacchierando con lui ad una delle sessioni che gli ho suggerito di preparare.

Grazie a Lorenzo, per aver dimostrato ancora una volta che le critiche costruttive ponderate sono di gran lunga il feedback più prezioso che si possa ricevere.
Poche persone hanno la fortuna di svolgere una professione così adiacente alle proprie attitudini. Complimenti!

Grazie a Raf, anch’egli disponibilissimo nonostante le infinite attività a cui partecipa (incluse le sedute dal dentista!!!). D’altronde bisogna anche considerare che probabilmente per lui non sarà stato un grande sforzo, dal momento che avrà già crackato il sistema implementandosi poi ICloneable… :-)
Scherzi a parte è sbalorditivo come una conf organizzativa con lui di un’oretta su LiveMeeting si trasformi in una sessione impagabile con spunti che spaziano da considerazioni cruciali sulla gestione manageriale dello sviluppo software a cenni storici (per me inediti) sull’evoluzione dello stesso sviluppo software!
D’ora in poi invece di usare *.* scriverò raf.raf! :-)

Grazie al senatore a vita Janky, che ci ha sostenuto, dato fiducia ed infuso coraggio nelle prime fasi di brainstorming. E’ anche grazie a lui, ad uno dei suoi corsi di qualche anno fa e soprattutto alle proficue chiacchierate “post corso” che l’iniziativa ha preso vita con il format attuale.

Grazie (e buon lavoro) anche ai ragazzi di DotNetLombardia. Chiacchierando insieme con l’intento di costruire un’unica iniziativa ci siamo resi conto che i rispettivi obiettivi e le relative modalità erano, inaspettatamente, talmente differenti da portare inevitabilmente a percorrere strade diverse tra loro. Anche in questo caso il confronto è stato talmente diretto e spontaneo da fornire sia a noi che a loro una visione ancora più chiara delle rispettive aspettative.

Grazie anche a tutte le altre persone (e sono decisamente più di quanto mi aspettassi all’inizio) che mi hanno contattato da luglio ad oggi per dimostrarmi il loro interesse, sia come partecipanti che come speaker. Grazie a chi ci ha voluto “mettere in guardia” da subito sulle difficoltà che probabilmente avremmo incontrato e/o incontreremo.
A tutte queste persone voglio anticipare che nessuno è stato in alcun modo escluso dall’iniziativa in questi mesi, ma era necessario che capissimo prima “noi due”, con molta chiarezza, quali fossero gli intenti e le modalità da seguire.

Bla bla bla… ma cos’è ‘sta DotNetteria? :-)

Beh, il sipario non si è ancora alzato; quindi possiamo solo darvi qualche anticipazione… ;-)

Come al solito cerco sempre di essere (fin troppo? :-D) chiaro e preferisco rispondere pubblicamente ad alcune domande ricevute in questi mesi.

Siete il nuovo UGIdotNET? (incluse le varianti anti-UGIdotNET e simili…)
NO e non mi toccate UGIdotNET! :-) Sono personalmente grato ad UGIdotNET per ciò che ha fatto in tutti questi anni e continua a fare, a tutte le persone che hanno dedicato tempo ed impegno per far crescere il know-how di molti di noi.
Premesso che comunque probabilmente UGIdotNET ha ormai un livello qualitativo e di esperienza tale da renderci semplicemente imparagonabili, il motivo per cui si è arrivati a definire una nuova iniziativa separata lo trovate in un vecchio post di luglio.

Ma è una community lombarda?
Praticamente si, nel senso che le varie iniziative verranno organizzate in Lombardia. Questo ovviamente NON significa che potrà partecipare alle varie iniziative solo chi è nato/abita/lavora/risiede in Lombardia, tifa Inter, si chiama Brambilla, ha lo stemma della regione tatuato sulla spalla. :-)
Chiunque può partecipare o proporre una tematica.

Di cosa parlerete?
Prima di tutto, il nostro primo intento è trasformare la domanda in “Di cosa parleremo?”, perché uno dei valori che vogliamo cercare di far emergere, tramite la nostra iniziativa, è proprio la condivisione di esperienze pratiche da parte dei “molti”. Per intenderci, IMVHO, se su 50 persone che si ritrovano a parlare di NHibernate, EntityFramework, WCF ce ne sono poi solo 10 che adottano questi strumenti ed altri 40 che si ritrovano a dover affrontare le problematiche conseguenti dal dover utilizzare quotidianamente un RDBMS come “share centralizzato” di dati tra più applicazioni, forse ha più senso, in ottica di produttività, parlare insieme di come affrontare e gestire una situazione simile.
Ciò ovviamente non significa che di contro le sessioni su nuove tecnologie ancora poco diffuse siano “virtuosismi”, anzi… sono il seme grazie al quale tali tecnologie arrivano poi a diffondersi, gradualmente.

C’è un argomento che vorrei condividere con gli altri. Posso fare una sessione?
Ribadendo gli intenti da “tavola rotonda” di cui alla domanda precedente, gli spazi sono aperti a tutti!
Ovviamente se le richieste di speech dovessero superare le disponibilità di “spazio/tempo” :-) dovremo selezionare alcune proposte in favore di altre (o farle scegliere a voi) ma uno degli obiettivi è proprio quello di “dare voce” a chi vuole portare all’attenzione un argomento, a prescindere dalle proprie capacità di esposizione e dal proprio livello di conoscenza.
Non posso aggiungere molto, ma vi anticipiamo che saranno messi a disposizione di eventuali “speakers allo sbaraglio” :-) degli spazi tali (saranno i vostri feedback a darci la giusta misura) da permettervi di “rompere il ghiacchio” di fronte al palco, senza che la sessione possa rivelarsi troppo lunga sia per chi parla che per chi ascolta. Troverete maggiori info sul sito, quando sarà finalmente on-line nei prossimi giorni, ma potete anche tranquillamente iniziare a contattare Andrea o il sottoscritto per proporre un argomento.

Concludo lasciandovi l’indirizzo web del sito, che sarà on-line tra qualche giorno, al fine di poter rimanere aggiornati sui nuovi sviluppi: www.dotnetteria.it

Ovviamente, come sempre, qualsiasi feedback costruttivo ;-) è particolarmente apprezzato!

Cafonaggine telefonica

  • Pronto...
  • Michel sono Claudio
  • Mi sa che ha sbagliato numero
  • Pronto Michel, mi senti?
  • Chi cerca scusi? (ovviamente Michel, la domanda reale era: “Hai collegato le orecchie al cervello?”)
  • Non sei Michel?
  • No, mi dispiace: ha sbagliato numero

TU TU TU TU... :-)

Quando un crash è meglio di un check

Lavorando su codice esistente mi sono imbattuto in un passaggio simile al seguente, supponendo che MyControlName sia un elemento di UI indispensabile e sempre presente:

void Sample()
{
Control uiControl = FindControl("MyControlName");
if (uiControl != null)
{
DoSomething();
}
}

Se quell’elemento è sempre presente nella UI, perché fare il check? Solo per essere sicuri che nel codice scritto da noi non venga sollevata un eccezione?

Cosa succede se per qualche motivo il controllo non è più presente nella UI oppure il nome cambia?
Niente, assolutamente niente! Le operazioni che l’applicazione dovrebbe fare con MyControlName vengono silenziosamente ignorate (ed IMHO questi sono i bug più pericolosi).

Le strade sono due:

  1. si aggiunge un else in cui si avvisa il supporto che quel controllo non è reperibile (nobile, quanto forse di poca utilità pratica),
  2. si toglie il check e ci si imbatte nell’eccezione la prima volta che verrà eseguito il relativo test o comunque la prima volta che verrà utilizzato quel pezzo di codice (dal dev o dal tester, intendo, non dal cliente...).

IT

Ho letto il post di Ivan rammaricandomi ancora una volta nel leggere parole di sconforto riguardo il settore italiano dell’IT.

Lasciando un commento, come al solito mi stavo dilugando; ho “tagliato” all’osso ma non sono riuscito ad esprimere il concetto e quindi...  WLW.

Il paragone economico presentato da Ivan è sicuramente demoralizzante per chi lavora nel mondo dell’IT, su questo concordo pienamente, ma poi mi sono soffermato a chiedermi se sia realmente così inappropriata come richiesta da parte del cliente o sia anche la nostra visione a dover evolvere.

“Ce ne sono 4 su 100 come Lei”

Come già scritto o detto in precenza, l’informatica non è la mia più grande passione. Ci sono ovviamente i relativi pro e contro nel fatto che lavoro e passione non coincidano ed uno dei pro è la visione forse un pelino più distaccata di alcune tematiche.

Me ne sono reso conto definitivamente dopo aver ritirato, poco più di un anno fa, la Civic aziendale: dopo pochi Km faccio un salto in concessionaria per far verificare un rumorino e rispondo alla domanda “allora, come va?” del capo officina, descrivendogli alcuni dubbi sull’assetto che mi erano venuti addirittura già dai primi km.

Con mia sorpresa, mi risponde che purtroppo la mia descrizione é corretta ed aggiunge: “Sa qual’è il problema? Ce ne sono 4 su 100 attenti come Lei all’assetto dell’auto, gli altri 96 neanche se ne accorgono e sono invece molto più attratti dalla seduta dei divanetti posteriori che si può ribaltare. Ovviamente la Honda deve ascoltare quei 96...”.

Considerazione semplice, lucida, disarmante... Se io lavorassi nel centro di progettazione della Honda, farei la guerratermonucleareglobale pur di far mettere delle sospensioni posteriori all’altezza della Civic e probabilmente sarebbe commercialmente sbagliato (perchè ricordiamocelo, l’obiettivo delle aziende e di vendere i suoi prodotti).

Certo, potrei dare la colpa agli analisi, ai commerciali, oppure ai 96 clienti Honda su 100 che non sono attenti all’assetto di un auto, ma probabilmente sbaglierei.

Tornando al mondo IT, condivido l’attenzione e l’interesse di Ivan per l’innovazione, ma IMHO bisogna valutare se e quali vantaggi concreti portano determinate novità nel soddisfare le richieste del cliente e di conseguenza all’azienda oppure nell’ottimizzare la produzione.

In alcune realtà aziendali, l’adozione di un nuovo sito innovativo con una presentazione grafica di alto livello potrebbe anche incrementare di poco o nulla le vendite rispetto ad un “vecchio” portale di e-commerce, magari anche gratuito o quasi.

IT di consumo

I cellulari che una quindicina di anni fa costavano un milioncino di Lire, si sono enormemente evoluti e di contro ora arrivano a costare circa un decimo (anche meno, considerando che si parla di 1M di 15 anni fa). Non sono un esperto di economia, ma credo che ciò dipenda dal fatto che gli acquirenti di telefonia cellulare sono sempre aumentati rapidamente: ciò abbatte i costi di produzione, incentiva la concorrenza e l’innovazione sia nelle funzionalità che nei processi di produzione. Le nuove funzionalità, unite alla diminuzione dei prezzi, fanno aumentare a loro volta il numero degli acquirenti.

Tra le principali innovazioni concrete e tangibili nel mondo della telefonia mobile ricordo:

  • La possibilità di inviare SMS
  • La possibilità di scattare foto e creare video
  • La possibilità di inviare MMS
  • La possibilità di collegarsi ad internet, anche col PC
  • La possibilità di utilizzare videogiochi
  • La possibilità di ascoltare musica
  • Sincronizzazione, touch screen, ecc.

Certo, altre innovazioni sono state meno apprezzate dalla massa (radio, videofonia, tv), ma credo sia normale. Nel complesso però, credo si possa dire che queste innovazioni hanno portato gli utenti ad acquistare nuovi cellulari.

E nell’informatica? Per l’utente finale sono arrivate alcune novità legate soprattutto ad internet ed all’elettronica (chat e videochat, social network, video ed audio digitale, ecc.); anche la grande impresa ha poputo trarre giovamento da nuovi strumenti che semplificano lo sviluppo di grossi applicativi custom.

E per la piccola-media impresa “generica”? Di concreto e tangibile in linea di massima sono arrivati:

  • la gestione elettronica delle comunicazioni “scritte” (in cui le email, che non prevedono by default autenticazione e conferma di consegna, hanno quasi rimpiazzato il fax che invece di contro offre una sorta di autenticazione e conferme minimali).
  • un gestionale (spesso, ahimè, pagato molto caro) per la gestione delle informazioni aziendali e nei casi migliori anche dei flussi di processo delle stesse.
  • e-commerce.

La domanda è: cosa proponiamo adesso a queste imprese in modo che possano incrementare le loro vendite o ridurre significativamente i loro costi?

Materiale e codice

Torniamo al paragone di budget fornito da Ivan. Nei 200K di budget per il bar devono rientrare:

  • Il costo dell’immobile (affitto, immagino…)
  • I costi edili inziali (muratori, imbianchini, elettricisti)
  • Il costo dei servizi (acqua, elettricità, riscaldamento)
  • Il costo degli strumenti (mobili, apparecchi)

Nei 1K di budget per il gestionale devono rientrare:

  • Il costo dell’infrastruttura di sistema (hw/servizi di hosting)
  • Il costo dello strumento (il gestionale)

Adesso guardiamo il tutto in ottica di offerta.

E’ evidente che se avessi un’impresa edile e dovessi realizzare più bar, il costo rimane a grandi linee lo stesso, mentre nel caso di una software house e del gestionale ho un alto costo iniziale di progettazione e sviluppo abbinato ad un basso costo di produzione in serie, come nel settore della telefonia mobile e dell’elettronica in generale.

E’ un dato di fatto, come lo è anche il fatto che i supporti contenenti un film od una canzone sono riproducibili a bassissimo costo ed infatti costano una briciola dei costi di produzione.

Domanda: tutti i nostri clienti hanno veramente bisogno di un gestionale realizzato completamente su misura (progettazione, design, infrastrutture) oppure potremmo pensare di adottare una ipotetica applicazione gestionale di base, personalizzabile e “pluggabile” con pochi sforzi?

Collaborazione

Torniamo quindi al confronto col mondo della telefonia ed in generale dell’elettronica: come sappiamo per ogni tipologia di prodotto (cellulare, navigatore, notebook, ecc.) esistono n modelli di n produttori. E’ ovvio che ogni modello non venga riprogettato da zero, sfruttando caratteristiche ed esperienze relative a precedenti modelli, ma in realtà, quantomeno nella grande maggioranza dei casi, questi prodotti sono assemblati utilizzando parecchie componenti di terze parti.

Perchè dovremmo scegliere di utilizzare, quando possibile e vantaggioso, componenti di terze parti? Perchè si suppone che:

  • il livello di consolidamento di tale componente offra una affidabilità uguale o maggiore rispetto ad uno nuovo (che spesso è tutt’altro che scontato...),
  • ma soprattutto, il costo di tale componente di terze parti sia inferiore al corrispettivo costo di progettazione e produzione di uno analogo sviluppato in proprio.

Nel mondo “dev” siamo soliti pensare a questi “componenti di terze parti” come a librerie di codice, controlli, framework, tool. E se provassimo a pensare più in grande? A quel punto ben vengano proposte come Azure e Microsoft Online Services.

Quindi?

Forse é necessario pensare sempre meno alla produzione software come una attività di artigianato e spostarci sempre di più verso l’industrializzazione del software (SW factories, automazioni standard abbinate alla modularità, ecc.).

Certo, se poi il cliente ci chiede un vestitino realizzato su misura a 50 Euro, rimarrà nostro (arduo) compito spiegargli che non è fattibile rispettando degli standard qualitativi di riferimento per quel prodotto, ma in compenso potremo proporgli una soddisfacente alternativa prodotta in serie e personalizzabile a basso costo.

Fosse semplice, penserete... Purtroppo non é semplice, richiede ingegno, fantasia e concretezza ma proprio per questo, nonostante la mia ignoranza in materia di economie di larga scala, continuo a credere che sia l’unico vero futuro a lungo termine per il mondo italiano dell’IT.

Con un po’ di fortuna, a breve potremmo avere occasione di parlarne tutti insieme.

Buon 7DA!!!

Auguro a tutti un felice e soprattutto sereno anno nuovo!

[ROTFL] Mi si è cappottato Windows!

Ma voi ve le immaginate le telefonate agli helpdesk di quelli che hanno gli shortcuts Intel Graphics Media Accelerator Driver attivi (by default) e premono Ctrl-Alt-Freccia giù?? :-D

t_IntelDriver[1]

Imparare a stare al mondo (del lavoro)

Da diversi anni, a causa degli immancabili falsi positivi dell’antispam, ero solito impostare la richiesta di notifica di lettura per tutte le mail inviate (Outlook non permette l’impostazione specifica per ogni account: o tutti o nessuno...).

Per me, non si tratta di una conferma ai fini giuridici (chi utilizza la mail per lavoro dovrebbe sapere che per quello “vale” solo la posta certificata), ma di uno strumento che evita disguidi confermandoti che la mail è arrivata a destinazione e che quindi ti permette di sapere che se il destinatario non ha ancora risposto è solo perchè non ha avuto tempo oppure semplicemente non può/non vuole rispondere.

La conferma però non è obbligatoria ed ho appreso in questi anni che diverse persone considerano la conferma di lettura come un’invasione della propria privacy (?!?).

Dopo qualche “togli/metti/ri-togli” forse ho trovato un compromesso: richiedo la “conferma di recapito”. In questo modo so che la mail a “casa tua” (sul server di destinazione) c’è arrivata e non è stata filtrata; se poi a quel punto il destinatario non legge la posta (o non risponde)... non mi riguarda più. :-)