Dovrebbe esserci un ruolo formale (interno o esterno) assegnato agli ambienti di sviluppo per controllare la complessità dispendiosa?

8

Alcuni anni fa, ho lavorato per una piccola azienda che è andata così avanti nello sviluppo di strutture interne che hanno dedicato il loro sviluppatore più anziano e il loro architetto allo sviluppo di un framework MVC personalizzato e di un ORM da zero. Queste due cose erano ortogonali al loro prodotto principale. Sfortunatamente il supporto per questo approccio guidato dal framework è arrivato dall'alto e ha ritardato l'erogazione di software che genera reddito, e le strutture prodotte erano notevolmente inferiori rispetto alle alternative standard, il che ha aggravato i ritardi. La compagnia ha bruciato rapidamente denaro e, alla fine, tutti sono stati licenziati.

Un successivo datore di lavoro ha commesso un errore simile - hanno uno sviluppatore altamente qualificato - un perfezionista, con una solida base nei modelli di progettazione aziendale per sovraintendere grossolanamente una soluzione di consulenza per uno dei loro clienti, consapevolmente con una perdita, in la speranza che la soluzione possa essere adattata ed estesa per altri clienti. Il progetto è stato superato in modo significativo. Ma nessun altro potenziale cliente ha morso. Un errore strategico placcato in oro che costa una piccola fortuna.

In entrambi i casi si è verificato un significativo grado di overengineering. In entrambi i casi, la società e la gestione del progetto erano persone con background di dominio o analisi, piuttosto che un background di programmazione. In entrambi i casi gli architetti del software hanno creato soluzioni troppo complesse per grattarsi i loro pruriti e migliorare i loro curriculum, con qualche complicità da una gestione non tecnica. In entrambi i casi gli architetti non avevano alcun interesse a contenere i costi (a parte il rischio di perdere il posto di lavoro in caso di bancarotta delle aziende, il che non rappresentava un grosso rischio, considerando la loro elevata occupabilità).

La mia esperienza suggerisce che non è una trappola insolita per i negozi di sviluppo.

C'è posto nei progetti software per un formale formale avversario interno o esterno - un "Quantity Surveyor" - per usare un'architettura analogica - che può richiamare, o prevenire una eccessiva ingegneria eccessiva? Chi è il più adatto a ricoprire questo ruolo?

    
posta user104662 11.10.2013 - 17:47
fonte

2 risposte

6

"Controllo della complessità" è il lavoro di:

  1. L'architetto, il cui compito è garantire che il sistema e l'architettura aziendale siano adatti per i progetti / prodotti correnti ;

  2. Lo sviluppatore, il cui compito è creare disegni e codice che non siano solo corretti ma anche mantenibili e anche per esaminare il codice di altri sviluppatori per garantire che possano capirlo; e

  3. L'analista di business / sistemi o il proprietario del prodotto, il cui compito è capire che cosa in realtà ha effettivamente bisogno in questo momento , cosa può essere finito in seguito, o cosa potrebbe non materializzarsi affatto .

La "complessità" è comunque un concetto astratto, e si potrebbe sostenere che "ridurre la complessità" è lo scopo stesso del software in primo luogo, quindi non ha senso suggerire un ruolo ad esso dedicato - questo è cosa dovrebbe fare già l'intero team!

Supponendo che uno sguardo superficiale al ROI e al TCO dimostrino che la / le soluzione / i è / sono realmente e veramente sovra-ingegnerizzata, quindi mi dispiace dire che gli architetti, gli sviluppatori e gli analisti che ci lavoravano semplicemente non erano molto bravi nel loro lavoro. E i responsabili dell'aspetto quello sono i dirigenti o i dirigenti che li hanno assunti; possibilmente hanno coltivato una cultura dell'ingegneria eccessiva e sono parzialmente in errore, o forse hanno appena ricevuto cattivi consigli dal team di implementazione.

Non mi azzarderò a indovinare a quale uno dato che io (probabilmente) non ho lavorato per la tua azienda, ma sono sicuro che puoi capirlo da solo abbastanza semplicemente avendo una conversazione one-to-one con uno o alcuni dei suddetti gestori.

Per inciso, lo sviluppo di framework interni non è sempre una cosa negativa. È solo che questi quadri dovrebbero generalmente essere basati sull'osservazione e il perfezionamento del processo attuale. I quadri o le librerie che avvengono rifattorizzando il codice esistente tendono a durare a lungo. D'altra parte, se le persone si immergono e iniziano a sviluppare un framework senza alcun contesto, allora di solito diventa una responsabilità e rapidamente.

Le persone devono essere in grado di riconoscere la differenza tra le convenzioni (la maggior parte dei progetti di un'organizzazione utilizzerà lo stesso stack tecnologico, con una certa quantità di codice boilerplate, ma ciò non significa bloccarlo tutti insieme in un "quadro" è una buona idea) contro duplicazione (le persone stanno letteralmente risolvendo gli stessi problemi di business o tecnici più e più volte e le incoerenze portano a disegni contorti e gravi difetti). Le aziende di software possono e dovrebbero riconoscere l'ultimo scenario e prendere attivamente provvedimenti per, beh, ridurre la complessità. I framework fanno riducono la complessità a patto che non subiscano l'effetto inner-platform .

    
risposta data 12.10.2013 - 14:55
fonte
5

Is there place in software projects for a formal internal or external technical adversarial role - a "Quantity Surveyor" - to use a building analogy- that can call out, or prevent wasteful over-engineering? Who is best suited to fill this role?

No, di solito non esiste una tale posizione.

Il trucco è assumere persone giuste per il lavoro. Persone che non hanno intenzione di sovra-ingegnerizzare e fanno solo ciò che è necessario.

Ciò può essere fatto usando approcci agili (come i requisiti di implementazione nelle iterazioni o l'uso di TDD o BDD). Ma ancora una volta, se l'architettura è sovradimensionata, non sarà di aiuto.

    
risposta data 11.10.2013 - 18:30
fonte

Leggi altre domande sui tag