Task #51
closedMilestone #38: Uscita Starsellersworld
Comunicazione con Danilo
100%
Description
Via Whatsapp, Lunedì mattino¶
9:21, io:
Le convenzioni e le modalità con le quali due persone sono felici assieme non hanno bisogno dell’approvazione sociale. Non è la mia vita privata o la supposta qualità di vita privata che devi giudicare, ma solo gli aspetti professionali. Forse hai l’impressione che io abbia problemi comunicativi per una insoddisfazione a livello relazionale, ma ci sono aspetti tecnici comunicativi a cui dai poco peso ed importanza, e questi generano conflitti continui.
In qualche maniera ti rifiuti di riconoscerli, e lo hai sempre fatto, quando consiglio un libro come Domain Driven Design, che è piuttosto palloso e difficile da leggere, è perché evidenza quanto sia palloso e difficile interagire tra chi approccia la soluzione dal punto di vista della logica di business, e chi approccia la soluzione dal punto di vista implementativo.
Pensare che logica di business e architettura del sistema siano perfettamente sovrapponibili è la cosa più semplice da farsi, la cosa che sembra più semplice da mantenere, la cosa che sembra più semplice ed efficace da implementare.Eric Evans ha scritto circa 500 pagine di testo per spiegare un caso studio per una applicazione bancaria, ambito nel quale gli errori nel software non sono ammessi, e la consistenza dei dati è critica.
Ha scritto 500 pagine, ma nonostante tutto non si capisce esattamente di cosa parla. Fino a che non ci si scontra con un problema simile. In realtà, con molti problemi simili.
Ogni volta che hai una necessità, una funzionalità, un’idea, quell’idea è ragionata secondo le logiche di business, e non secondo le logiche implementative, che emergono solo durante l’implementazione della soluzione.
Inoltre c’è una necessità contingente, che è quella di poter andare a modificare alcune parti del sistema, in isolamento. Questo concetto sembra che sfugga completamente a tutti in azienda. Scrivere microservizi, scrivere classi separate con responsabilità definite, e tutta questa roba, serve a poter garantire l’implementazione veloce di nuove funzionalità, per poter garantire l’analisi veloce dei problemi, per poter allungare la vita ad ogni singolo modulo (microservizio o classe). In sostanza serve per rispondere più prontamente al mercato, e mantenere al tempo stesso stabilità.
Visto che la logica di business non coincide esattamente con l’architettura che la implementa, quando si riportano problemi, è sempre richiesto che si riportino gli eventi, e non la spiegazione. Questo per 2 ragioni: la spiegazione potrebbe non essere esatta, e si perde la sequenza degli eventi. C’è una terza ragione: la revisione e il refactoring dell’architettura. Sì, perché alcuni approcci sensati dal punto di vista della business logic, non lo sono implementativamente, e questo può emergere anche dagli eventi anomali. In sostanza l’evento anomalo (bug) evidenza delle carenze architetturali, ma solo se l’evento è descritto per quello che è, non per la spiegazione che gli si da. Altrimenti bisogna fare tutto un lavoro di indagine aggiuntiva.
Quando mi siedo per programmare, spesso è dopo un duro allenamento, quindi l’ultima cosa che voglio è disturbare gli altri, voglio che questa attività sia rilassante come la percepisco io: mi siedo, progetto, e scrivo codice. Evito e automatizzo tutto ciò che è ripetitivo, tolgo la parte noiosa, e mi concentro sulla soluzione.
Solo che, come ho cercato di spiegare, logica di business e soluzione architetturale non sempre coincidono. E questo è un valore per la capacità del sistema di rispondere alle richieste di mercato, ma è una cosa grossolanamente ignorata e svalutata.
Anche il vocabolario della logica di business ed il vocabolario della logica architetturale, non sempre coincidono.
Persino l’organizzazione del database, non è necessariamente coincidente con la logica di business.
Non scambiamo valori per disvalori semplicemente perché non sono facilmente apprezzati senza un’adeguata analisi e confronto con altre realtà. Considera che è la stessa cosa in ambito bancario, quindi non è che vado altrove e trovo meglio, probabilmente vado altrove e trovo colleghi che già vivono questo conflitto, oppure una cultura aziendale condivisa che riconosce questa discrepanza di vocabolari e la percepisce come valore.
Ogni valore ha un costo, ovviamente, ma cancellare un vocabolario, come suggerisci tu, Chris, e anche un po’ Gunter, senza neanche averlo aperto, mi sembra una idea piuttosto approssimativa ed affrettata. E il vocabolario non è docker help, il vocabolario sono le varie architetture, i moduli, le classi definite, i pattern utilizzati nei singoli micro servizi, l’uso che viene fatto del message broker, e via dicendo.
9:29, io:
quick&dirty non è solo sporco e veloce, ma rompe e annulla questo valore, le modifiche fatto per soddisfare velocemente qualcuno, non tengono conto di altre logiche adottate, e di conseguenza l’obiettivo di avere un sistema facilmente modificabile, controllabile, consistente, e che risponda velocemente alle richieste di cambiamento è sabotato.
Quick&dirty è solamente dirty&destructive.
Per di più, non è affatto detto che rispondere velocemente alla richiesta del cliente sia un valore: se mostri che quello che chiede può essere soddisfatto immediatamente, il valore che percepisce il cliente è che quella cosa è semplice e di poco valore, ci vuole poco sforzo, vale poco.
10:21, io:
500 euro, ma in realtà sono molte di più quelle che butteresti
Updated by Daniele Cruciani 3 months ago
- Description updated (diff)
- Status changed from new to confirmed
- Assignee set to Daniele Cruciani
- Start date set to 12/15/2025
- Estimated time set to 1:00 h
Punti chiave¶
- confini privati/professionali
- comunicabilità
- vocabolari, e consapevolezza di ambiti di pertinenza: business logic, system logic, e universal language
- valore della separazione degli ambiti
- disvalore nella confusione delle pertinenze
- disvalore nella continua violazione dei confini di pertinenza della system logic, ad opera della business logic delle logiche business.
- valore nell'attesa: non servire il cliente immediatamente, aspettare e comunicare le logiche, i cambiamenti, ed introdurre la modifica secondo il vocabolario adatto, aggiornare i vocabolari
- richiesta di compenso monetario: il tempo ha valore, anche quello speso per comunicare valore
Updated by Daniele Cruciani 3 months ago
- Status changed from confirmed to in progress
Updated by Daniele Cruciani 3 months ago
- Description updated (diff)
Updated by Daniele Cruciani 3 months ago
Continuazione chat con Danilo¶
Ore 11:03, io:
Non è tanto il quick&dirty operativo, cioè che tu operi delle modifiche sporche. Ma è soprattutto quello comunicativo.
Quando discutiamo di una feature o di qualcosa che manca, si finisce spesso di sbordare sulla logica di sistema, perdendo il focus sulla logica di business. Da questo nasce un conflitto e una svalutazione di entrambe le logiche:
- io perdo il valore del contenuto della logica di business, non lo interiorizzo, non lo scrivo esplicitamente (in redmine ad esempio)
- mi concentro sull’architettura di sistema e la sua logica, per andare ad implementare la funzionalità
- dalla discrepanza tra i due vocabolari nascono solo conflitti, che però non valorizzano la logica di business, non quella di sistema, e non la differenza tra le 2 (che ripeto, è un valore)
- il valore delle logica di business sono i soldi che si possono fare col sistema
- il valore della logica di sistema è la velocità con la quale si può rispondere a cambiamenti nella domanda da parte del business.
Capisco che continui ad ignorare queste cose, in una sorta di morbo di tuttologia, di cui soffri da un bel po’ direi, ma vedi, chi più spesso si sente competente in materia è proprio quello che non se ne occupa.
Updated by Daniele Cruciani 3 months ago
- % Done changed from 0 to 20
Updated by Daniele Cruciani 3 months ago
Updated by Daniele Cruciani 3 months ago
- Status changed from in progress to fix committed
- % Done changed from 20 to 100
Updated by Daniele Cruciani 3 months ago
- Status changed from fix committed to closed