Il processo di migrazione: passaggio da RequireJS a Webpack
La necessità di passare da RequireJS a Webpack era chiara, ma la portata dell'impresa significava che si aspettavano che il processo richiedesse almeno un anno e richiedesse molta complessità e larghezza di banda ingegneristica da raggiungere. Il pensiero all'epoca era che avremmo dovuto esaminare sistematicamente la base di codice sezione per sezione e migrare manualmente tutto, il che sarebbe stato davvero oneroso.
La mia svolta, se così si può chiamare, è stata capire che potevo scrivere codice in grado di modificare in blocco il codice della dashboard di Braze attraverso un processo automatizzato e anche annullare la modifica del nostro codice, se avessimo bisogno di annullare queste modifiche velocemente. Ho finito per fare un proof of concept dopo il mio progetto hack day, solo per dimostrare che poteva funzionare, e poi ho continuato a lavorarci nel mio tempo libero come una sorta di progetto di passione.
Detto questo, le cose non sono davvero decollate fino a quando Greg Beaver, che è un Senior Software Engineer nel team di Braze Dashboard, non è stato coinvolto. È stato in grado di prendere gli script che avevo scritto come parte del mio proof of concept e incorporarli in uno strumento che potevamo condividere con altri ingegneri. Ciò, a sua volta, significava che avremmo potuto migrare da RequireJS a Webpack senza costringere tutti gli ingegneri che lavoravano al codice relativo al dashboard a fermarsi mentre lo facevamo; invece, sono stati in grado di utilizzare lo strumento per sincronizzare automaticamente qualsiasi codice su cui stavano lavorando con le modifiche complessive.
Lo strumento ha finito per essere così veloce (l'esecuzione richiede solo due minuti circa) e ha funzionato così bene che mentre stavamo preparando le migrazioni, in realtà abbiamo avuto un ingegnere che lo sfruttava come soluzione alternativa per le build lente associate a RequireJS. Hanno appena convertito il loro ramo in Webpack, hanno apportato le modifiche necessarie e quindi lo hanno riconvertito in modo da poterlo eseguire nel vecchio codice.
Con questa nuova funzionalità a nostra disposizione, il nostro piano di migrazione prevedeva di eseguire lo strumento di Greg sul nostro ramo principale ogni notte per alcune settimane e convincere le persone a rivedere manualmente nell'ambiente di QA da quel ramo, solo per vedere se qualcosa non funzionava. Una volta che siamo stati certi che tutto fosse a posto, abbiamo informato il resto dell'organizzazione sull'aggiornamento pianificato, li abbiamo guidati attraverso come potevano migrare il loro codice da RequireJS a Webpack e li abbiamo informati su alcune considerazioni chiave prima che ottenessero in corso.
Grazie al nostro approccio, un progetto che avrebbe dovuto durare più di un anno è finito per essere concluso in sole tre settimane, il che è piuttosto incredibile. Ancora più inaspettato è stato l'impatto della migrazione: in particolare, il processo di compilazione su Webpack ora richiede generalmente solo circa un secondo, riducendo il tempo necessario per ogni controllo del codice di oltre il 99%.