Com'è possibile avere una singola webapp su più piccoli repository privati?

8

Siamo una squadra a basso budget che lavora su un'app web. A causa di alcune complicazioni potremmo aver bisogno di lavorare da remoto da gennaio in poi. Dopo alcune consulenze e ricerche su google, abbiamo concluso che diversi piccoli repository sono l'opzione più economica. Stiamo pensando in:

  • back-end e servizi

  • Middleware

  • Front-end

In questo modo possiamo separare i team pertinenti, ognuno dei quali lavora in remoto nel proprio repository. Quanto è fattibile avere la nostra app in diversi piccoli repository privati?

Inoltre quali considerazioni dovremmo prendere se dovessimo lavorare in questo modo?

Nota: sto chiedendo un singolo, grande progetto diviso in diversi piccoli repository. Differisce da domande correlate poste su questo sito , perché chiedono più progetti in uno o più repository. Inoltre, abbiamo scelto di dividere il progetto, soprattutto perché non siamo disposti a investire un singolo grande repository privato a meno che non intendiamo seguirlo.

    
posta Silver 14.12.2015 - 22:08
fonte

2 risposte

4

"...we concluded that several small repositories is the cheaper option."

È fantastico. Dividere e conquistare. Rompi lo sforzo in pezzi logici, dai a ogni pezzo un diverso team di base, lavori come un matto per qualche mese, riunisci tutto e ...

e ...

Beh, sarà un dannato incubo. Sicuramente non sarà più economico. Perché dovrebbe essere?

Il più grande "costo" in qualsiasi progetto software è la comunicazione. Non si risparmia denaro scrivendo il codice più velocemente. Questo è il segreto che i programmatori non ammetteranno. ( Psst. Non dirlo a nessuno. Non importa quanto velocemente scrivi codice. ) Il tempo dedicato alla scrittura del codice è assolutamente sminuito dal tempo trascorso a pianificare e parlare e negoziare e combattere e parlare e incontrando e parlando un po 'di più e compromettendo e rendendosi conto che non dovresti essere compromesso e promettendo di fare meglio e urlare e desiderare e "risolvere" (non è una parola, dannazione) e tornare indietro e fare il ping e parlare e non essere in grado di dormire .

Quindi, rompi il tuo lavoro in pezzi discreti e consegna ogni pezzo a una squadra separata. Che cosa hai appena fatto? Hai aggiunto oneri di comunicazione. Se sei fortunato e i tuoi team sono perfetti, non c'è assolutamente alcuna differenza di costo tra un grande repository e alcuni piccoli repository. Se non sei fortunato (pochi lo sono), irrompere in team separati in realtà costa di più. È abbastanza difficile rimanere sincronizzati quando si è tutti nella stessa base di codice, facendo pressione sulle dita degli altri. Ora immagina quanto sarà difficile quando tre team diversi pensano che i requisiti significhi qualcosa di leggermente diverso (senza alcun modo di correggere rapidamente perché non stanno infrangendo le cose degli altri team), hanno culture leggermente diverse e, alla fine, sono molto motivato ad evitare la colpa quando le cose vanno male, quindi sono più che disposti a buttare le altre squadre sotto il bus.

Lo so, lo so ... le tue squadre sono meglio di così. Ma sono veramente? Sei abbastanza sicuro da scommettere denaro su di esso?

Guarda, in entrambi gli approcci (grande repository / molti piccoli repository) dovrai deridere un mucchio di cazzate all'inizio. Inizi a lavorare cieco. Appena possibile, non appena sono disponibili, si dovrebbe iniziare a utilizzare le implementazioni concrete dagli altri livelli. Questo identificherà presto problemi e incomprensioni. Certo, sarà un po 'accidentato, ma è molto meno accidentato rispetto allo sviluppo indipendente con una specifica tremolante e una stretta di mano, e poi piegare le cose insieme tardi.

Il mio punto è che i grandi repository / piccoli repository non sono il problema. Ciò che conta è come strutturi i tuoi team. Idealmente, i tuoi team hanno piccole identità indipendenti all'interno di un'identità coesiva più ampia. Un po 'come gli organi di un organismo o forse uno muffa di melma . Indipendentemente dal modo in cui strutturi il codice, dai a tutti la possibilità di incontrarti. Rendi la comunicazione facile. Fai insieme gli errori e risolvili presto e spesso.

    
risposta data 15.12.2015 - 05:37
fonte
1

Ai miei occhi suddividere il repository dipende molto dai tuoi obiettivi e dagli strumenti che stai utilizzando.

Ad esempio, se stai scrivendo un'app Web Ruby on Rails senza alcuna API pubblica (o privata) che il tuo frontend sta per consumare (ad esempio da AJAX), in realtà non vedo come potresti dividere il repository senza causare un enorme mal di testa per il tuo team. In questo caso, il framework Rails funziona davvero meglio con un'architettura di tipo monolitico.

Tuttavia, se prevedi di scrivere un'API in Rails o Node.js, ma vuoi che il tuo frontend sia scritto in Ember.js o qualcos'altro, allora avrebbe senso dividere il repository. Lo stesso vale se i dati delle tue app Web verranno condivisi in futuro da altri client (ad esempio tramite un'app Android / iOS). Se prevedi di scrivere un'API da consumare da più client, dividi il repository. Alcuni sostengono che anche la suddivisione dell'API in un'applicazione completamente diversa è una cattiva idea, di cui non sono affatto d'accordo (e sembra così per buona ragione !

Separare il repository se hai già pianificato di dividere l'app web come ho descritto è l'unica opzione logica. Tuttavia, tieni presente che poiché sarà più difficile per le persone sfogliare il codice degli altri, devi assicurarti di avere una comunicazione eccellente, ma ancora più importante documentazione . Ad esempio, senza documentare l'API, gli altri due team saranno incazzati molto rapidamente perché il team dell'API non ha documentato l'architettura e il tuo team API si arrabbia perché tutti continuano a porre loro delle domande. Questo è ancora più vero per i team remoti .

Quindi, tutto dipende da come hai voluto strutturare l'app in primo luogo. Se stai creando un'app web monolitica (e sai o assicurerai che rimarrà solo un'app web ), allora disponi di un repository. Se hai pianificato di creare cose come microservices o un'API REST consumata da più client (o sei che pianifichi questo per il futuro ), dividi il repository.

    
risposta data 15.12.2015 - 13:22
fonte

Leggi altre domande sui tag