Il concetto di cui sopra è tema di un paio di capitoletti in Code Complete 2, chi l'ha già letto lo sa bene. In base alla tecnologia con la quale ci apprestiamo a lavorare, ed in base alla nostra esperienza con la stessa, abbiamo un rendimento durante lo sviluppo diversamente distribuito.
Se la tecnologia è consolidata, e noi altrettanto, possiamo costruire l'applicazione velocemente. Gli strumenti a disposizione sono ottimali, gli IDE sono completi ed hanno al loro interno tutta una serie di tool che ci permettono di lavorare più spediti. Se incontriamo qualche problema nello sviluppo, Internet ci viene in soccorso attraverso newsgroups, siti con codice di esempio, documentazione sparsa per la Rete, e così via. Se ogni giorno lavoriamo n ore, di queste n ne passiamo buona parte a scrivere codice.
Se la tecnologia è relativamente nuova, oppure siamo noi ad essere beginners, il tutto diventa più complicato. Gli ambienti di sviluppo ogni tanto si inchiodano, bisogna ricorrere a tool esterni per compensare alla mancanza degli IDE ufficiali. Se cercate qualche informazione sul Web, fate fatica, perchè il materiale è scarso o ridotto o nascosto chissà dove. In uno scenario di questo tipo, il rendimento della vostra giornata lavorativa è molto diverso rispetto a quello precedente, perchè in questo caso passate molto tempo a trovare e ad applicare workaround per far girare le cose come volete.
Ho trovato molto interessante l'esposizione di questo concetto, a cui francamente non avevo mai pensato, perlomeno ad un livello cosciente. D'istinto tutti noi bene o male abbiamo detto: "NHibernate non l'ho mai usato, perderò un po' di tempo!", oppure "Voglio una UI in WPF, da dove diavolo si comincia?", però non mi sono mai seduto a riflettere su tutte le implicazioni in termini di tempo e di rendimento del mio lavoro. Effettivamente, la technology-wave ci portetà nuovi framework come XNA e WinFX (due fra tanti) e di sicuro non possiamo aspettarci di sederci davanti alla tastiera e di sviluppare codice al 100% delle nostre possibilità, come faremmo magari con .NET puro o altri linguaggi più vecchi! La faccenda volendo è anche un po' più complessa, perchè lo scarso rendimento (che impatta principalmente sui tempi di consegna) potrebbe riguardare solo una parte del sistema che stiamo sviluppando: ad esempio, sebbene abbia un'esperienza decennale nella creazione di applicazioni per Windows, quando ho creato la mia prima Windows Forms Application con NHibernate (circa 6 mesi fa), ho dovuto per forza di cose sviscerare e prendermi cura di aspetti che prima ignoravo (domain model creato opportunatamente, files di mapping, e via dicendo). Quindi, la technology-wave non impatta direttamente su tutto il prodotto che stiamo creando, ma solo su un sotto-sistema. Se invece di NH avessi scritto un data layer sotto mio, probabilmente avrei avuto un rendimento più alto, ma tempi di consegna uguali, perchè tutto quello che NH fa, avrei dovuto scrivermelo (e testarmelo) assolutamente da solo.