Cosa desideri che gli sviluppatori farebbero diversamente? [chiuso]


35

Come sviluppatore, passo la maggior parte del mio tempo a pensare al codice, all'interfaccia utente, alle strutture di dati e così via, ma (lo ammetto coraggiosamente) non tendo a considerare le implicazioni della mia app per amministratori di sistema e DBA fino al momento della distribuzione l'applicazione.

In primo luogo, mi dispiace. In secondo luogo, cosa vorresti che io e altri sviluppatori con cui avessi a che fare, farei diversamente? Quali cose ti semplificherebbero la vita, causerebbero meno problemi, incoraggerebbero la cooperazione e ridurre gli arresti anomali, i problemi di prestazioni e gli incubi di configurazione?

Risposte:


34
  1. Pensa e costruisci in sicurezza dal giorno 0.
  2. Utilizza il controllo versione per tutto: codice sorgente, documentazione, configurazione, ecc.
  3. Documentazione, documentazione, documentazione.
  4. Installazione e disinstallazione pulite, utilizzando imballaggi nativi della piattaforma
  5. Separare i dati di configurazione da librerie ed eseguibili
  6. Supporto per l'esecuzione di diverse versioni in parallelo per test e migrazione
  7. Registrazione affidabile e configurabile
  8. Monitoraggio leggero, preciso e sicuro
  9. Checkpoint e backup dell'applicazione
  10. In che modo l'applicazione reagisce ai problemi: memoria insufficiente, file system pieno, rete inattiva, file di configurazione mancanti / danneggiati, inclinazione del tempo?
  11. Avere sempre ambienti di sviluppo, test e produzione separati. Con tutto il software VM gratuito, non ci sono scuse!

Ricorda che la tua applicazione probabilmente ha più stati che su o giù. Disegna un diagramma di stato. Molte applicazioni hanno stati come:

  • giù
  • inizializzazione
  • recupero
  • up-ma-non-accetta-lavoro
  • in attesa
  • checkpointing
  • in lavorazione
  • finendo
  • chiudere
  • giù

Pensa a cosa succede se il sistema si arresta in modo anomalo durante ogni stato. In che modo un amministratore di sistema monitorerà e controllerà le transizioni di stato?


4
Wow. L'idea del diagramma di stato è FANTASTICA. Lo nominerò per lo snippet di risposta più cool del giorno!
quux

Solo un pazzo: la sicurezza è più un problema di progettazione. Devi prima definire cosa significa "sicuro" nel tuo contesto (cosa dovrebbero essere in grado di fare gli utenti, cosa è segreto ecc.). Altrimenti ci sono piccoli sviluppatori che possono fare ...
sleske,

17

Distinguere l '"utente" dalla SA.

Un "utente" deve sapere come utilizzare il software. Agli utenti non interessano cose come l'installazione del software.

La SA non si preoccupa di come utilizzare il software, ma deve conoscere alcuni dettagli critici su come installare il software.

Scrivi la documentazione separatamente per ciascuno di quei ruoli, comprese le informazioni rilevanti per ciascuno di essi.


3
Penso che sia degno di nota il fatto che gli amministratori dovrebbero essere esperti istantanei di ogni aspetto della loro rete, nonché delle stazioni di lavoro e delle applicazioni che girano su di essi. Quando abbiamo il personale finanziario, le persone ci chiedono come fare un aggiornamento sul loro software di gestione stipendi è facile, quando la logistica ci chiede perché non possono eseguire il loro ordine, sta a noi già sapere esattamente cosa succede nel loro processo di ordinazione. Penso che la documentazione su come ciascun sistema in realtà parla l'uno con l'altro sia facilmente dimenticata, lasciando noi amministratori come "stupidi" perché non conosciamo i dettagli intricati del loro lavoro
bobby,

9

Uno dei miei desideri è l'inclusione di messaggi appropriati in eccezioni e codici di errore. È completamente opaco per qualcuno che non ha sviluppato l'applicazione cosa JimmyNotAtHomeException: it's late!significhi.

Ma un messaggio come Unable to find jimmy - initial manual call_mother procedureè molto utile.


2
Sono d'accordo. Si prega di avere più livelli di registro e documentare ciò che va nel registro!
Clinton Blackmore,

