Outsourcing vs. sviluppo in-house: quale modalità scegliere per lo sviluppo della propria piattaforma core business?

Quando dobbiamo sviluppare la piattaforma core business della nostra azienda ci troviamo di fronte ad un bivio in cui dobbiamo prendere una decisione fondamentale: rivolgerci ad una software house esterna (o system integrator) o dotarci di un team IT interno.

In questo breve articolo cercherò di spiegarti pro e contro di ognuna di queste due scelte e ti illustrerò una terza possibilità che (forse) non conoscevi e che, personalmente, reputo la strada migliore da intraprendere.

Ma facciamo un passo indietro e partiamo dal contesto.

Outsourcing vs. sviluppo in-house: due metodologie a confronto

I 2 problemi principali delle aziende che vogliono sviluppare un prodotto o un servizio digitale sono:

  • trovare i programmatori che si occuperanno dello sviluppo software e della manutenzione della piattaforma;
  • stabilire la forma di collaborazione con una Software House esterna o quella di assunzione di dipendenti interni.

Storicamente, il dilemma è se sviluppare tutto dentro casa o se rivolgersi ad un fornitore esterno, optando quindi per l’outsourcing.

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.

Vediamo quindi le caratteristiche di ognuna di queste due possibilità.

Lo sviluppo in outsourcing

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

Oggi sempre più aziende affidano lo sviluppo delle loro piattaforme a fornitori terzi, facendo diventare l’outsoucing un vero e proprio fenomeno globale che è cresciuto sempre di più negli ultimi anni.

Tra i fattori all’origine di questa tendenza abbiamo:

  • elevati costi di assunzione di talenti;
  • scadenze difficili;
  • difficoltà nel reperire persone con capacità e esperienze necessarie;
  • elevati costi di ricerca e selezione;
  • scarsa capacità della maggior parte delle aziende di attrarre i programmatori più bravi,

e tantissimi altri.

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

Per chiarezza, quando parlo di outsourcing non mi riferisco mai all’offshoring e al near-shoring: ovvero le pratiche con le quali si affida lo sviluppo software ad aziende straniere più o meno lontane (tipicamente indiane o di Paesi dell’Est) che più e più volte hanno dimostrato di non essere efficienti e di costare più delle scelte locali, anche rispetto all’attrattività delle tariffe stracciate.

Tolgo poi anche il body-rental puro, che non è outsourcing se non è effettuato con certi criteri che spiegherò più avanti (ma che automaticamente non lo rendono più il tipico body-rental dell’immaginario comune delle aziende italiane).

Lo sviluppo in-house

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

D’altra parte avere un proprio team può darti una maggiore sensazione di controllo, assicurarti la proprietà di ciò che stai costruendo e apportare 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 piccolo di team interno può conferire un grande vantaggio in fase di valutazione.

Lo sviluppo di applicazioni & piattaforme NON core business

Alla luce delle valutazioni fatte possiamo affermare che se si tratta di sviluppare codice per un’applicazione o una piattaforma strumentale alle attività dell’azienda che però non fanno parte del core business (es. un CRM o il CMS del sito aziendale), la strada migliore è quasi sempre quella dell’outsourcing.

L’importante è scegliere il fornitore giusto!

Lo sviluppo di piattaforme core business

Quando invece dobbiamo sviluppare un prodotto/servizio core business, come ad esempio nelle aziende digitali native o dove lo sviluppo è relativo al canale che veicola il prodotto/servizio (es. una piattaforma B2C/B2B) la scelta potrebbe essere più complessa.

Abbiamo già visto quali sono le caratteristiche di ognuna di queste due possibilità, ma per poter prendere una decisione consapevolmente è utile organizzarle secondo un’ordine definito.

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? E quali gli altri aspetti che devi considerare quando devi optare tra outsourcing o sviluppo in-house?

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”, soprattutto se ci limitiamo solo a queste due categorie senza considerarne altre.

