Le basi: Analisi e progettazione
Il successo e la qualità di un progetto ingegneristico vengono
determinati al 60% in fase di analisi e progettazione, e solo al
40% in fase di messa in opera.
Già solo per questo motivo, hai tutta la convenienza ad avere in
casa lo sviluppatore in fase iniziale, e semmai poi dopo a
prenderti carico della messa in opera del progetto facendolo
realizzare ad un profilo meno qualificato.
Viceversa una volta presa la direzione sbagliata, il professionista
non avrà molte opzioni: Rifare o proseguire senza poter recuperare
quanto compromesso.
Facciamo una riflessione con una metafora
Una domanda molto semplice: Ti faresti operare da
un chirurgo dilettante? Probabilmente no, anche se,
per risparmiare, potresti accettare un'infermiera meno
qualificata per la degenza post-operatoria.
Le motivazioni della tua risposta a questa domanda sono le stesse
per cui ti converrà prendere un professionista per
progettare il tuo software, e, forse, dopo lasciare
che qualcuno di meno qualificato prosegua il lavoro impostato da
lui.
se vuoi risparmiare prendi un professionista
Quando parliamo di sviluppo software
per uso professionale, iniziare il prodotto in casa con
carenza di competenze, per poi delegarne una
parte, costerà di più che farlo fare per
intero ad un professionista, riducendo comunque qualità,
scalabilità, sicurezza e performance: Analisi
progettazione e realizzazione sono un flusso unico, e le
prime impattano fortemente sull'ultima.
Questa non è una teoria, ma una certezza
consolidata, riscontrabile ovunque si sia provato.
Correggere una rotta sbagliata e intrapresa male equipaggiati costa di più che partire nella direzione giusta e correttamente equipaggiati
Purtroppo spesso ci si rende conto troppo tardi dell'errore
commesso, e a quel punto si commette il secondo
errore: Siccome è troppo difficile prendere la decisione
di buttare via tutto e ricominciare, si sceglie di
provarci lo stesso.
Ma l'ottimismo ne ha uccisi più della paura..
Il risultato è un aumento sproporzionato dei costi a fronte di un
prodotto mediocre, non scalabile e in cui pochi sviluppatori
potranno mettere le mani e lo faranno a costi elevati.
Nota: Con sviluppo software intendiamo tanto il software server, quanto il sito web, l'app, la piattaforma cloud e quanto altro si possa creare attraverso linguaggi di programmazione.
Dove è la differenza tra un professionista e un non-professionista?
Nel caso di software e programmazione, alcune caratteristiche chiave delle applicazioni per uso professionale saranno sempre:
- Affidabilità: Il prodotto deve essere esente da fallimenti. Se il business aziendale o la reputazione coi clienti girano intorno all'applicazione, un blocco o errore possono comprometterli gravemente.
- Scalabilità e manutenibilità: In campo professionale, quasi nessuna app(licazione) è fatta per rimanere per sempre così come viene ideata. Nuove tendenze, nuove offerte, migliorie che vengono in mente dopo: L'app dovrà supportare lo sviluppo incrementale e a costi contenuti.
- Sicurezza: Vogliamo che l'app sia facilmente hackerabile? Violazione dei dati personali con conseguenti oneri di immagine e procedure? Invio di spam a danno della nostra applicazione? Nei casi peggiori truffe a danno dell'azienda o dei clienti? Manco per scherzo
Se un'applicazione seria deve avere almeno questi requisiti, va da se che facendosi in casa l'applicazione senza le dovute competenze non saremo in grado di garantirli.
Un professionista crea un sistema con queste caratteristiche, è il suo lavoro e lo fa da tempo, un fai-da-te o un autodidatta non potrebbero farlo senza un'adeguata preparazione di fondo ed esperienza accumulata.
- Esperienza e competenza: Il professionista ne ha già viste di cotte e di crude, ma non solo: Ha studiato anche le migliori tecniche per affrontare ognuna delle cotte e delle crude.
- Metodo: Il professionista non deve chiedersi "come faccio questo", dietro ogni sua decisione, apparentemente istantanea, c'è un bagaglio di conoscenza equivalente a giorni di ragionamento.
- Visione di insieme: Quando il professionista tocca questo o quello, lo fa sapendo già con quali altri componenti del sistema andrà ad interagire, e come il sistema si comporterà a distanza di anni e su grandi carichi e sotto stress, prevenendo quindi problemi non immediatamente evidenti.
Una domanda scontata
Ti faresti operare al cuore con il fai-da-te o da un autodidatta, o invece esigeresti un professionista capace? Se la risposta è " il professionista!", mi chiedo se invece faresti operare uno dei cuori del business della tua azienda in quel modo.
Quando ormai è tardi
Di fronte ad un lavoro fai da te o comunque fatto da un autodidatta, quindi con realizzazione non professionale, a cui si debba apportare una modifica, lo sviluppatore si ritrova sempre con 3 possibilità:
- Non apportare la miglioria con i conseguenti danni
- Inserire una serie di modifiche per ridurre gli inconvenienti al minimo, con un costo paragonabile all'averlo fatto da zero bene
- Eliminare per intero la funzionalità e riscriverla integrandola col resto del sistema anche esso fatto in modo non professionale, con costo molto maggiore che aver progettato e fatto tutto da zero.
Quindi con il fai da te o l'autodidatta spenderai di più
A questo punto dovresti iniziare a capire che puntare sul fai-da-te o sull'autodidatta per un'applicazione, non paga.