Sfortunatamente, per alcune aziende i messaggi di errore criptici fanno parte del loro modello di business per vendere contratti di supporto. Non vogliono davvero che tu capisca.
knweiss,

8

Comunicazione, comunicazione, comunicazione. Ogni problema tra un amministratore di sistema e uno sviluppatore può praticamente essere ricondotto a una mancanza di comunicazione. Se prima di un progetto i amministratori di sistema (o un loro rappresentante) e gli sviluppatori si fossero riuniti e avessero avuto una bella discussione di quadro, SOOOOOOOOOO molti problemi potrebbero essere evitati lungo la linea. Non posso dirti quante cose si guastano perché sviluppi tutti su una scatola in sviluppo solo per vederlo andare in fiamme in prod perché l'app viene quindi separata in App server + DB server + interfaccia server, ecc. Complimenti per aver sollevato questo argomento.


8

Coinvolgici all'inizio del progetto. Come il vero molto presto, a livello di specifiche funzionali.

Qualcun altro ha menzionato la necessità di installare manualmente su ogni PC, ma lo stesso vale per le modifiche di configurazione e configurazione. Se scegli di archiviare qualcosa come stringhe di connessione sul lato client e devi aggiornarle regolarmente, probabilmente vorremmo ucciderti .

Scegli la tecnologia che può essere correttamente gestita e configurata centralmente, per lo stesso motivo. Assicurati che si integri bene con qualsiasi strumento di gestione centrale che utilizziamo.

Testare sempre usando il minimo comune denominatore. Ciò significa non amministratore, sul sistema operativo più primitivo, suite di applicazioni e piattaforma browser di uso comune. Non ci piace avere un aggiornamento del browser richiesto per tutti i nostri utenti atterrati su di noi all'ultimo minuto possibile.

Non saltare per incolpare noi quando le cose vanno male. Nel mio vecchio lavoro ogni volta che un'app si rompeva, gli sviluppatori ci puntavano immediatamente il dito. "Hai installato una nuova patch, non aggiornerai i browser, la tua sicurezza è troppo stretta" o altro. Questo genera un'atmosfera distruttiva. Siamo dalla stessa parte, davvero, e vogliamo lavorare con te per risolverlo, ma non possiamo in quel tipo di circostanze.


Vorrei poter votare due volte :-).
sleske,

7

Non essere elitario.

"Non sprecare il mio tempo, amico Sei solo un amministratore di sistema dogsbody;. Io scrivo il software e si limita a servizio così solo zitto con le vostre preoccupazioni meschine e fare come dico io, OK.?"

Uno sviluppatore in realtà mi ha detto quelle parole una volta (1). In email. CC'd a un grande gruppo di distribuzione. L'implicazione era chiara: come sviluppatore, era signore e padrone dell'intero universo del software; ed ero semplicemente un lavoratore a tempo indeterminato assunto per occuparsi di compiti troppo banali per lui per perdere tempo prezioso. Ovviamente questo è un esempio quasi nel caso peggiore, ma sai, ho sentito echi forti e deboli di quel commento da un certo numero di sviluppatori sia prima che dopo (2).

Puoi fare più soldi di me (ma non assumerlo!). Ma ci vuole un team per costruire, operare e mantenere i sistemi su cui fanno affidamento i nostri utenti. Alla fine li serviamo tutti.

Capisco che il tuo lavoro e le tue abilità siano diverse dalle mie. Rispetto le tue capacità. Spero che risponderai alle mie domande anche quando ti sembrano elementari e stupide. Restituirò allegramente questa cortesia!

Non sto facendo un pazzo viaggio di potere, come hanno detto, pensato e pubblicato molti forum negativi (o semplicemente poco premurosi) in vari forum. Ma le mie preoccupazioni sono diverse dalle tue e le mie domande e suggerimenti non sono al servizio del mio ego. In effetti il ​​mio compito è farti apparire migliore, mantenendo le tue app in ottime condizioni, disponibili e reattive a tutti gli utenti. Per farlo, devo mantenere il resto della rete e anche i sistemi in esecuzione in perfetta forma.

