{"id":491,"date":"2014-09-30T21:30:40","date_gmt":"2014-09-30T19:30:40","guid":{"rendered":"https:\/\/alistapart.com\/it\/article\/giorno-della-dipendenza-poteri-e-pericoli-delle-soluzioni-esterne\/"},"modified":"2014-09-30T21:30:40","modified_gmt":"2014-09-30T19:30:40","slug":"giorno-della-dipendenza-poteri-e-pericoli-delle-soluzioni-esterne","status":"publish","type":"article","link":"https:\/\/alistapart.com\/it\/article\/giorno-della-dipendenza-poteri-e-pericoli-delle-soluzioni-esterne\/","title":{"rendered":"il giorno della dipendenza: poteri e pericoli delle soluzioni esterne"},"content":{"rendered":"<p><img decoding=\"async\" src=\"http:\/\/alistapart.com\/it\/wp-content\/uploads\/sites\/2\/2014\/09\/sketch3022277.jpg\" border=\"0\" align=\"left\" \/>&#8220;Non possiamo semplicemente usare questo plugin?&#8221;. Negli esaltanti giorni degli anni 2000 in cui i CMS open source cominciavano a diventare molto popolari si sentiva spesso questa domanda, posta in maniera ottimistica, pieni di speranze riguardanti tutte quelle soluzioni che distavano da noi solo per un download. Nel corso degli anni abbiamo visto svilupparsi delle librerie sicure e delle community potenti, ma \u00e8 anche vero che continuano ad aumentare i cimiteri di codice abbandonato e servizi dimenticati. Molte di quelle soluzioni erano semplici da installare ma difficili da debuggare. Ad alcuni fornitori interessavano solo le vendite, non il supporto clienti.<\/p>\n<p>Anni dopo ci poniamo ancora la stessa domanda, ma siamo meno ottimisti e sempre pi\u00f9 dipendenti, e io ho paura quando mi trovo ad avere a che fare con chiunque che sia cos\u00ec intelligente da creare qualcosa che io non sono in grado di fare. La vera sfida per le piccole aziende che oggi si occupano di sviluppo \u00e8 sapere come controllare le relazioni fra le parti che offrono soluzioni esterne e quando evitare di ricorrervi. Vi mostrer\u00f2 il mio approccio, che consiste nel porsi un certo numero di domande.<\/p>\n<div class=\"paragrafo\">\n<h2>Un web di soluzioni esterne<\/h2>\n<p>Vorrei cominciare con una definizione piuttosto generica su cosa significhi essere una &#8220;soluzione esterna&#8221;: se \u00e8 una persona e non le d\u00f2 un compenso per il suo intero lavoro, si tratta di una soluzione esterna. Se \u00e8 un&#8217;azienda o un servizio che non controllo, si tratta di una soluzione esterna. Se \u00e8 codice e il mio team non \u00e8 in grado di capirne tutte le righe, si tratta di una soluzione esterna.<\/p>\n<p>Il panorama delle soluzioni esterne \u00e8 in rapida espansione. Github \u00e8 cresciuto fino a raggiungere quasi i <a href=\"https:\/\/github.com\/about\/press\">7 milioni di utenti<\/a> e il repo di plugin di WordPress si sta avvicinando a <a href=\"https:\/\/wordpress.org\/plugins\/\">1 miliardo di download<\/a>. Molte di queste soluzioni possono essere implementate semplicemente da clienti e competitor. Nel frattempo, io sono ancora nel mio laboratorio a debuggare il mio codice creato su misura. L&#8217;idea di vendere lavoro originale sembra stranamente fuori moda.<\/p>\n<p>Tuttavia, con cos\u00ec tante opzioni di terzi tra cui scegliere, ci sono pi\u00f9 occasioni del solito di deviare dalla rotta prestabilita.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Cosa potrebbe andar storto?<\/h2>\n<p>Un paio di anni fa, durante una riunione, portai degli argomenti contro la decisione di utilizzare un servizio esterno per gestire la widget di ricerca di un progetto per un cliente. &#8220;Dovremmo fare noi stessi le cose&#8221;, dissi. Non molto tempo dopo, sempre per quello stesso progetto, portai argomenti a favore dell&#8217;uso di una soluzione esterna per aggregare i feed RSS in un singolo documento. &#8220;Perch\u00e9 fare noi tutto questo lavoro&#8221;, dissi, &#8220;quando il problema \u00e8 gi\u00e0 stato risolto?&#8221;. La mia incoerenza era lampante. Essere dogmatici rispetto al <em>non<\/em> usare una soluzione esterna non \u00e8 meglio che buttarsi a capofitto su un&#8217;altra e io ero riuscito ad essere entrambe le cose in un colpo solo!<\/p>\n<p>Ma in quel caso, pensavo che valesse la pena di correre il rischio. Nell&#8217;altro pensavo non fosse il caso. Semplicemente non sapevo come comunicare questi pensieri al mio team.<\/p>\n<p>Avevo bisogno, nel gergo dei giorni nostri, di un <em>framework di decision-making<\/em>. Per tale scopo, mantengo un elenco di punti a cui far riferimento nei vari stage di coinvolgimento con le soluzioni esterne. Vi elencher\u00f2 queste idee usando come esempi la widget di ricerca e l&#8217;aggregatore di RSS.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>La differenze tra un requisito e un obiettivo<\/h2>\n<p>Questo punto spesso rivela false assunzioni riguardo a quello che vuole un cliente o uno stakeholder. Nel caso della widget di ricerca, cominciammo col fare delle indagini su un servizio che ci era stato specificatamente richiesto dal nostro cliente. Sembrava decisamente all&#8217;altezza del compito avendo la navigazione ajax, la ricerca &#8220;full text&#8221; e crwal automatizzati per indicizzare il contenuto. Ma quando chiedemmo ai nostri clienti che cosa <em>esattamente<\/em> stessero cercando di fare, fummo sorpresi: erano totalmente presi dalla funzionalit\u00e0 &#8220;typeahead&#8221;, mentre praticamente non percepivano il valore delle altre feature.<\/p>\n<p>Nel caso dell&#8217;aggregatore di RSS, avevamo gi\u00e0 uno strumento prodotto da noi che prendeva un array di URL di feed e girava ordinatamente tra questi, dando in uscita <em>x<\/em> post per feed in un formato su misura. Erano troppo buoni per la nostra amata widget multi-feed? In realt\u00e0, il cliente aveva una visione completamente differente e valida: volevano <em>x<\/em> risultati in totale da tutti i loro siti e li volevano ordinati per data di pubblicazione, non per sito. Cedetti.<\/p>\n<p>Potrebbe sembrare un primo passo ovvio, ma ho visto progetti partire nella direzione sbagliata perch\u00e9 non si conosceva l&#8217;obiettivo finale. A questo punto, per entrambe i nostri esempi, abbiamo chiaro lo scopo e siamo pronti a valutare delle soluzioni.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Sviluppare o scaricare?<\/h2>\n<p>Prima di decidere di usare una soluzione esterna, trovo di dover innanzitutto esaminare la mia organizzazione, spesso in quattro modi particolari: punti di forza, punti deboli, miglioramenti e mission.<\/p>\n<h3>Punti di forza e di debolezza<\/h3>\n<p>Il task della ricerca si allineava bene con i nostri punti di forza perch\u00e9 avevamo dei bravi front-end developer e avevamo le capacit\u00e0 per estendere il nostro CMS. Quindi, quando ci fu chiesto di fare la ricerca typeahead, eravamo sereni scommettendo su noi stessi. L&#8217;avevamo fatto prima? Non proprio, ma potevamo arrivarci.<\/p>\n<p>In quello stesso momento, l&#8217;infrastruttura di backend era un punto debole del nostro team. Avevamo avuto parecchi sysadmin e a volte sembrava che non fossimo in grado di assumere quel tipo di talento. Mentre pensavo a come avremmo potuto creare un aggregatore di feed per conto nostro, mi sembrava di toccare un nervo scoperto. Forse avremmo dovuto impostare un cron job per fare il poll degli URL desiderati, prendere i contenuti del feed e memorizzarli sui nostri server. Non \u00e8 roba da cervelloni, ma i cron task erno un particolare peso per noi.<\/p>\n<h3>Miglioramenti del team<\/h3>\n<p>Quando ci esponiamo per ottenere un obiettivo per un cliente, c&#8217;\u00e8 in ballo qualcosa di pi\u00f9 del semplice lavorare: \u00e8 un&#8217;opportunit\u00e0 per il nostro team di migliorarsi imparando nuove skill. Le migliori opportunit\u00e0 per ottenere ci\u00f2 sono quelle che presentano dei task impegnativi ma raggiungibili, che creano <a href=\"http:\/\/www.reddit.com\/r\/incremental_games\/comments\/1xiiyp\/mechanics_of_incremental_games_3_reward_frequency\/\">crescenti ricompense<\/a>. <a href=\"http:\/\/www.edutopia.org\/blog\/video-games-learning-student-engagement-judy-willis\">Alcuni ricercatori<\/a> citano questo effetto come un fattore della dipendenza da gioco. L&#8217;ho sentito io stesso quando stavo imparando cose nuove durante un progetto e quelli sono alcuni dei miei momenti lavorativi preferiti. I team li apprezzano e c&#8217;\u00e8 un costo organizzativo nel perdere un&#8217;opportunit\u00e0 di essere pagati per imparare. Il progetto della ricerca typeahead ci sembrava l&#8217;opportunit\u00e0 perfetta per migliorare le nostre capacit\u00e0.<\/p>\n<h3>Mission aziendale<\/h3>\n<p>Se un nuovo progetto \u00e8 in linea con la nostra mission, lo rivenderemo molte volte. Probabilmente, il nostro team di sviluppo in-house dovr\u00e0 fare alcune iterazioni su questo progetto per poterlo adattare ai nostri bisogni. E avremo davvero il budget per fare cos\u00ec se lo venderemo molte volte. Nessuno ci aveva mai chiesto un aggregatore di feed prima d&#8217;ora, quindi non ci sembrava ragionevole dedicare un budget per <abbr title=\"Research and Development\">R&amp;D<\/abbr> a questo. Di contro, molti altri clienti erano interessati a una ricerca sul sito pi\u00f9 potente, quindi ci sembrava tempo speso bene.<\/p>\n<p>A questo punto, ci siamo chiariti i nostri obiettivi finali e abbiamo visto in che modo questi progetti si allineano con il nostro team. Basandoci su questo, stiamo creando noi stessi la widget di ricerca e stiamo dando in outsourcing l&#8217;aggregatore di feed. Adesso osserviamo pi\u00f9 attentamente cosa succede di seguito in entrambe i casi.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Valutare l&#8217;ignoto<\/h2>\n<p>La cosa frustrante del lavorare con soluzioni esterne \u00e8 che le decisioni pi\u00f9 importanti devono essere prese quando si hanno meno informazioni, ma ci sono alcune cose che possiamo determinare prima di impegnarci. La familiarit\u00e0, la vitalit\u00e0, l&#8217;estensibilit\u00f2, il branding e i Service Level Agreements (SLA) sono tutti osservabili da lontano.<\/p>\n<h3>Familiarit\u00e0: c&#8217;\u00e8 un fornitore con cui abbiamo gi\u00e0 lavorato?<\/h3>\n<p>Sebbene andremo ad incrementare il numero di <em>dipendenze<\/em> da soluzioni esterne, cercheremo di evitare il numero crescente di <em>relazioni<\/em> con terzi.<\/p>\n<p>Lavorare con un venditore che conosciamo ha molti benefici potenziali: possono farci un prezzo di favore. Il markup e gli stili probabilmente saranno consistenti tra le varie soluzioni. E li conosciamo meglio di quanto non conosceremmo un nuovo servizio.<\/p>\n<h3>Vitalit\u00e0: questo servizio durer\u00e0?<\/h3>\n<p>La cosa peggiore che possiamo fare \u00e8 affidarci a un servizio solo per vederlo chiudere il mese successivo. Un servizio con una grande vitalit\u00e0 probabilmente (e con ogni diritto) vanter\u00e0 dei grossi clienti tra le sue fila. Se \u00e8 open source, ci sar\u00e0 una community appassionata di contributor. Oppure, potrebbe pubblicizzare una chiusura. Pi\u00f9 spesso, la verit\u00e0 si trova nel mezzo: osservate la frequenza con cui viene aggiornato il servizio, \u00e8 un buon punto di partenza per determinarne la vitalit\u00e0.<\/p>\n<h3>Estensibilit\u00e0: questo servizio si adatter\u00e0 al variare delle nostre esigenze?<\/h3>\n<p>Non dobbiamo solo valutarne i servizi principali, ma dobbiamo anche vedere quanto \u00e8 estensibile analizzandone le API. Se un servizio \u00e8 estensibile, \u00e8 pi\u00f9 probabile che andr\u00e0 bene sul lungo corso.<\/p>\n<p>Le API possono anche presentare delle nuove opportunit\u00e0. Per esempio, immaginate di selezionare un provider di email marketing con una API che espone i dati della campagna. Questo potrebbe permetterci di creare una dashboard per la performance della campagna nel nostro CMS: un valore aggiunto unico per i nostri clienti e una chance per far s\u00ec che i developer &#8220;in house&#8221; rimangano coinvolti ed entusiasti riguardo al servizio.<\/p>\n<h3>Branding: il loro \u00e8 forte o potete usare il vostro?<\/h3>\n<p>Si definisce &#8220;white-labeling&#8221; la pratica di rivendere un servizio con il vostro brand invece di quello del provider originale. Per alcune aziende questa pratica pu\u00f2 avere senso per il marketing. In generale, a me non piace il white-labeling. I nostri clienti si fidano delle scelte che facciamo e dovremmo essere orgogliosi di mostrare quali sono queste scelte. In ogni caso, dovrete essere sicuri di essere a vostro agio con il brand che userete.<\/p>\n<h3>SLA: cosa ottenete, oltre all&#8217;uptime?<\/h3>\n<p>Per i prodotti client-side, un fattore importante \u00e8 quello del browser support: ogni dipendenza esterna rappresenta un altro layer che pu\u00f2 aver abbandonato i browser pi\u00f9 vecchi prima che voi abbiate deciso di farlo. Va considerata anche l&#8217;accessibilit\u00e0: questa nuova soluzione esterna supporta gli utenti che hanno bisogni riguardanti l&#8217;accessibilit\u00e0 al livello che richiediamo? Ma forse l&#8217;aspetto pi\u00f9 importante di tutti \u00e8 il supporto. Possiamo acquistare un piano di supporto prioritario che offra aiuto rapido e accurato?<\/p>\n<p>Nel caso del nostro servizio di aggregazione di feed, non c&#8217;erano altre soluzioni sul banco. Quella pi\u00f9 popolare in realt\u00e0 aveva un avviso di chiusura! C&#8217;erano a disposizione un paio di provider pi\u00f9 piccoli, ma non avevamo mai lavorato con nessuno di questi prima di allora. Il supporto dei browser e l&#8217;accessibilit\u00e0 erano irrilevanti dal momento che avremmo fatto noi il parsing dei dati e la relativa visualizzazione. Il discorso dell&#8217;uptime era anch&#8217;esso ridotto perch\u00e9 ci saremmo assicurati di mettere in cache localmente i risultati. Comunque, con dei possibili candidati a portata di mano, potevamo spostare la nostra attenzione su questioni pi\u00f9 produttive del titubare tra due soluzioni simili.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Mantenimento delle relazioni<\/h2>\n<p>Se qualcun altro si occuper\u00e0 della maggior parte del lavoro, voglio farmi carico quanto pi\u00f9 possibile di tutto quel che manca. La gestione, la raccolta dati, la documentazione e il supporto in-house sono tutte ottime opportunit\u00e0 per rafforzare questa nuova relazione.<\/p>\n<p>Per quanto possa essere esaltante questa nuova relazione, non dobbiamo partire in quarta. Al contrario, ci rivolgeremo ai clienti per guidarli e metterli in quarantena prima di lasciarla partire. Raccogliete i suggerimenti dai membri del team per determinare i candidati corretti per la fase pilota, mettendo insieme un mix di casi limite e normali.<\/p>\n<p>Se la soluzione esterna dovesse raccogliere dati di qualsiasi tipo, dovremmo anche avere un modo automatizzato per importarne una copia, non solo come backup, ma anche come versione &#8220;cached&#8221; che possiamo utilizzare per ridurre al minimo la latenza. Se siamo dipendenti da un CDN per un servizio popolare, dobbiamo mandare una versione locale nel caso in cui la chiamata dovesse fallire.<\/p>\n<p>Se il nostro team non ha un elenco di relazioni navigate con il fornitore, l&#8217;antefatto potrebbe andare perso. Lasciati passare alcuni mesi e un turnover del personale e potremmo dimenticare perfino perch\u00e9 stiamo usando un certo servizio o perch\u00e9 abbiamo scelto un pacchetto specifico. Tutte le persone del nostro team dovrebbero sapere dove e come apprendere cose riguardanti le relazioni con chi gestisce le soluzioni esterne.<\/p>\n<p>Non serve che ogni membro del team sia un esperto del servizio, ma non dobbiamo aspettare che lo staff di supporto della terza parte risponda a domande semplici. Pertanto, dovremmo eleggere internamente un esperto di questa materia. Non deve essere per forza un developer. Abbiamo solo bisogno di qualcuno che abbia il compito di monitorare il servizio a intervalli regolari per verificare se ci sono cambiamenti nelle API, degli avvisi di shutdown o delle nuove feature. Dovrebbero essere in grado di addestrare nuovo personale e instradare richieste di supporto complesse alla terza parte.<\/p>\n<p>Nel nostro esempio del feed RSS, sapevamo che avremmo letto il loro output nel nostro database. Avevamo documentato questa relazione nella bacheca elettronica pi\u00f9 attiva del nostro team, il nostro software <abbr title=\"Customer Relationship Management\">CRM<\/abbr>. E abbiamo fatto in modo che la gestione delle dipendenze esterne diventasse una parte primaria del lavoro di uno dei membri del team.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Fai da te: una terza parte in attesa?<\/h2>\n<p>Fermatemi se avete gi\u00e0 sentito questa storia: uno sviluppatore orgoglioso assicura il team che una cosa simile pu\u00f2 essere fatta internamente. \u00c8 un progetto complesso. Crea qualcosa e l&#8217;azienda comincia a farci affidamento. Passa il tempo e il prodotto che \u00e8 stato realizzato internamente va bene, sebbene ci sia una certa quantit\u00e0 di lavoro di mantenimento da fare. Alla fine, lo sviluppatore se ne va dall&#8217;azienda. Il loro vecchio prodotto richiede manutenzione, nessuno sa cosa fare e, dal momento che \u00e8 totalmente personalizzato, non c&#8217;\u00e8 nulla di simile ad una community.<\/p>\n<p>Una volta che si \u00e8 deciso di realizzare qualcosa internamente, in che modo si pu\u00f2 evitare che il lavoro devolva in una dipendenza che crea risentimento ed alienazione?<\/p>\n<ul>\n<li><strong>Considerate il pair-programming.<\/strong> C&#8217;\u00e8 un modo migliore per essere sicuri che pi\u00f9 persone comprendano un prodotto di mettere pi\u00f9 persone a crearlo?<\/li>\n<li><strong>&#8220;I marted\u00ec dello scambio di lavoro&#8221;.<\/strong> Quando \u00e8 possibile, facciamo in modo che gli sviluppatori si scambino il proprio ruolo per un intero giorno. Letteralmente, nel nostro sistema di ticketing, \u00e8 come se una persona fosse un&#8217;altra. \u00c8 un modo per forzare il cross-training senza duplicare le ore necessarie per un compito.<\/li>\n<li><strong>Fate delle revisioni del codice<\/strong> prima di fare il push del nuovo codice. Sulle prime potrebbe sembrarvi piuttosto intrusivo, ma poi passa. Se non \u00e8 leggibile non si pu\u00f2 farne il deploy. Se avete dei project manager con conoscenze tecniche, permettegli di fare anche domande riguardo al codice.<\/li>\n<li><strong>Portate alla luce il codice poco chiaro<\/strong> mostrandolo come <a href=\"http:\/\/www.phpdoc.org\/\">phpDoc<\/a>, <a href=\"http:\/\/usejsdoc.org\/\">JSDoc<\/a> o qualcosa di simile.<\/li>\n<li><strong>Attenti al grande.<\/strong> Create delle stime orarie come <a href=\"http:\/\/en.wikipedia.org\/wiki\/Planning_poker\">incrementi della serie di Fibonacci<\/a>. Al crescere del progetto, cresce il suo livello di incertezza. Gli step di Fibonacci evitano che si sottostimi il budget e forniscono anche una chiave per chiamarsi fuori dai progetti che sono troppo difficili da stimare. In quel caso, \u00e8 probabilmente meglio puntare a una soluzione esterna piuttosto che avventurarsi per sentieri oscuri da soli.<\/li>\n<\/ul>\n<p>Tutte queste considerazioni si applicano al nostro precedente esempio, quello della widget di ricerca typeahead. Il pi\u00f9 appropriato \u00e8 il consiglio &#8220;fate attenzione alla grandezza&#8221;. Quando dico &#8220;grande&#8221;, lo intendo relativamente a quello che di solito funziona per un dato team. In questo caso, era un deliverable che sembrava molto familiare per dimensione e portata: ci era stato chiesto di estendere un CMS open source. Se invece ci avessero chiesto di <em>fare<\/em> un CMS, si sarebbero spente le sirene di allarme.<\/p>\n<\/div>\n<div class=\"paragrafo\">\n<h2>Guardate prima di saltare e dopo essere atterrati<\/h2>\n<p>Non \u00e8 che le soluzioni esterne siano cattive <em>di per s\u00e9<\/em>. \u00c8 solo che il moderno web team mi sembra uno strano posto: non solo sediamo sulle spalle dei giganti, ma lo facciamo senza prima prenderci la briga di conoscerli, e mettiamo lass\u00f9 anche le nostre aziende e i nostri clienti.<\/p>\n<p>Ovviamente, ci sono molte cose che non dovreste fare da soli e c&#8217;\u00e8 la possibilit\u00e0 che danneggereste la vostra azienda cercando di farle: <a href=\"http:\/\/en.wikipedia.org\/wiki\/Not_invented_here\">NIH<\/a> (Not Invented Here) \u00e8 un problema, non un obiettivo. Ma quando i team errano troppo nella direzione opposta, gli sviluppatori vengono privati di un diritto, i componenti iniziano a sembrare pezzi di ricambio e i clienti pagano per soluzioni che non sono propriamente giuste. Usare una soluzione esterna piuttosto che sviluppare in-house \u00e8 una <em>grande<\/em> decisione e dobbiamo rifletterci bene prima di decidere. Usate la mia serie di domande o fatevene una adatta al vostro team. Dopo tutto, siete voi la vostra miglior dipendenza.<\/p>\n<p>Illustrazioni: {carlok}<\/p>\n<\/div>\n","protected":false},"excerpt":{"rendered":"<p>Soluzioni esterne o fai da te?. \u00c8 una questione che tutti abbiamo dovuto affrontare, ma sapete come rispondere? Scott Fennell ci guida attraverso un miglior processo decisionale per determinare se utilizzare soluzioni in-house o esterne al proprio ufficio. Suggerimento: tutto si basa sulla valutazione di rischi e opportunit\u00e0 da entrambe le parti.<\/p>\n","protected":false},"author":229,"featured_media":7000743,"comment_status":"open","ping_status":"open","template":"","categories":[263,118,278],"tags":[],"coauthors":[431],"class_list":["post-491","article","type-article","status-publish","has-post-thumbnail","hentry","category-business","category-numero-101-1-ottobre-2013","category-workflow-tools"],"jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/article\/491","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\/229"}],"replies":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/comments?post=491"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media\/7000743"}],"wp:attachment":[{"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/media?parent=491"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/categories?post=491"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/tags?post=491"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/alistapart.com\/it\/wp-json\/wp\/v2\/coauthors?post=491"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}