Chat with us, powered by LiveChat

Il nostro blog

Innoteam Thinking

Outsourcing o sviluppo software In-House: quale modalità scegliere per creare una piattaforma digitale core business?

La classica domanda che si pongono le aziende è se rivolgersi a una software house/system integrator oppure se dotarsi di un proprio team di programmatori, assunti come dipendenti.

In breve, la mia risposta è nessuna delle due strade, se si tratta di un prodotto o di un servizio digitale che rappresenta il core business della tua azienda.

O meglio, anche se non l’hai considerata o non la conoscevi, c’è una terza via e ti spiegherò qual è, perché devi sceglierla e quando.

Ma facciamo un passo indietro e partiamo dal contesto.

Uno dei principali problemi delle aziende che vogliono creare e far crescere un prodotto o un servizio digitale, è quello di trovare i programmatori che si occuperanno dello sviluppo software e della manutenzione della piattaforma.

Un altro problema fondamentale, altrettanto importante, è però anche quello di decidere la forma di collaborazione/assunzione.

Storicamente, il dilemma è se sviluppare tutto dentro casa o se rivolgersi in outsourcing ad un fornitore più o meno specializzato, il che ci porta proprio al titolo di questo articolo.

Lo sviluppo in outsourcing consente infatti alle aziende di ottenere le competenze necessarie per ottenere un prodotto di qualità e ridurre sia i costi, evitando di assumere persone che potrebbero rivelarsi non valide, che il rischio d’impresa in sé di avere dei dipendenti.

Però ci sono anche dei rischi e in molti si chiedono quale strada prendere tra le due alternative, rimanendo però quasi sempre con la paura di sbagliare in entrambi i casi.

In molti casi, prendere la decisione sbagliata può essere molto costoso, sia per gli elevati costi iniziali che per un ritorno dall’investimento non soddisfacente.

Da una parte, l’outsourcing in campo IT è diventato un fenomeno globale ed è cresciuto sempre di più negli ultimi anni, con molte aziende che decidono di affidare i loro progetti software alle aziende di outsourcing.

Tra i vari fattori all’origine di questa tendenza abbiamo i costi elevati dei talenti assunti, scadenze difficili, difficoltà nel reperire persone con le capacità e le esperienze necessarie, elevati costi di ricerca e selezione, scarsa capacità della maggior parte delle aziende di attrarre i programmatori più bravi, ecc.

Inoltre con l’outsourcing le aziende possono concentrarsi sulle proprie attività principali e delegare quelle attività che non richiedono un’interazione costante dal vivo.

Per chiarezza, dal discorso outsourcing tolgo l’offshoring e il near-shoring, cioè affidare lo sviluppo ad aziende straniere più o meno lontane (tipicamente indiane o di Paesi dell’Est) che più e più volte hanno dimostrato di non funzionare abbastanza bene e costare alla fine di più delle scelte locali, anche rispetto all’attrattività delle tariffe spesso stracciate.

Tolgo inoltre il body-rental puro, che non è outsourcing se non è effettuato con certi criteri che spiegherò (ma che automaticamente non lo rendono body-rental per come lo immagina la tipica azienda italiana).

Mettere insieme un tuo team interno e farlo funzionare bene richiede invece grandi sforzi, pazienza e una visione di lungo termine ben definita se vuoi evitare errori estremamente costosi.

D’altra parte avere un proprio team può darti una maggiore sensazione di controllo, assicurarti la proprietà di ciò che stai costruendo e in alcuni casi è un valore in sé.

Ad esempio, quando un’azienda è in fase di ricerca di round di finanziamento da investitori esterni, avere un proprio CTO (o quantomeno un responsabile tecnico) e un almeno un minimo di team interno ha il suo peso in fase di valutazione.

Diciamo che se si tratta di sviluppare codice per un’applicazione o una piattaforma strumentale al business che però non è il business in sé (es. un CRM o il CMS del sito aziendale), la strada migliore è praticamente sempre quella di affidare l’intero sviluppo e la successiva manutenzione in outsourcing ad aziende specializzate.