Sono pienamente consapevole che in passato hai incontrato stupidi, pazzi di potere e / o semplicemente semplici amministratori pigri. Sto cercando di non essere uno e di non sembrare uno. Se lasci spazio a questa possibilità e lo riconosci quando lo vedi, sono abbastanza sicuro che otterrai ciò di cui hai bisogno mentre quegli altri stronzi continuano a fumare su che stronzo è il loro amministratore di sistema.


(1) Insisteva anche che il suo programma (uno strumento per la scrittura e la gestione dei requisiti software) necessitasse dei privilegi di amministratore di dominio per l'installazione e l'esecuzione. Era un grave rischio per la sicurezza.

(2) Ho anche lavorato con molti fantastici sviluppatori che potevano insegnare quando necessario e apprendere quando necessario.


Dio mio, che idiota. È abbastanza brutto dirlo, ma girarlo in giro per il posto è vergognoso
harriyott,

Concordato. Quello sviluppatore avrebbe dovuto essere davvero sgranato dal loro superiore (che si spera fosse anche CC ;-)).
sleske,

6

Rispetta che gli amministratori di sistema hanno un lavoro da svolgere e lascia che facciano il loro lavoro. Molte aziende hanno amministratori di sistema incompetenti e questo spesso non è realistico. Ma ho visto sviluppatori arroganti ignorare i consigli dei gruppi di sistemi anche dopo che i amministratori di sistema hanno dimostrato la loro competenza.

Discutere la progettazione di un nuovo sistema con amministratori di sistema. C'è spesso una visione preziosa. Gli sviluppatori guardano spesso alle discussioni con gli amministratori di sistema e forniscono i requisiti iniziali come "ottimizzazione prematura". In realtà ho visto il capo di un gruppo di sviluppo dire che era una perdita del suo tempo discutere dei requisiti per i nuovi server di database con amministratori di sistema e amministratori di database, anche nella misura in cui si descriveva se si tratta di un carico ad alta intensità di scrittura o ad alta intensità di lettura, oppure quanta memoria sarebbe necessaria.

Discutere i problemi di prestazioni con gli amministratori di sistema. Onestamente solo i amministratori di sistema sono in grado di interpretare correttamente le metriche delle prestazioni sui sistemi. Ho visto gli sviluppatori decidere che Linux perde sempre memoria perché la memoria libera riportata da "free" diminuisce sempre, anche dopo la decima volta che viene spiegato l'output di "free".