I team di sviluppo interni (posto che tu sia in grado di trovare, attrarre e mantenere programmatori validi) possono comprendere perfettamente i requisiti del tuo progetto e i valori che guidano la tua azienda, ma potrebbero anche 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.

Detto questo, iniziamo con la nostra analisi di Pro e Contro.

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);
  • 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, un fenomeno del tutto naturale a causa del fattore umano e della scarsa rotazione delle aziende di prodotto/servizio;
  • Conseguenti costi elevati nella ricerca di sostituti;
  • Necessità di competenze elevate per gestire e coordinare i flussi di lavoro.

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);
  • L’azienda si assume meno rischi 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);
  • Maggior equilibrio tra prezzo e competenza;
  • 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: alcuni dati devono essere comunicati e 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.

Chiaramente questo è solo un elenco riassuntivo dei punti di forza e di debolezza di queste due opzioni e, soppesare correttamente i vari punti, non è semplice quando si compie una scelta di questo tipo.

Passiamo quindi ora alla valutazione 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?

Queste sono solo alcune delle domande che ti devi porre perché il tuo prodotto o servizio abbia successo.

Nel caso di sviluppo interno è tutto nelle tue mani e non puoi permetterti di fare errori!

Ci sono poi anche gli aspetti relativi alla formazione e 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 la loro formazione, in qualsiasi momento possono “scappare” via, portandosi con loro il know how sul quale hai investito.

Una situazione per nulla rara di questi tempi, in cui c’è una fortissima concorrenza tra aziende per “accaparrarsi” gli sviluppatori migliori sul mercato del lavoro (vista anche l’offerta drammaticamente più bassa della domanda).

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

Nondimeno sono però i rischi nel rivolgersi 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? 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?

Prima di scegliere un fornitore valuta:

  • Testimonianze positive e negative dei clienti passati;
  • Portfolio di lavori esistenti.

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 creato uno con un buon livello di expertise e con tutti i tipi di programmatori di cui hai bisogno al suo interno, hai generalmente il pieno controllo della situazione.

Puoi inoltre decidere come impiegare il team sui fronti che preferisci, organizzando il lavoro autonomamente.

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, esperienze e soluzioni a problemi che hanno già affrontato e risolto più volte prima di te e del tuo team.

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é, con le 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 diversamente faticherebbero a metterli in piedi.

Costi

È 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 (considerato anche 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, costi di recruitment, spazio degli uffici, strumenti di lavoro e tanto altro.

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 vengono sostenuti anche dalle aziende di outsourcing, ma tipicamente queste sono attrezzate per gestirli meglio e con minori rischi di impresa, in quanto il rischio può essere spalmato sui più clienti, così come può fare economia di scala su un’importante serie di costi.

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

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 combinandoli insieme?

Ebbene: non devi necessariamente optare per una di queste due opzioni.

Con Team Scaling ho testato e messo a punto una nuova modalità attraverso collaborazioni continuative con clienti nello sviluppo delle loro piattaforme core business e più di 10 anni di esperienza sul campo.

La formula Team Scaling 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, il Team Scaling apportava come benefici importanti anche tutti quelli elencati nei capitoli precedenti: univa 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.

Per sfruttare però questa modalità devi soddisfare alcuni requisiti:

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 del business.

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

Certo, trovare un CTO non è facile! Ma quando la tua azienda arriva ad una certa fase di sviluppo dovresti averne uno.

Con il Team Scaling, il tuo CTO (o responsabile tecnico) 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 integrare 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 o giornata 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.

Conclusioni

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 modalità Team Scaling.

Anche la tua azienda è in fase di crescita e hai bisogno di un supporto per valutare se continuare a lavorare in modalità In House, dare lo sviluppo in Outsourcing o attivare un Team Scaling?

Allora clicca qui per scoprire di più sul metodo Team Scaling

Autore