Un progetto non è una lista di task. È un lifecycle.

Di Marco Serafini · · Architecture Deep Dive

Diagramma del lifecycle di progetto come cinque stati in loop, da Intake a Retro, dove il retro migliora il template da cui parte il progetto successivo.

Il progetto è partito sei settimane fa. Il team è stato impegnato tutto il tempo. E quando fai le tre domande che dovrebbero essere banali (chi possiede questo, cosa significa "done" qui, cos'è davvero bloccato adesso), nessuno sa rispondere senza aprire quattro tab e scorrere un thread su Slack.

Il problema non è l'impegno. È che il progetto è stato costruito come un posto dove mettere task, non come un sistema che sa dov'è.

La maggior parte dei team costruisce le proprie operations attorno al contenitore. Una cartella per cliente, una lista per progetto, i task dentro. Quella è la parte che tutti azzeccano, ed è la parte che conta meno. Il contenitore ti dice che il lavoro esiste. Non ti dice se il lavoro è in carreggiata, chi è responsabile, o se quello che si sta costruendo è ancora quello che è stato venduto.

Questa è una camminata dentro l'altra parte: l'architettura sotto un singolo progetto. Non come far condividere a quaranta progetti una stessa forma (l'ho scritto a parte, come versione a livello di portfolio di questa domanda), ma come un progetto andrebbe modellato perché sappia sempre dov'è. Due cose lo rendono possibile: un piccolo set di oggetti, e un lifecycle fisso attraverso cui quegli oggetti si muovono. Userò ClickUp come esempio concreto perché è dove facciamo girare il delivery di Novrith, ma il metodo mappa su qualsiasi tool di work management. Gli oggetti e il lifecycle sono il punto; la piattaforma è dove puoi vederli.

Il contenitore non è l'architettura

Quando un progetto si sfalda, il primo istinto è prendere ancora più struttura di quella che hai già: un'altra cartella, una naming convention, uno status che nessuno aveva chiesto. Niente di tutto questo aiuta, perché quello che manca non sono più contenitori. È il modello che i contenitori dovrebbero contenere.

Un project lifecycle è la sequenza fissa di stati attraverso cui ogni engagement si muove: intake, assignment, execution, review, retro. Esiste perché le stesse domande vengano fatte a ogni progetto negli stessi momenti, invece di essere scoperte tardi nei progetti che per caso le hanno saltate.

Una cartella permette a un progetto di saltare una domanda; un lifecycle no. La differenza tra un motore di operations e un drive ordinato pieno di task è se la struttura impone la domanda giusta al momento giusto, o si limita a immagazzinare quello che il team si è ricordato di scrivere.

Quindi, prima dei cinque stati: gli oggetti che si muovono.

Gli oggetti: un piccolo data model

Non ti servono molti oggetti per far girare bene il delivery. Te ne servono pochi, con mestieri chiari e relazioni chiare, usati allo stesso modo ogni volta. Cinque reggono il peso.

Il cliente è l'account a cui appartiene il lavoro. In ClickUp, una cartella per cliente (una cartella, non uno space, così la vista cross-progetto resta possibile dopo). Tutto quello che sta sotto eredita da qui: il segmento, l'account owner, la storia della relazione.

Il progetto è un singolo engagement: uno scope definito con un inizio, una fine e un accordo commerciale dietro. È l'oggetto che si muove attraverso il lifecycle, ed è il livello che la maggior parte dei team modella di meno. Un progetto non è una lista di task. È un record che dovrebbe sapere dirti, in qualsiasi momento, in quale stato è, chi lo possiede e se è in salute.

La milestone (facciamo girare gli engagement come fasi, da M1 a M5) non è un contenitore a sé. È un campo sotto cui i deliverable si raggruppano. Fare della fase un campo invece di una cartella è una scelta deliberata: tiene il progetto leggibile come una sequenza di fasi senza seppellire il lavoro due livelli più in basso, e ti dà il confine naturale dove avviene la review. La milestone è dove il progetto si ferma per essere controllato, non un cassetto dove mettere le cose.

Il deliverable è un esito visibile al cliente. "Lead scoring attivo nel CRM." "Sequenza di onboarding automatizzata." Nominato come risultato, non come task. In ClickUp è un task con un type client-facing, sotto la sua milestone. Il deliverable è il livello che il cliente legge, e il livello su cui forecast, fattura e scope sono tutti d'accordo.

Il task è il lavoro interno che costruisce un deliverable: "draft schema v2", "fix del retry del webhook", "secondo giro di QA". Vive come subtask sotto il deliverable che serve, ed è il livello del team, non del cliente. Lo split tra deliverable e task è l'unico confine in tutto questo modello che si ripaga due volte: permette di leggere lo stesso progetto in due modi senza mantenerlo due volte. Il cliente legge i deliverable; il team lavora i task. (Se la distinzione è nuova, vale la pena disegnarla da sola prima di costruirci sopra qualsiasi cosa.)

Il retro è l'oggetto che quasi nessuno modella. È il record di cosa il progetto ti ha insegnato: cosa ha funzionato, cosa è slittato, cosa il template dovrebbe fare diversamente la prossima volta. Modellato come oggetto legato al progetto, invece che come una riunione che ogni tanto succede e poi evapora, diventa la cosa che fa migliorare il motore invece di limitarsi a ripetersi.

Cinque oggetti, una catena: un cliente tiene i progetti, un progetto raggruppa i deliverable per milestone, un deliverable è costruito dai task, e un retro chiude il progetto e alimenta il successivo. Tutto quello che succede nel delivery è uno di questi cinque, in una delle relazioni qui sopra. Se qualcosa non rientra, di solito è uno di loro etichettato male, non un sesto tipo di cosa.

Quello è il data model. Ora guardalo muoversi.

Intake: il progetto viene colato, non costruito

Intake è dove il progetto entra nel modello. Il trigger non è una persona che decide di partire; è un evento. Un deal passa a Won nel CRM (Attio, nel nostro caso), e il progetto viene istanziato da un template standard, mai una lista vuota.

Istanziato, non costruito. Quella parola è la differenza tra un progetto che ha la forma di tutti gli altri e un progetto che ha la forma di chiunque l'abbia impostato. Il template porta la struttura delle milestone, i deliverable standard, i campi obbligatori e lo split deliverable-versus-task già al posto. Quello che si aggiunge sono le specifiche: lo scope ereditato dal deal, l'owner impostato dal segmento, le date.

La regola operativa all'intake è un gate, non uno step. Il progetto non può lasciare l'intake finché tre cose non esistono come campi sul record: uno scope bloccato, esattamente un owner nominato, e una definizione di done in una frase. Non detta a voce in una call di kickoff. Scritta, sul progetto.

Il failure mode quando questo gate manca è il teardown più comune che faccio sul lato operations. Il kickoff viene prenotato prima che lo scope sia bloccato, così il team esce allineato su un obiettivo vago. Il lavoro viene distribuito prima che qualcuno sia nominato. E sei settimane dopo, le domande a cui si doveva rispondere all'inizio si ripresentano come confusione, perché quello che non è mai stato creato all'intake non si può recuperare dopo. Arriva solo in ritardo, e più costoso.

Quello che l'intake produce per il resto del lifecycle è un record di progetto che già sa cos'è: scope, owner, definizione di done, e un set di deliverable in attesa di essere assegnati. Se quelli non sono sul record quando l'intake chiude, l'intake non è finito. L'execution è solo partita senza di esso.

Assignment: un owner, o non è successo

Assignment è lo stato più corto e quello più silenziosamente saltato. Ogni deliverable riceve esattamente un owner e una due date. Il progetto ha già il suo singolo owner dall'intake; ora il lavoro sotto riceve lo stesso trattamento, un livello più giù.

La regola è assoluta: nessun deliverable entra in execution senza esattamente un owner nominato. "Il team" non è un owner. È la parola che un progetto usa quando vuole che ognuno dia per scontato che ce l'abbia qualcun altro. La co-ownership è la cosa che ogni deliverable bloccato ha in comune: due persone che pensavano entrambe che fosse l'altra a guidare, e una due date che è slittata perché nessuno ne ha sentito il peso.

Nel modello, l'owner è un campo obbligatorio sia sul progetto sia su ogni deliverable. Obbligatorio nel senso che la struttura non lascia avanzare l'item vuoto, non "dovremmo davvero ricordarci di compilarlo." Nel momento in cui un deliverable ha un owner e una data, esiste un orologio: il sistema può ora dirti quando qualcosa è in ritardo senza aspettare che una persona se ne accorga.

Quello che assignment produce è un progetto dove ogni deliverable ha un nome e una data attaccati. Se non riesci a dire, dal solo record, chi è responsabile di ciascuno ed entro quando, non hai un problema di assegnazione che una riunione può risolvere. Hai un modello che non ha mai catturato la risposta.

Execution: dove lo status deve essere vero

Execution è il lungo centro, e l'unico stato che riguarda davvero il fare il lavoro. I task vengono costruiti sotto i loro deliverable. Il deliverable si muove man mano che i suoi task si muovono. E l'unica cosa che l'architettura deve garantire qui è che lo status di un deliverable non sia mai una bugia.

È qui che lo split deliverable-versus-task si ripaga. Il cliente legge il livello in alto (i deliverable, nominati come esiti), e il team lavora il livello in basso, i task. Un task di QA saltato non spaventa il cliente, perché il cliente non stava guardando il task di QA in primo luogo.

La regola che lo tiene onesto è il rollup: lo status di un deliverable è derivato dai suoi task, non scritto sopra di loro. Se i task sotto un deliverable sono bloccati, il deliverable non può mostrarsi verde. L'automazione fa quella vigilanza: arrotola lo status dal lavoro, segnala ogni deliverable non toccato oltre la sua cadenza prevista, fa emergere una data slittata nel momento in cui si muove. In ClickUp queste sono automazioni native; le versioni cross-tool più pesanti girano su n8n. In ogni caso, la macchina vigila così la vista di supervisione non è mai una storia che qualcuno le ha raccontato.

Il failure mode qui è lo status theater: un progetto che sembra in carreggiata in ogni report ed è in fiamme sotto, perché qualcuno ha segnato il deliverable verde per schivare una conversazione scomoda. Lo status scritto a mano riflette come si sente l'owner; lo status arrotolato riflette cos'è vero. L'architettura deve rendere il secondo il default, perché il primo è quello che tutti fanno sotto la pressione della deadline.

Quello che execution produce è un progetto la cui superficie dice la verità. Il livello dei deliverable è l'update per il cliente. Non una cosa che qualcuno scrive una volta a settimana traducendo la lista dei task in qualcosa di presentabile, ma una lettura live di dov'è davvero il lavoro.

Review: il gate a ogni confine di milestone

Review è lo stato che la maggior parte dei team non ha affatto. Il lavoro scorre da una fase alla successiva perché il calendario si è mosso, non perché la fase precedente fosse davvero finita. M2 parte perché è la settimana tre, non perché i deliverable di M1 erano stati accettati.

Nel modello, il confine di milestone è un gate. Una fase non può chiudersi (e la successiva non può aprirsi) finché i suoi deliverable non hanno raggiunto la loro definizione di done e il cliente non ha visto e accettato il livello dei deliverable. La review è dove tre cose accadono insieme: il lavoro è controllato rispetto alla definizione di done scritta all'intake, il cliente firma su quello che può vedere, e la fase successiva si apre con i propri deliverable pronti da assegnare.

Una regola dentro questo stato conta più del resto: chiudere una fase è una decisione umana, mai automatica. L'automazione può arrotolare lo status, segnalare la staleness e dirti che una fase sembra completa. Non deve mai dichiarare la fase finita. Segnare il lavoro come concluso è un giudizio su qualità e accettazione del cliente, e nel momento in cui lasci che sia una regola a deciderlo, il gate smette di essere un gate. La macchina vigila; una persona decide.

Il review gate è anche dove becchi il progetto che è derivato in silenzio fuori dal modello: quello che ha inventato uno status, saltato il livello dei deliverable, o iniziato a portare scope che nessuno aveva concordato. Una richiesta che non mappa su nessun deliverable è, per struttura, fuori scope, e il gate è dove questo diventa visibile invece di diventare la sorpresa del mese prossimo. Riporti il progetto in forma qui, al confine, prima che la deriva si componga.

Quello che review produce è un handoff pulito tra fasi, con l'accettazione del cliente registrata sui deliverable e la fase successiva pronta a partire. Saltalo e le fasi si sciolgono una nell'altra finché "done" è quando il team finisce le cose ovvie da fare.

Retro: lo stato che lo rende un motore

Retro è ciò che separa un motore di operations da un processo che si limita a girare. Quando un progetto chiude (e ai confini di fase significativi lungo la strada), il team cattura cosa il progetto ha insegnato: quali stime erano sbagliate, dove il template ha combattuto contro il lavoro, cosa serviva al cliente che i deliverable standard non coprivano.

La trappola è trattarlo come una sensazione che viene condivisa e poi dimenticata. Modellato come oggetto, il retro ha un mestiere: il suo output è una modifica al template da cui il prossimo intake istanzia. Un deliverable che mancava ogni volta viene aggiunto al set standard. Una fase che andava sempre lunga viene ri-scopata. Un campo che nessuno compilava viene tagliato o reso obbligatorio. Il retro non è riflessione fine a se stessa. È la modifica che i prossimi quaranta progetti ereditano.

Quello è il loop che rende tutta la cosa un motore invece di una cartella. L'intake istanzia da un template; il progetto attraversa assignment, execution e review; il retro migliora il template; il progetto successivo viene colato in uno stampo leggermente migliore del precedente. La struttura si compone invece di decadere, di proposito, perché il percorso di feedback è un oggetto nel modello, non una buona intenzione.

La regola: un progetto non è done quando l'ultimo deliverable parte. È done quando il retro esiste e ogni modifica al template è loggata. Senza, non perdi le lezioni in modo drammatico. Le perdi in silenzio, e le ripaghi sul progetto successivo che fa lo stesso errore che nessuno ha scritto.

Un solo modello, letto a quattro altitudini

Cinque oggetti, cinque stati, e un payoff che rende la disciplina degna: poiché ogni progetto condivide lo stesso modello, gli stessi dati si leggono a qualsiasi altitudine serva al lettore (founder, delivery lead, contributor, cliente) senza che nessuno costruisca un secondo tracker. Quattro persone, quattro domande, un solo set di dati, e regge solo perché il modello non cambia forma da un progetto al successivo. Le meccaniche a livello di portfolio di quelle viste sono un argomento a sé; qui il punto è più stretto: le viste sono gratis una volta che il modello è giusto, e impossibili finché è improvvisato.

È la stessa lezione che insegna il lato revenue, un motore più in là. Una pipeline non è un set di etichette; è un set di regole operative. Un progetto non è una cartella; è un lifecycle con un modello sotto. Abbiamo scritto la versione revenue di questo argomento come il caso per progettare il sistema prima dello stack, e la versione lead lifecycle come la catena che corre dal primo contatto al passaggio di consegne. Operations è il terzo lato della stessa forma: progetta il modello, poi lascia che il tool lo implementi.

Come testare il tuo setup

Non devi ricostruire niente per scoprire se hai un lifecycle o una cartella. Prendi un progetto attivo e fai cinque domande al solo record: senza chiedere al team, senza aprire Slack.

  1. Chi lo possiede, e chi possiede ogni deliverable? Se la risposta è "il team," o se per una cosa sola spuntano due nomi, l'assignment non è mai davvero successo.
  2. Cosa significa "done," in una frase, scritto? Se "done" vive solo nella testa di qualcuno, l'intake non è finito. Si è solo fermato.
  3. In quale fase è, e quale gate ha superato per arrivarci? Se le fasi sono avanzate perché è passato il tempo, hai step, non gate.
  4. Lo status è vero? Tira fuori un deliverable che mostra verde e controlla i task sotto. Se il verde è scritto sopra un task bloccato, la tua superficie è teatro.
  5. Cosa ha cambiato del template l'ultimo progetto chiuso? Se la risposta è "niente, i retro non li facciamo davvero," il tuo motore non impara. Gira e basta.

Non sono una dashboard. Sono un test forense, e ti dicono esattamente dove il modello si rompe: non se il team lavora sodo, ma se la struttura sta reggendo il lavoro o si limita a immagazzinarlo.

Una cartella di task ti dice che il team è impegnato. Un lifecycle ti dice dov'è ogni progetto, chi è responsabile, se la superficie è vera, e se il motore sta diventando migliore nel suo stesso mestiere. Il lavoro è lo stesso in entrambi i casi. La differenza è interamente nel modello sotto, e il modello è la parte che puoi davvero progettare.

Operations systemsAutomation & integrations