Quando ho lavorato con aziende che erano molto ad hoc nella metodologia, abbiamo esaminato i due o tre principali problemi di processo o infrastruttura che contavano "in questo momento" e abbiamo iniziato a investire in essi insieme ai normali impegni.
Non penso che la tradizionale "ingegneria del software" sia necessariamente il modello giusto per un piccolo team che si occupa di esigenze aziendali che cambiano frequentemente; l'ingegneria del software è più importante per gestire più fornitori e situazioni in cui il cambiamento è molto costoso e richiede cancelli di rischio e qualità. Se stai costruendo software per parti o automobili dello space shuttle, l'approccio dell'ingegneria del software potrebbe avere senso.
Invece, sostengo un approccio di "artigianalità del software" per la maggior parte delle organizzazioni. Ma l'ingegneria del software ha creato strumenti e ha scoperto processi che funzionano per molti tipi di team, quindi non sto dicendo che dovresti ignorare quelle lezioni, solo che dovresti lavorare da una prospettiva diversa che riguarda il miglioramento continuo, affrontare l'ambiguità e il cambiamento e impiega un paio di ore al mese per fare retrospettive su ciò che funziona bene e cosa non funziona bene con i tuoi processi di sviluppo e di business.
Nei tuoi panni, direi che probabilmente non ti preoccuperai di UML per ora; è necessario concentrarsi su come ottenere un sistema di controllo delle versioni leggero. Inizia con Git o Mercurial e iscriviti a repository privati con un fornitore di terze parti per inviare i repository a (Bitbucket, Github) o configurare un server locale su cui eseguire il push.
Quindi preoccupati di configurare un sistema di generazione continua (come Jenkins).
I team di piccole dimensioni potrebbero non essere in grado di permettersi i tester a tempo pieno, ma possono iniziare a creare una copertura di test unitaria automatizzata; anche l'avvio di questa pratica senza aderire religiosamente a un particolare dogma metodologico può aiutarti a scrivere nuovo codice in uno stato più gestibile, perché ti irriterai abbastanza per qualsiasi prova di scrittura che vorresti correggere il codice o dare test. Se hai le altre cose a posto e inizi a ottenere il minimo valore dai test, probabilmente preferirai correggere il tuo codice piuttosto che abbandonare i test.
Puoi farlo da solo investendo del tempo in esso. Può valere la pena assumere una persona per lavorare sui problemi dell'infrastruttura o del processo, ma i tre elementi sopra riportati sono in genere a bassa portata di frutta che mostreranno rendimenti immediati e richiedono investimenti relativamente minimi.
Per quanto riguarda i libri, leggi Pragmatic Programmer, Software Craftsmanship: The New Imperative e tutti i libri disponibili sul controllo della versione distribuita e sull'integrazione continua. Dovresti valutare Extreme Programming, Scrum e Kanban per vedere cosa pensi che funzioni meglio per la tua squadra. Per migliorare al processo, partecipare a riunioni o eventi locali con altri piccoli negozi di software e parlare di ciò che funziona e non funziona per te, e ottenere idee migliori dai tuoi colleghi su come far fronte ad alta velocità con piccoli team. L'ingegneria del software non si basa sul mantenimento della velocità, ma sul mantenimento del controllo delle cose che interagiscono con il tuo prodotto.
Una volta che hai un team di 5 persone, tuttavia, una sorta di guida per la gestione dei processi ha un senso finanziario per la maggior parte delle organizzazioni. Assumere un program manager o ScrumMaster o qualcosa del genere avrà qualche valore per i tuoi fondatori se ti aiuterà a fornire un lavoro più coerente e prevedibile.