L’importante, come nel caso dello sviluppo di software custom e di piattaforme di Web Content Management, è di assicurarsi di scegliere il fornitore giusto per lo sviluppo in outsourcing.

Il problema se scegliere outsourcing o in-house si pone invece nel caso descritto più sopra, cioè quello delle aziende dove lo sviluppo software si riferisce ad un prodotto/servizio core business (es. un servizio digitale), come ad esempio nelle aziende digitali native, o dove lo sviluppo è relativo al canale che veicola il prodotto/servizio (es. una piattaforma B2C/B2B).

Ed è proprio il problema che risolve questo articolo; continua quindi a leggerlo fino in fondo se è anche la tua situazione.

Per capire per quali motivi di solito si sceglie tra queste due alternative, è bene analizzarne pro e contro.

Quali sono i principali vantaggi e svantaggi di ciascuna di queste due strategie? Quali sono i rischi e i possibili ostacoli? Quali sono le differenze in termini di costi? Quali sono gli altri aspetti che devi considerare quando devi optare tra outsourcing verso un team di sviluppo esterno o assunzione e crescita di un tuo team di sviluppo interno?

Vediamoli assieme.

Pro e contro principali in sintesi

Solo leggendo questo elenco di pro e contro, puoi capire come non ci sia una risposta netta alla domanda “outsourcing o in casa”, se ci limitiamo solo a queste due categorie senza considerare altre alternative.

I team di sviluppo interni (posto che tu sia in grado di trovare, attrarre e mantenere programmatori validi) possono anche  comprendere perfettamente i requisiti del tuo progetto e i valori che guidano la tua azienda, ma quasi certamente possono ritrovarsi in carenza di alcune competenze ed esperienze chiave in situazioni impreviste.

E l’imprevisto, in campo IT e con la complessità tecnologica di oggi, è la norma.

Sviluppo in casa

Pro:

  • Controllo, feedback rapido.
  • Coordinamento.
  • Comunicazione che avviene di persona.
  • Affiatamento all’interno del team (se c’è una cultura azienda idonea a svilupparlo, anche se la realtà nell’azienda italiana media è all’opposto).
  • Team dedicato al proprio progetto e non ad altri clienti.
  • Elevata esperienza sul proprio prodotto, con tempi ridotti di bug fixing, manutenzione e supporto.

Contro:

  • Costi molto elevati (stipendi, contributi, imposte, costi di gestione, elaborazione buste paga, gestione ferie e malattia, costo del personale tassato ai fini IRAP, ecc.).
  • Difficoltà a ridurre il team in caso di necessità.
  • Difficoltà a mantenere il team.
  • Elevati costi di ricerca, selezione, assunzione (il recruiting richiede molto tempo tra campagne o incarichi alle agenzie di recruitment, colloqui, formazione, ecc.).
  • Difficoltà a reperire skill adeguati, se si cercano programmatori locali.
  • Turnover elevato, del tutto naturale a causa del fattore umano e a maggior ragione nelle aziende che lavorano sempre sul proprio prodotto/servizio con poca o nulla rotazione, con conseguenti costi elevati nella ricerca di sostituti.
  • Devi avere le capacità e le competenze per gestire o quantomeno controllare i progetti.

Sviluppo in outsourcing

Pro:

  • Possibilità di attingere ad una più ampia base di talenti che hanno già accumulato esperienze.
  • Maggiori possibilità di trovare un’azienda con esperienza e competenze nelle aree richieste dal tuo progetto.
  • Possibilità di accedere a più tipi di talenti e competenze che non richiedono persone a tempo pieno e non giustificano l’assunzione.
  • Costi più bassi rispetto al personale interno se consideriamo tutti i costi più o meno nascosti di avere un proprio team, oltre a non dover sostenere costi di recruitment, formazione, talent retention, ecc.
  • L’azienda si assume meno rischi e impegni rispetto a quelli di avere dipendenti a tempo indeterminato.
  • Possibilità di cambiare fornitore in base alla valutazione dei risultati, cosa molto più difficile da fare coi dipendenti.
  • Equilibrio maggiore tra prezzo e competenza, nessuna necessità di assumere nuovi dipendenti.
  • Pianificazione semplificata del budget.
  • Time to market più rapido, evitando i problemi di staffing tipici dello sviluppo in-house.