Non trarre conclusioni senza discuterne con gli amministratori di sistema. Ho visto gli sviluppatori rimanere bloccati su teorie come "i database sono sempre legati al disco" (non sapevano che esistesse anche iostat), "RAID 5 è più veloce per i carichi di lavoro transazionali" (basato sul ricordo di un sistema di database che è stato spostato da una piattaforma hardware all'altra: era un carico di lavoro ad alta intensità di lettura, la soluzione RAID5 aveva unità sempre più veloci distribuite su più controller. Ma dimenticarono questi dettagli e ricordarono solo la conclusione.)

Non progettare una soluzione a un problema di sistema senza discuterne con gli amministratori di sistema. Ho lavorato in un ambiente patologico in cui gli sviluppatori progettavano una soluzione e venivano a chiedere una piccola assistenza per l'implementazione. I membri del gruppo Unix oltre a me, il capo del gruppo Unix e il suo capo, volevano trattare gli sviluppatori come "clienti", non come collaboratori che cercavano di far funzionare un'infrastruttura globale. Il cliente ha sempre ragione, non ha messo in discussione ciò che stava facendo o perché. Ero l'unico a insistere affinché il problema fosse descritto in modo da poter determinare una soluzione corretta. Non agire in modo tale da creare ambienti patologici come questo. Non si traduce in un vantaggio netto - invece, i gestori di sistemi agiranno in modo difensivo e tutti ne soffriranno.

Non sei più a scuola. Questi sono sistemi del mondo reale e non agiscono in modo ideale. Ad esempio, non tutto ha latenza zero. Quando un amministratore di sistema ti avverte che le soluzioni di clustering sono solo a scopo politico e che la maggiore complessità del sistema diminuisce l'affidabilità complessiva, prendila sul serio. Devi progettare per le modalità di errore del mondo reale, ad esempio quando perdi il server con cui stai parlando tramite TCP, probabilmente la connessione non verrà ripristinata per te. Gli amministratori di sistema comprendono le modalità di errore del mondo reale.

O ascolta ciò che ti dice il tuo amministratore di sistema, oppure lamentati con il management che i tuoi amministratori di sistema sono incompetenti e devono essere licenziati. Ignorare il tuo amministratore di sistema non ha senso.

Considera come distribuirai la tua applicazione. Comprendi che discuterne con i tuoi amministratori di sistema ha senso. Se si dispone di 100 server identici, che differiscono solo in base a un singolo file di configurazione, è possibile prendere in considerazione l'archiviazione delle copie principali di questi file di configurazione in una posizione centrale. Scopri quanto è meglio se tutti sono facili da ridistribuire nella tua applicazione. Se si verifica un problema con un sistema, preferiresti ridistribuire in meno di un minuto per un pezzo di ricambio, o aspettare per anni mentre quello rotto viene riparato? Se è possibile ridistribuire l'applicazione, è possibile aggiornare il sistema operativo in modo più semplice e sicuro. Potresti interessartene in futuro.

Se hai un problema che ritieni possa essere dovuto al sistema operativo, ha senso chiamare immediatamente l'amministratore di sistema per verificarlo. Ma dopo che un'indagine sommaria non rivela nulla, hai il dovere di spiegare il problema.

Comprendi che esiste una differenza tra "rispondere lentamente" e "non rispondere affatto".


3

Configura e disponi le cose in modo prevedibile con modi prevedibili di modificarli per il sistema operativo (en) per cui stai sviluppando. Questo significa tutto. Ad esempio: OpenLDAP ha un modo strano di fare i livelli di Google; alcuni server IMAP non hanno nemmeno file di configurazione ma devono avere opzioni compilate; alcuni pacchetti vogliono che le loro cose si trovino in un particolare percorso di directory, che inevitabilmente infrangerà le convenzioni di un particolare sistema operativo. Tutte queste cose si distinguono come verruche sui miei soliti config.

È una regola generale, ma non dare per scontato che tu sia speciale, e quindi benedetto per infrangere le convenzioni generali su come i pacchetti software generalmente funzionano sulla tua piattaforma, a meno che non ci sia una ragione abbondantemente inerente al tuo software che lo richiede. "Sento fortemente che dovrebbe essere così" non è abbastanza buono per interrompere la normale configurazione di tutti; deve essere un motivo collegato alla funzione che il software sta tentando di eseguire.


3

In caso di comunicazioni tra server coinvolte con l'app, includere almeno un amministratore di sistema in fase di progettazione. Inoltre, documenta chiaramente le dipendenze da altri servizi: SQL, SMTP, HTTP, ecc ... Non farci indovinare cosa stai facendo o non possiamo aiutarti quando qualcosa non funziona come previsto.


3

Rendi possibile distribuire il tuo software su dozzine o centinaia di sistemi in modo automatizzato. Se un'organizzazione necessita di un pacchetto software, gli amministratori di sistema quasi certamente non hanno il tempo di installarlo manualmente su ogni box. Se un file deve contenere informazioni sulla licenza, documentare come fornirlo sarebbe un grande vantaggio.

Adobe ha storicamente avuto alcuni programmi di installazione che erano una vera seccatura con cui lavorare ; per favore, mira più in alto!


2

Pensa al ridimensionamento dal primo giorno. Gli amministratori di sistema possono fare miracoli lanciando denaro / hardware a un problema di prestazioni, ma a volte nessuna quantità di questi aiuterà - in particolare a pensare al blocco - a volte non puoi comprarti da un problema di blocco. Grazie per avermelo chiesto :)

Oh, e cerca di essere a 64 bit, ove possibile, e anche multi-thread :)



2

Oltre tutto il resto qui ...

  • Richiedere un ambiente di produzione simulato (un server di sviluppo o una VM con la stessa configurazione del server live) e quindi utilizzarlo per testare il processo di rilascio. Quindi forniscici questo processo di rilascio, incluso un elenco di modifiche e l'ordine in cui dovrebbero essere applicate (ad es. 1. Accedere alla modalità di manutenzione, 2. applicare l'aggiornamento SQL, 3. aggiornare l'origine alla versione X, 4. uscire dalla modalità di manutenzione, 5. prega)
  • Assicurati di disporre di una modalità di manutenzione in grado di eliminare gli utenti per conservare l'integrità dei dati. Non vuoi che eseguiamo un grande aggiornamento di sistema su più server con utenti che hanno effettuato l'accesso ed eseguono transazioni ... nella maggior parte dei casi è una ricetta per fallire.
  • Utilizzare un modello di sviluppo leggermente standardizzato. Ad esempio, tutte le nostre nuove applicazioni sul lavoro (gruppo Web) utilizzano Zend Framework.
  • Forniscici i log delle modifiche che possiamo leggere, incluso un elenco di bug corretti che possiamo cercare per avere un'idea dell'entità delle modifiche. A volte possiamo identificare potenziali problemi solo perché abbiamo un diverso punto di vista.

