{"id":229,"date":"2012-02-03T10:47:54","date_gmt":"2012-02-03T09:47:54","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/la-creazione-di-twitter-bootstrap\/"},"modified":"2012-02-03T10:47:54","modified_gmt":"2012-02-03T09:47:54","slug":"la-creazione-di-twitter-bootstrap","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/la-creazione-di-twitter-bootstrap\/","title":{"rendered":"La creazione di Twitter Bootstrap"},"content":{"rendered":"<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/02\/n43a2web.png\" border=\"0\" width=\"235\" height=\"176\" align=\"left\" \/>Un anno e mezzo fa, un piccolo gruppo di impiegati di Twitter decise di migliorare i tool amministrativi e analitici in uso nel nostro team interno. Dopo le prime riunioni attorno a questo argomento, avevamo un&#8217;ambizione pi\u00f9 grande: creare un toolkit per chiunque lo voglia usare internamente a Twitter e oltre. Cos\u00ec, ci siamo messi a realizzare un sistema che potrebbe costituire una base per le persone come noi che vogliono creare nuovi progetti. Cos\u00ec concepimmo Bootstrap.<\/p>\n<p>Realizzato da <a href=\"http:\/\/twitter.com\/mdo\" target=\"_blank\" rel=\"noopener noreferrer\">me<\/a> e da <a href=\"http:\/\/twitter.com\/fat\" target=\"_blank\" rel=\"noopener noreferrer\">Jacob Thornton<\/a>, <a href=\"http:\/\/twitter.github.com\/bootstrap\/\" target=\"_blank\" rel=\"noopener noreferrer\">Bootstrap<\/a> \u00e8 un toolkit front-end open-source per aiutare i designer e gli sviluppatori a creare rapidamente ed in maniera efficace online. Il nostro obiettivo \u00e8 di fornire una libreria raffinata, ben documentata ed estesa di componenti di design flessibili, realizzati in HTML, CSS e JavaScript, cos\u00ec che altri possano usarli come base ed innovare. Ad oggi \u00e8 cresciuto fino ad includere dozzine di componenti ed \u00e8 diventato il progetto pi\u00f9 popolare su GitHub, con pi\u00f9 di 13000 watchers e 2000 forks.<\/p>\n<p>Sveleremo ora come e perch\u00e9 abbiamo creato Bootstrap, i processi che abbiamo utilizzato durante la sua realizzazione ed in che modo \u00e8 diventato un design system.<\/p>\n<div class=\"paragrafo\">\n<h2>Riconoscere un&#8217;opportunit\u00e0<\/h2>\n<p>Ad alcuni dei primi tool che utilizzavamo internamente a Twitter mancava un design raffinato e accessibile e ci risultava difficile sviluppare o iterare rapidamente. Alcune persone di diversi team ammisero il problema e videro un&#8217;incredibile opportunit\u00e0 per questo e per i progetti futuri. Riconoscendo ci\u00f2, abbiamo cominciato a formare un processo grossolano collaborando fin da subito con Design ed Engineering.<\/p>\n<p>Ad alto livello, il nostro processo cominciava ad assomigliare a questo:<\/p>\n<ol>\n<li>Alcuni tool developer interni hanno lavorato con i product manager e con i potenziali utenti di ciascun tool per identificare le funzionalit\u00e0 e le caratteristiche principali<\/li>\n<li>Io ho lavorato con gli sviluppatori per identificare le nostre necessit\u00e0 per poi progettarle nel browser, al fine di creare un linguaggio visuale consistente ed esplorare le interazioni. Dopo la prima implementazione, discutevamo di ciascun componente e soppesavamo attentamente ciascuna opzione ed implementazione prima di proseguire.<\/li>\n<li>Dopodich\u00e9, abbiamo progettato e programmato i componenti isolati per il progetto dei nuovi tool interni che avremmo dovuto creare originariamente. Durante questo periodo, abbiamo implementato rapidamente, testato ed iterato ciascuna nuova feature.<\/li>\n<li>Infine, come follow-up, ho preso quegli stessi componenti dal progetto dei tool interni e li ho aggiunti ad una codebase condivisa (Bootstrap) per astrarli e documentarli per altri progetti.<\/li>\n<\/ol>\n<p>Fondamentalmente, tutto ci\u00f2 si riduce ad un concetto principale: <strong>far lavorare i designer con gli sviluppatori<\/strong>. L&#8217;interazione costante con gli sviluppatori \u00e8 quello che ha fatto brillare Bootstrap e che continua a guidare il suo sviluppo ad oltre un anno dalla sua nascita. Dalle idee abbozzate su una lavagna bianca alla programmazione di prototipi grossolani, la collaborazione tra le diverse discipline \u00e8 quello che ha fatto avere successo a Bootstrap per l&#8217;uso interno a Twitter. Questo processo ha permeato lo sviluppo praticamente per tutte le feature di Bootstrap e ha funzionato incredibilmente bene nel tempo.<\/p>\n<p>Realizzare Bootstrap in questo modo vuol dire che la comunicazione ha avuto un ruolo cruciale e la maggior parte del lavoro di design \u00e8 avvenuta nel codice. Dal momento che il deliverable finale di Bootstrap \u00e8 sempre codice, aveva molto pi\u00f9 senso lavorarci quanto pi\u00f9 possibile per comunicare nel nostre idee. Questo ci ha messo nelle condizioni di ragionare come farebbe un buon sviluppatore, incoraggiando componenti succinti, ma con la pulizia nei componenti visuali e con l&#8217;accuratezza che uno si aspetterebbe da un bravo designer.<\/p>\n<h3>Un esempio<\/h3>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/02\/twitter-bootstrap-hover-dropdowns.gif\" border=\"0\" alt=\"Fig. 1\" \/><\/p>\n<p>Fig. 1: I menu dropdown nella prima release di Bootstrap venivano attivati all&#8217;hover.<\/p>\n<\/div>\n<p>Diamo uno sguardo ad una feature di Bootstrap: i dropdown menu. Per aiutare ad ospitare le informazioni riguardanti la sessione corrente e far risaltare altre aree del tool, avevamo bisogno dei dropdown. Tutti hanno i menu dropdown nelle proprie applicazioni, ciascuno con un&#8217;implementazione, delle interazioni e un visual design differente, quindi, come possiamo farli? Seguendo lo schema di cui sopra, ecco come \u00e8 stata realizzata questa feature in Bootstrap:<\/p>\n<ol>\n<li>Ci siamo accorti di avere troppi link di navigazione e troppe azioni nella topbar fissa che stavamo usando. I menu dropdown estesi e multi-livello ci sono sembrati la soluzione giusta.<\/li>\n<li>Abbiamo lavorato insieme per identificare i motivi per cui cos\u00ec tanti link e tante azioni avessero bisogno di apparire come primo elemento e perch\u00e9 avremmo bisogno di un supporto multi-livello.<\/li>\n<li>Dopo un po&#8217; di dibattito, abbiamo deciso di riarrangiare la topbar rimuovendo alcuni link ed implementando i dropdown, ma senza il supporto multi-livello. In quel momento, avrebbe comportato la scrittura di codice extra che avrebbe complicato la nostra implementazione e abbiamo preferito evitare questa cosa.<\/li>\n<li>Poi abbiamo scritto l&#8217;HTML ed il CSS di base per i dropdown a fronte di un <code>:hover<\/code>. Abbiamo sistemato i dettagli visivi all&#8217;interno della codebase del tool e quindi li abbiamo astratti e documentati per Bootstrap.<\/li>\n<li>Come ultimo step durante l&#8217;astrazione per Bootstrap, abbiamo scelto l&#8217;opzione di attivare il comportamento con un click piuttosto che al passaggio sopra di esso. Ritenevamo che questo avrebbe risparmiato agli utenti un po&#8217; di confusione e dei click accidentali, garantendo cos\u00ec un&#8217;esperienza migliore.<\/li>\n<\/ol>\n<p>La maggior parte dei componenti e molti dei dettagli pi\u00f9 sottili che gli ruotano attorno sono stati progettati e realizzati mettendo insieme designer e sviluppatori. Insieme, il nostro processo per tutte le nuove feature o per i singoli componenti di design \u00e8 maturato fino alla <strong>ideazione, dibattito e revisione delle feature, implementazione ed infine astrazione e documentazione<\/strong>. Ha fatto andare via liscio lo sviluppo dei nostri tool interni, ci ha permesso di evitare la crescita fuori controllo delle feature e l&#8217;aumento sproporzionato del codice. Inoltre, ci ha aiutato a documentare non solo come usare un componente, ma <em>perch\u00e9<\/em> si dovrebbe usare quel <em>particolare<\/em> componente in Bootstrap.<\/p>\n<p>Questo si estende naturalmente oltre le nuove feature ed in quelle esistenti. Se una feature che abbiamo gi\u00e0 ha bisogno di essere modificata o rimossa, seguiamo gli stessi step: ideazione, revisione, implementazione e documentazione. Per portare avanti l&#8217;esempio, abbiamo ricevuto moltissimo feedback sui dropdown e potremmo rivedere il supporto multi-livello. Dal momento che le applicazioni web si comportano sempre pi\u00f9 come le proprie controparti desktop, che usano i dropdown multi-livello, ha senso che noi si consideri di supportarle. Ovviamente, potremmo semplicemente tirarci indietro dalle nostre decisioni iniziali, ma questo processo ci rende onesti, importanti e responsabili verso i nostri utenti ed i loro bisogni.<\/p>\n<h3>Sviluppo parallelo<\/h3>\n<p>Il nostro processo ci ha aiutato a superare quasi tutto il nostro sviluppo delle feature e ha messo in luce un importante aspetto della nostra decisione dell&#8217;andare oltre il semplice sviluppo di un tool. Lo sviluppo parallello ha significato che <strong>abbiamo comunicato in maniera efficace  a chi non rea toccato dai processi o dalle informazioni interne il nostro lavoro<\/strong>.<\/p>\n<p>Mentre eravamo impegnati a lavorare alla creazione di una roadmap per il prodotto e a determinare gli obiettivi di un singolo progetto, abbiamo considerato attivamente come gli altri avrebbero usato gli stessi componenti. Astrarre e documentare i componenti \u00e8 diventato parte del nostro processo per creare questo tool e Bootstrap in tandem. Ma soprattutto, abbiamo risparmiato tempo e sforzo, abbiamo discusso pi\u00f9 chiaramente sul valore di aggiungere (o a volte rimuovere) una o pi\u00f9 caratteristiche e siamo adesso pronti ad affrontare futuri progetti pi\u00f9 grandi.<\/p>\n<p>Dopo le prime settimane di sviluppo, abbiamo cominciato a chiamare questo documento vivente come \u201ctoolkit in forma di guida di stile\u201d. Questo ci ha fatto raggiungere l&#8217;obiettivo di comunicare il nostro lavoro attraverso Bootstrap, che a sua volta a permesso a Bootstrap di crescere rapidamente e di diventare utilizzabile da chiunque.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Bootstrap come guida di stile<\/h2>\n<p>La decisione di creare Bootstrap come una guida di stile \u00e8 scaturita naturalmente da uno dei nostri processi di design e sviluppo. Bootstrap ci aiuta a documentare i componenti con degli esempi \u201clive\u201d man mano che li creiamo, mentre hanno la funzione di un documento vivo che si alimenta da solo, con i componenti ed i template che prescrive. Ci ha dato un <strong>singolo punto di riferimento<\/strong> per condividere i consigli da parte dei designer e ha creato della documentazione per ciascun componente attivo.<\/p>\n<p>Creare Bootstrap come una guida di stile ha influenzato il suo sviluppo fin dall&#8217;inizio. Ci ha permesso di rimanere fedeli alle feature che volevamo implementare aiutandoci a guardare pi\u00f9 in l\u00e0 che al singolo progetto. Non volevamo limitarci a realizzare un singolo progetto: avevamo ambizioni pi\u00f9 grandi e non volevamo privarne noi stessi o coloro i quali avrebbe tratto dei benefici da un simile tool. Il nostro approccio ha reso possibile la realizzazione di tool non solo per Twitter, ma per tutti i designer e gli sviluppatori.<\/p>\n<h3>Soddisfare tutti i livelli di capacit\u00e0<\/h3>\n<p>L&#8217;approccio da &#8220;documento vivente&#8221; ci ha dato la possibilit\u00e0 non solo di condividere l&#8217;intero toolkit, ma anche di fornire documentazione scritta ed interattiva per chiunque volesse usare Bootstrap. Questo approccio ha soddisfatto tutti indipendentemente dal livello di competenza, permettendo a chiunque di clonare o scaricare un repo per il codice sorgente o di usare Inspector o &#8220;visualizza sorgente&#8221; nel browser.<\/p>\n<p>Con l&#8217;avanzare dello sviluppo, questo \u00e8 diventato uno dei principi guida del nostro lavoro, inserito nel nostro credo: \u201cAiutare persone fantastiche a creare cose fantastiche\u201d. Questo si \u00e8 incastrato a coda di rondine con il nostro obiettivo di articolare chiaramente le decisioni di design e di sviluppo per coloro i quali non avevano le informazioni interne al processo o al prodotto originali. Non importa il livello di capacit\u00e0 o il workflow, avevamo bisogno che le persone fossero in grado di aprire questo documento vivente e di utilizzare Bootstrap per creare in maniera rapida e semplice qualcosa che amassero.<\/p>\n<h3>Evolversi attraverso la collaborazione<\/h3>\n<p>All&#8217;inizio, Bootstrap includeva solo la tipografia, le tabelle, le form, una guida al colore ed alcuni asset grafici. Era una guida alla best practice della presentazione, a come usare alcune regole di design usate in tutta l&#8217;azienda. A quell&#8217;epoca, avevamo solo bisogno di un reset CSS pi\u00f9 personalizzato e delle risorse aziendali per aggiungere un minimo di eleganza allo sviluppo.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/02\/twitter-bootstrap-colors.gif\" border=\"0\" alt=\"Fig. 2\" \/><\/p>\n<p>Fig 2: Una delle primissime feature di uno dei nostri toolkit \u00e8 stata una guida al colore.<\/p>\n<\/div>\n<p>Con il coinvolgimento di sempre pi\u00f9 persone e sempre pi\u00f9 applicazioni possibili, aumentava la richiesta di feature. Alla fine, abbiamo creato molte pi\u00f9 componenti, inclusa una topbar fissa, la navigazione a tab, i dropdown menu, le form estese e altro ancora. Per tutto il processo, la collaborazione tra designer e sviluppatori \u00e8 stata evidente in ogni nuovo componente che abbiamo aggiunto. La collaborazione ha reso possibili molte conversazioni gratificanti ed esaltanti e molte feature.<\/p>\n<div class=\"illustration full left\"><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2012\/02\/twitter-bootstrap-v1.gif\" border=\"0\" alt=\"Fig. 3\" \/><\/p>\n<p>Fig 3: La nostra release iniziale si concentrava sul supporto dei browser pi\u00f9 recenti ed includeva meno componenti.<\/p>\n<\/div>\n<p>Al momento, Bootstrap include dozzine di componenti e molti altri sono gi\u00e0 stati pianificati, che vengono per\u00f2 realizzati solo se i loro requisiti e la loro funzionalit\u00e0 sono gi\u00e0 stati chiaramente individuati usando il processo che abbiamo stabilito in precedenza. Jacob ed io iteriamo sul toolkit gestendo le richieste di feature e tenendo traccia dei problemi e dei vari bug. Lavoriamo insieme alla valutazione di ciascun nuovo item per capirne l&#8217;utilit\u00e0 nella community. Implementiamo una nuova feature solo se non confonde gli utenti o se non gonfia il framework inutilmente. Aver impostato un processo che permette alle persone di valutare imparzialmente le nuove feature \u00e8 incredibilmente potente e assolutamente necessario ai fini del progetto. La nostra collaborazione si \u00e8 estesa ben oltre la portata di un singolo progetto e continua in tutti a partire da quel momento, specialmente in Bootstrap.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Riflessioni finali<\/h2>\n<p>Bootstrap \u00e8 stato usato in test pratici per la prima volta nel mondo reale durante la prima Hackweek di Twitter. Durante quella settimana, ho aiutato alcune persone ad usare Bootstrap nei loro progetti per velocizzare lo sviluppo, ma non avevo idea di quanto efficace o diffuso sarebbe diventato il toolkit. Quando tutti i team si sono presentati davanti all&#8217;azienda per illustrare le loro idee, dozzine di loro stavano usando Bootstrap. Avevano usato Bootstrap per creare dei progetti che sembravano tutti come una famiglia di idee, con un design e un&#8217;implementazione consistenti. Un toolkit semplice, ben progettato e documentato ha fatto risparmiare moltissime ore con pochissimo o addirittura nessun aiuto da un designer scrupoloso.<\/p>\n<p>In altre parole, <strong>ha funzionato!<\/strong><\/p>\n<p>Con il progetto ora <a href=\"http:\/\/twitter.github.com\/bootstrap\/\">disponibile a tutti e open source su GitHub<\/a>, il nostro successo continua ed aiutiamo i nerd di tutto il mondo ad accelerare il loro sviluppo web. Il nostro processo di sviluppo per Bootstrap rimane identico, ma si \u00e8 evoluto per sfruttare il ciclo costante di feedback GitHub attraverso il tracciamento di problemi e il wiki feature, per comunicare meglio con quelli che usano il toolkit. Perci\u00f2, abbiamo pubblicato un certo numero di release e ne abbiamo pianificate altre. La nostra prossima grande release sar\u00e0 la v2, uno sforzo maggiore, che include un responsive grid system, estende i plugin JavaScript, risolve un&#8217;infinit\u00e0 di bug e migliora la documentazione.<\/p>\n<p>Senza lo sviluppo parallelo e la collaborazione tra i vari team, Bootstrap non esisterebbe e avremmo creato un altro esemplare unico di tool. Internamente, i progetti come Bootstrap hanno cominciato a cambiare il modo in cui cooperiamo. Le domande tra i team hanno cominciato a cambiare da \u201cfallo apparire pi\u00f9 bello\u201d o \u201cprogramma questo\u201d in \u201ccome posso risolvere questo problema?\u201d e Bootstrap si nutre di questo. Il processo collaborativo ci ha aiutato a lavorare pi\u00f9 efficientemente e a creare molta fiducia gli uni negli altri.<\/p>\n<p>Grazie alla visione e alla concentrazione di un piccolo gruppo di designer e sviluppatori, siamo stati in grado di far evolvere il nostro processo di sviluppo, creare un esteso toolkit per il front-end ed aiutare migliaia di altre persone ha fare bootstrap sui progetti che hanno a cuore.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Bootstrap \u00e8 un tool open-source per il front-end ideato per aiutare i designer e gli sviluppatori a realizzare rapidamente ed in maniera efficace i loro progetti su internet. Il suo obiettivo \u00e8 quello di fornire una libreria elegante, ben documentata ed estesa di componenti di design flessibili creati con HTML, CSS e JavaScript, in modo che altre persone possano creare cose su questa base e continuare ad innovare. Ad oggi, \u00e8 cresciuto fino ad includere dozzine di componenti ed \u00e8 diventato il progetto pi\u00f9 popolare su GitHub, con pi\u00f9 di 13.000 watchers e 2000 fork. Mark Otto, il co-creatore di Bootstrap, ci mostra come e perch\u00e9 Bootstrap \u00e8 stato creato, i processi che sono stati usati per realizzarlo e come \u00e8 cresciuto come sistema di design.<\/p>\n","protected":false},"author":818,"featured_media":7000641,"comment_status":"open","ping_status":"open","template":"","categories":[244,247,271,58,278],"tags":[],"coauthors":[350],"class_list":["post-229","article","type-article","status-publish","has-post-thumbnail","hentry","category-css","category-html","category-javascript","category-numero-43-3-febbraio-2012","category-workflow-tools"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/229","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article"}],"about":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/types\/article"}],"author":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/users\/818"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=229"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000641"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=229"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=229"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=229"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=229"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}