Contro:

  • Rischi in termini di sicurezza e riservatezza, poiché alcuni dati devono essere comunicati o condivisi tramite canali online.
  • Aziende che dichiarano di avere competenze che non possiedono realmente, solo per attrarre clienti.
  • Potenziali dipendenze verso l’azienda di outsourcing quando non sei in grado di mantenere in autonomia il codice consegnato.

Oltre ai pro e i contro elencati qui sopra ce ne sono anche altri che si possono presentare nei diversi casi, ma questi sono quelli più ricorrenti.

Chiaramente questo è solo un elenco riassuntivo di pro e contro e non è semplice soppesare correttamente i vari punti quando si compie una scelta di questo tipo.

Più in generale abbiamo infatti almeno tre macro dimensioni che accomunano gli elementi di analisi dei due differenti approcci, in termini di rischi, benefici e costi.

Rischi

Innanzitutto, quando si assume un team di sviluppo interno le regole generali sulla ricerca e selezione del personale sono molto diverse da quelle specifiche di quando si assume del personale in ambito tecnologico.

Hai un’idea precisa di come procedere? Hai delle procedure per effettuare la selezione e validare i colloqui, o qualcuno che possa farlo per te in modo professionale?

Di quali tipi di esperienze, competenze, risorse e strumenti hai bisogno per il tuo progetto? Quanti sviluppatori ti servono? Ecc.

Questi sono tutti punti importanti (e non sono neanche tutti, sono solo una parte) perché il successo del tuo prodotto o servizio digitale è nelle mani tue e del tuo team, e non puoi commettere errori gravi in questa fase.

Ci sono poi anche gli aspetti relativi alla formazione, alla gestione delle attività e del personale.

Per non menzionare il rischio che i tuoi dipendenti, dopo aver speso grandi quantità di denaro e tempo per formarli e farli crescere, in qualsiasi momento possono “scappare” via e cambiare lavoro, portandosi il know how sul quale hai investito.

Evenienza per niente rara di questi tempi, in cui c’è una concorrenza fortissima tra aziende a portarsi via i dipendenti migliori e, vista l’offerta drammaticamente più bassa della domanda, ormai anche quelli di livello più junior.

Basta controllare su LinkedIn quanti anni rimangono mediamente le persone in alcune delle aziende digitali anche più note, per rendersi conto di quanto sia concreto questo rischio.

Nondimeno sono però i rischi nel rivolgersi in outsourcing ad un team esterno.

Cosa succede se il fornitore con il quale hai firmato il contratto non è realmente in grado di consegnare un prodotto funzionante e adeguato? O se alla fine ti costa più di quanto immaginato inizialmente?

E ancora peggio, hai considerato cosa può accadere se il fornitore va fuori mercato o sparisce dopo aver preso il tuo denaro?

Se un’azienda di outsourcing non è in grado di mostrare un proprio portfolio di lavori recenti, delle testimonianze positive dei clienti o se ci sono riscontri negativi da altri clienti, sono tutti segnali da tenere in considerazione.

Assicurati di trovare e di affidarti ad un’azienda con una reputazione solida e con competenze dimostrabili.

Benefici

Chiaramente oltre ai rischi ci sono dei benefici in entrambe le scelte.

Per quanto riguarda un team interno, una volta che ne hai messo assieme uno di buon livello con tutti i tipi di programmatori di cui hai bisogno, hai generalmente il pieno controllo della situazione.

Puoi inoltre impiegare il team a tuo piacimento sui fronti che preferisci.

In teoria (e se non è troppo grande), il tuo team lavorerà in modo più o meno allineato per raggiungere obiettivi comuni e condivisi, costruendo inoltre una propria cultura aziendale.

Con l’outsourcing, invece, il beneficio più importante è quello di poter accedere alle competenze ed esperienze già accumulate dal partner e normalmente in quantità più grandi di quelle che potresti essere in grado di ottenere con un team interno.