2

Sebbene irrealistico, sarebbe utile se gli sviluppatori fossero costretti a lavorare in un ruolo di amministratore di sistema o dba prima di essere liberati nel mondo.

Così tante applicazioni specializzate con cui ho a che fare non hanno idea dell'installazione in un ambiente gestito o commettono atrocità nella progettazione di database.


Pienamente d'accordo. Sono uno sviluppatore, ma ho lavorato come amministratore per alcuni mesi e l'ho trovato un'esperienza estremamente preziosa. Allarga davvero il tuo orizzonte.
sleske,

1

1) Il file di registro che registra gli errori in dettaglio. o un buon sistema di tracciamento degli errori come ELMAH.

2) La documentazione dettagliata per l'installazione, l'implementazione e la guida SA.

3) Inoltre le cose sopra menzionate da altre fantastiche SA. :)

Questo è tutto ciò che mi viene in mente in questo momento.


1

Il libro Release It! ha una buona selezione di storie dell'orrore su cosa può andare storto nella produzione. Leggerlo può fornire ispirazione / idee per la progettazione tenendo presente le operazioni. (È scritto da Michael Nygard, che ha lavorato sia dal punto di vista dello sviluppo che operativo.)


1
  • Non sviluppare senza specifiche
  • Documento (o assicurarsi che coloro che lo documentano lo facciano in modo accurato)
  • Non abbiate paura di supportare il cliente (come livello di supporto di livello superiore)

1

Nella mia esperienza, la cosa che farebbe la differenza se gli sviluppatori pensassero alla distribuzione dal primo giorno. Non appena inizierai a concepire una nuova funzionalità nell'ambiente di produzione / cliente, inizia a pensare a come verrà distribuita in quella ambiente e come verrà eseguito.

Una volta che entrano nel processo di sviluppo, non è troppo tardi, ma può volerci del tempo prima che siano in grado di spostare la loro prospettiva così lontano; non si rendono conto di quanto astrattamente stiano visualizzando la base di codice fino a quando non sono costretti a confrontarla. Nella loro mente, è solo un "componente". Di particolare interesse è il modo in cui verrà distribuito in un ambiente preesistente , eseguendo la versione precedente (o precedente!) Del software. Le discussioni sulla distribuzione possono avere un impatto significativo su come l'architettura viene adattata per adattarsi alla nuova funzionalità.


Sono d'accordo con il tuo commento. come ingegnere addetto alla distribuzione mi occupo di incredibili complicazioni durante l'implementazione che potrebbero essere semplificate se l'ingegnere avesse solo il mio punto di vista.
Djangofan,

0

Qualcosa che mi piace che non ho ancora visto è configurabile. Se hai un'app che utilizza qualsiasi tipo di file di configurazione, rendi tutto configurabile.
Nella mia azienda, ho scritto una semplice app che esporterà un pezzo di database. La settimana successiva l'ho riscritto per consentire la disattivazione di una piccola parte. Ogni settimana da allora ho dovuto riscrivere le parti e ricostruirle solo per cambiare una piccola funzione. Ho appena aggiunto un file di configurazione XML, e ora è molto più facile ridistribuire.
Adoro i file di configurazione.


0

Vorrei che gli sviluppatori avrebbero una migliore separazione dalle attività di controllo qualità. Penso che sia bello quando uno sviluppatore è in grado di creare alcuni casi di unit test per un progetto a cui sta lavorando, ma sarebbe bello se quei test fossero passati al QA. In effetti, è bello quando gli sviluppatori danno un piccolo aiuto agli ingegneri del QA perché alla fine avvantaggia DEV.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.