L’azienda di outsourcing metterà a tua disposizione talenti, spunti ed esperienze, soluzioni a problemi che hanno già affrontato e risolto più volte prima di te e del tuo team senza dover reinventare la ruota, effort per sviluppare e mantenere il tuo prodotto.

In pratica, può occuparsi di tutto il lavoro più pesante.

Un approccio in outsourcing consente anche di minimizzare i problemi relativi al turnover del personale.

Innanzitutto perché le aziende (serie) di outsourcing attraggono più facilmente talenti e riescono a tenerli in azienda perché ad esempio con politiche di rotazione i loro sviluppatori sono molto più stimolati, potendo lavorare nel tempo su più fronti, situazioni, clienti, tipi di tecnologie, ecc.

Inoltre le aziende di outsourcing sono più preparate a gestire i problemi relativi al turnover in modo da garantire consegne puntuali.

Altro beneficio importante è che le aziende di outsourcing meglio organizzate possono apportare processi e strumenti (es. pipeline di continuous delivery) ad aziende che faticherebbero molto a metterli in piedi da sole.

Costi

E’ vero che in Italia gli stipendi medi del personale IT sono incredibilmente bassi rispetto agli stessi posti di lavoro in buona parte degli altri stati (anche tenendo in considerazione l’aggiustamento in base al costo della vita).

Però sono allo stesso tempo tendenzialmente molto più alti della media degli stipendi in generale, e come risaputo il costo del lavoro in Italia è spaventosamente alto rispetto al netto percepito dal dipendente.

Questo significa che un team interno ha un costo veramente elevato, che va calcolato considerando non solo lo stipendio ma anche i costi di gestione del personale e di elaborazione delle buste paga, ferie e malattie, TFR, i costi di recruitment, lo spazio degli uffici e degli strumenti di lavoro, ecc.

Inoltre di solito servono ben più di 1 o 2 programmatori per realizzare prodotti digitali dotati di un minimo di consistenza.

Ovviamente tutti questi costi li ha al suo interno anche l’azienda di outsourcing, ma tipicamente è attrezzata per gestirli meglio e con minori rischi di impresa perché il rischio può essere spalmato sui vari clienti, così come può fare economia di scala su un’importante serie di costi.

Inoltre è più efficiente sui processi di formazione e recruiting, essendo specializzata nel farlo di continuo.

La soluzione: il Team Scaling

Ora che ho messo a nudo gli aspetti positivi e quelli negativi dei due approcci tradizionali, si pone una domanda.

Bisogna per forza scegliere una delle due alternative o c’è un modo per ottenere il massimo dei benefici di entrambi i modelli facendoli funzionare bene assieme, riducendone al contempo i rispettivi rischi?

La risposta è sì, il modo c’è e si basa su una formula che ho testato e messo a punto ormai in più di 10 anni di esperienza e collaborazioni continuative con clienti nello sviluppo delle loro piattaforme core business.

La formula si chiama Team Scaling e nasce appunto dell’esigenza di molte aziende in crescita (es. scaleup) di far scalare velocemente lo sviluppo software dei loro prodotti e servizi digitali.

Con il team scaling, hai a tua disposizione un team aggiuntivo di sviluppatori remoti dedicati alla tua azienda che collaborano con il tuo team interno.

Applicando questa formula mi sono accorto negli anni che oltre a far raggiungere questo obiettivo specifico, apportava come benefici importanti anche tutti quelli elencati nei capitoli precedenti: univa quindi i vantaggi del team In House a quello del team in Outsourcing e ne marginalizzava i rispettivi svantaggi.

Questo significa che, se vuoi sviluppare un prodotto o un servizio digitale, dovresti dotarti sia di personale interno che esterno.

Ovviamente c’è già chi prova ad aggiungere un po’ di sviluppo esterno al proprio team (in forma di freelance, consulenze, team di sviluppo esterno) ma raramente ho visto funzionare bene questo tipo di collaborazioni, sia perché mancavano alcuni elementi fondamentali presenti invece nel Team Scaling che per l’approccio seguito generalmente da entrambe le parti.

Devi avere un CTO o un responsabile tecnico

La prima condizione da soddisfare è la presenza al tuo interno di un CTO, o quantomeno di una figura di responsabile tecnico.

Non (solo) un project manager, ma qualcuno in grado di prendere decisioni tecnologiche e di farlo in funzione delle esigenze business.

In grado anche di gestire un team di sviluppatori e valutarne il lavoro.

Un CTO non è facile da trovare, ma dovresti averlo da un certo punto in poi come ho spiegato nell’apposita puntata del podcast del CTO Mastermind.

Con il Team Scaling, il tuo CTO/responsabile gestisce sia il team interno che quello esterno, coadiuvato però dal nostro controllo qualitativo e metodologico, formazione continua, rotazione del team e altri aspetti che lo pongono in netta contrapposizione ad un mero body rental.

Questa è già una prima differenza sostanziale rispetto a quelle aziende (che spesso non sono neanche in fase di scaleup) in cui c’è un founder che capisce qualcosa di tecnologia ma non è un tecnologo e che mette assieme qualche programmatore (es. uno assunto e un freelance o due).

Quando ci ritroviamo in questa situazione, di solito vediamo solo grandi quantità di debito tecnico ed è comunque difficile collaborare nel lungo termine perché ci sono problemi di aspettative errate da parte del cliente.

I team devono lavorare in modo integrato

La seconda condizione da soddisfare è l’integrazione tra team interno e team esterno (almeno quest’ultimo è quasi sempre da remoto).

L’integrazione deve spingersi oltre alla consegna periodica di software funzionante (es. in forma di iterazioni/sprint bisettimanali) su uno stesso repository di codice dopo aver raccolto i requisiti, quindi non semplicemente come rapporto cliente/fornitore.

Il tuo team interno e il team esterno si devono integrano alla perfezione, lavorando sullo stesso codice (che con questo modello rimane sempre di tua proprietà), condividendo i canali di comunicazione e gli strumenti di lavoro che già usi internamente (es. Slack, Jira/Trello, GitHub/BitBucket) ed effettuando frequenti allineamenti.

I due team si devono contaminare e formare a vicenda, scambiando know how e metodo: il team interno porta la competenza sul prodotto, quello esterno l’esperienza e la metodologia.

A questo punto parlare di team interno ed esterno non è solo fuorviante, ma fa sì che azienda e fornitore continuino a ragionare con vecchi schemi e mindset.

Qua invece si parla a tutti gli effetti di co-sviluppo.

Condividere il rischio

Co-sviluppo che non è solo a livello software, ma anche di aziende.

Il Team Scaling è infatti anche un modo di condividere il rischio di impresa, che è la terza condizione da soddisfare.

Sia chiaro, il Team Scaling non è un’assicurazione sulla bontà dell’idea di business del cliente.

Quando parlo di condividere il rischio di impresa intendo che il cliente continua ad assumersi il suo rischio di impresa complessivo ma riduce quello tecnologico, perché in parte ce lo assumiamo noi (es. meno dipendenti) e riduciamo la necessità di irrigidire la propria struttura.

Noi a nostra volta operiamo solo con persone assunte a tempo pieno e garantiamo la qualità del modello di lavoro, e siccome il Team Scaling non lo si fa per qualche ora di lavoro ma per quantità di lavoro che partono da almeno 10 gg al mese, questo significa per noi assumerci a prescindere una certa dose di rischi al posto del cliente.

A questo punto è chiaro che, soddisfatte certe condizioni, il modo migliore per sviluppare e far evolvere un prodotto, un servizio o una piattaforma digitale core business è quello di lavorare in Team Scaling.

Se anche la tua azienda è in fase di crescita e stai valutando se continuare a lavorare in modalità In House o se attivare un modello in outsourcing, contattaci quanto prima per una consulenza gratuita.

Nel frattempo scarica subito la guida con i principali consigli ai team di sviluppo che sono in fase di crescita e che tipicamente si trovano ad affrontare alcuni problemi di crescita non da poco.

Fai anche tu questi errori quando scegli una web agency?

Lascia un commento