{"id":32090,"date":"2021-01-27T10:35:00","date_gmt":"2021-01-27T09:35:00","guid":{"rendered":"https:\/\/blexin.com\/?p=32090"},"modified":"2021-05-20T20:11:49","modified_gmt":"2021-05-20T18:11:49","slug":"diciamo-addio-alle-pr-con-il-trunk-based-development","status":"publish","type":"post","link":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/","title":{"rendered":"Diciamo addio alle PR con il Trunk Based Development"},"content":{"rendered":"\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"608\" data-attachment-id=\"32093\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/attachment\/2_21_1105x656-blog-tbd-a\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&amp;ssl=1\" data-orig-size=\"1105,656\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"2_21_1105x656 blog TBD A\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1024%2C608&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?resize=1024%2C608&#038;ssl=1\" alt=\"\" class=\"wp-image-32093\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A-1024x608.png 1024w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A-980x582.png 980w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A-480x285.png 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) and (max-width: 980px) 980px, (min-width: 981px) 1024px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Qualche mese fa ho cominciato a lavorare su un progetto completamente nuovo e con il team abbiamo deciso di inserire qualche tecnologia innovativa e&nbsp;provare un&nbsp;altro&nbsp;modello di branching&nbsp;chiamato&nbsp;Trunk&nbsp;Based&nbsp;Development (TBD).&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Solitamente abbiamo un backlog di \u201cStory\u201d su cui lavorare. Il lavoro \u00e8 diviso in \u201cSprint\u201d di due settimane e,&nbsp;con un meeting all\u2019inizio di ogni sprint,&nbsp;decidiamo su quali&nbsp;storie&nbsp;lavorare. A quel punto,&nbsp;gli sviluppatori sono liberi di dedicarsi&nbsp;a qualsiasi storia nello stato \u201cTo&nbsp;Do\u201d,&nbsp;sempre con un occhio alle priorit\u00e0 decise durante lo sprint meeting.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;Il&nbsp;modello&nbsp;di branching che utilizziamo abitualmente \u00e8&nbsp;una variante del&nbsp;tipico \u201cGitHub&nbsp;Flow\u201d:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Quando si comincia lo sviluppo su&nbsp;una determinata&nbsp;storia, viene&nbsp;creata&nbsp;una&nbsp;branch&nbsp;a partire da&nbsp;master.&nbsp;<\/li><li>Si lavora su quella&nbsp;branch, senza pensare a nient\u2019altro.&nbsp;Lo sviluppo pu\u00f2 durare ore, giorni, settimane.&nbsp;Quando&nbsp;il lavoro \u00e8&nbsp;terminato, il codice&nbsp;viene&nbsp;pushato&nbsp;verso il server&nbsp;e&nbsp;il build tool (Jenkins) prova a creare una build&nbsp;e far&nbsp;girare i test.&nbsp;<\/li><li>Se tutto va a buon fine, viene aperta una Pull&nbsp;Request&nbsp;(PR)&nbsp;verso la&nbsp;branch&nbsp;master,&nbsp;su cui&nbsp;tutti i membri del team possono fare review.&nbsp;Chi&nbsp;vuole&nbsp;pu\u00f2&nbsp;fare delle&nbsp;osservazioni&nbsp;inserendo&nbsp;un commento&nbsp;sulla PR&nbsp;e,&nbsp;se&nbsp;lo&nbsp;si ritiene&nbsp;necessario,&nbsp;vengono fatte delle modifiche che saranno poi&nbsp;pushate,&nbsp;attendendo di nuovo&nbsp;le approvazioni da parte del team.&nbsp;<\/li><li>Una volta che la PR \u00e8 stata approvata, viene fatta la&nbsp;merge sulla&nbsp;branch&nbsp;master e&nbsp;il processo di&nbsp;Continuous&nbsp;Integration&nbsp;(CI)&nbsp;fa partire una build con la quale viene poi creato il \u201cpacchetto\u201d per il&nbsp;deploy&nbsp;sui vari ambienti applicativi.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Il problema con questo workflow&nbsp;\u00e8&nbsp;la parte di code review sulle PR che vengono&nbsp;aperte. Il meccanismo con cui viene fatta&nbsp;la&nbsp;review del codice&nbsp;(composta da&nbsp;commenti, risposte, implementazioni&nbsp;e altri commenti)&nbsp;a volte pu\u00f2&nbsp;durare settimane,&nbsp;visto che le persone che fanno code review sono comunque occupate in altre attivit\u00e0, in quanto&nbsp;non abbiamo nel team persone dedicate esclusivamente alle review. Questo&nbsp;rallenta&nbsp;significativamente&nbsp;il ciclo di sviluppo.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Per superare questo problema, abbiamo deciso di utilizzare il TBD, che consiste nel pushare il codice direttamente sulla branch master, senza creare altre branch. So che pu\u00f2 suonare strano, ma continuate a leggere.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"366\" data-attachment-id=\"32096\" data-permalink=\"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/attachment\/tbd_1\/\" data-orig-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/tbd_1.jpeg?fit=640%2C366&amp;ssl=1\" data-orig-size=\"640,366\" data-comments-opened=\"0\" data-image-meta=\"{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}\" data-image-title=\"tbd_1\" data-image-description=\"\" data-image-caption=\"\" data-large-file=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/tbd_1.jpeg?fit=640%2C366&amp;ssl=1\" src=\"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/tbd_1.jpeg?resize=640%2C366&#038;ssl=1\" alt=\"\" class=\"wp-image-32096\" srcset=\"https:\/\/blexin.com\/wp-content\/uploads\/2021\/01\/tbd_1.jpeg 640w, https:\/\/blexin.com\/wp-content\/uploads\/2021\/01\/tbd_1-480x275.jpeg 480w\" sizes=\"auto, (min-width: 0px) and (max-width: 480px) 480px, (min-width: 481px) 640px, 100vw\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Come facciamo TBD?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ovviamente non si tratta solo di&nbsp;pushare&nbsp;su master:&nbsp;per poter avere&nbsp;un vantaggio reale da questo&nbsp;modello&nbsp;bisogna&nbsp;darsi alcune regole.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Commit<\/strong><strong>&nbsp;robusti<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Ogni&nbsp;commit&nbsp;deve lasciare l\u2019applicativo in uno stato \u201cfunzionante\u201d, nessun test deve fallire, quindi bisogna organizzare lo sviluppo della propria feature, soprattutto se \u00e8 corposa, per ottenere questo risultato.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Pair<\/strong><strong>&nbsp;Programming<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Almeno 2 coppie di occhi su ogni riga di codice:&nbsp;in questo modo il codice&nbsp;viene sottoposto al&nbsp;controllo&nbsp;di&nbsp;pi\u00f9 persone.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Feature Flags<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pu\u00f2 capitare durante lo sviluppo che il branch master contenga delle feature non ancora testate e che ancora non vogliamo portare all\u2019attenzione del business. Possiamo disabilitarle utilizzando la tecnica dei feature flags (vi consiglio questo interessante articolo di Martin Fowler: <a href=\"https:\/\/martinfowler.com\/articles\/feature-toggles.html\" target=\"_blank\" rel=\"noreferrer noopener\">Feature Toggles (aka Feature Flags) (martinfowler.com)<\/a>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Design Review<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Non avendo pi\u00f9 il meccanismo delle Pull Request, la code review viene rimandata a un meeting settimanale in cui discutere delle varie implementazioni fatte. In questo meeting, un relatore espone quanto sviluppato e gli altri partecipanti fanno eventuali osservazioni. Pu\u00f2 capitare di fare delle modifiche direttamente durante il meeting.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Come \u00e8 migliorato il nostro sviluppo<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Partire con questo approccio \u00e8 stato tutto in salita. Il problema principale da affrontare \u00e8 quello di trovare la giusta dimensione dei commit da pushare. Inizialmente alcuni membri del team non erano confidenti nell&#8217;effettuare il push di piccoli commit robusti, ma piuttosto preferivano un push unico al completamento della feature, causando diverse problematiche nel merge del codice.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nonostante questo, dopo una prima fase di assestamento, il team ha riscontrato molti benefici da questo modello, e di seguito provo ad elencarne alcuni.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Il codice a<\/strong><strong>ppart<\/strong><strong>iene<\/strong><strong>&nbsp;al team<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando il codice di una feature viene scritto da una sola persona, che ne segue l\u2019intero ciclo fino al merge su master, c\u2019\u00e8 la tendenza a ritenere quel codice di \u201cpropriet\u00e0\u201d di quell\u2019unico sviluppatore. Usando il TBD il codice appartiene al team, perch\u00e9 ad ogni commit vedi il tuo applicativo crescere, magari facendo refactoring su una parte di codice pushata precedentemente da un tuo collega, rendendo lo sviluppo pi\u00f9 dinamico e di squadra.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Feedback veloci<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con il meccanismo delle PR i feedback arrivano solo a lavoro concluso. La fase di code review \u00e8 sempre ardua da organizzare: nel nostro team non ci sono figure dedicate a quello, e quindi ci tocca trovare del tempo libero per farla. Una volta fatta, se troviamo qualcosa che non convince, lasciamo un commento, quindi l\u2019altro membro (che nel frattempo ha cominciato un\u2019altra attivit\u00e0) dovr\u00e0 trovare il momento giusto per guardare il commento e magari rispondere, richiedendo cos\u00ec una forte interazione tra le parti che spesso pu\u00f2 essere stimolante, ma altre volte si basa su una mera approvazione. Quando invece \u00e8 presente un flusso di commit continuo, le code review sono sempre in corso, quindi scegliere una strada diversa rispetto a quella pensata pu\u00f2 risultare pi\u00f9 facile da implementare.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Feedback di migliore qualit\u00e0<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Con le PR, i commenti arrivano sotto forma di annotazioni in una casella di testo, con tutte le difficolt\u00e0 del caso. Il commentatore potrebbe non riuscire ad esprimere correttamente il suo punto di vista, oppure lo sviluppatore potrebbe non cogliere l\u2019esatto motivo del commento, considerandolo quasi un attacco personale.&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Avere possibilit\u00e0 di confrontarsi sul codice in tempo reale, magari gi\u00e0 mentre si fa Pair Programming, evita sicuramente incomprensioni e rende pi\u00f9 fluido lo sviluppo.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Metodologia&nbsp;<\/strong><strong>di sviluppo del team<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Pair&nbsp;programming&nbsp;e&nbsp;TBD portano il team a&nbsp;creare&nbsp;una metodologia&nbsp;di sviluppo condivisa&nbsp;da tutti, rendendo le successive code review semplici e veloci.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Propensione al&nbsp;refactoring<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando una PR ottiene le approvazioni necessarie e viene portata sul branch master, si tende a ritenerla conclusa, anche se il codice pushato avrebbe bisogno di un po&#8217; di refactoring, che si cerca di evitare principalmente per non incappare poi in problemi di merge, che potrebbero essere necessari. Quando lo sviluppo \u00e8 continuo, il refactoring di piccoli pezzi di codice diventa pi\u00f9 semplice e non c\u2019\u00e8 bisogno di avventurarsi nel risolvere conflitti di merge complessi.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Visibilit\u00e0 sul lavoro di tutti<\/strong>&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Quando gli sviluppi avvengono in una branch separata sono invisibili finch\u00e9 la branch non viene pushata. Se invece tutti pushano sulla branch master c\u2019\u00e8 la possibilit\u00e0, in tempo reale, di vedere su quali feature il team lavora in quel momento.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">TBD si adatta a tutti i team?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Vorrei chiarire un punto: lo sviluppo TBD di per s\u00e9 non offre alcun vantaggio oggettivo e se ci pensate non \u00e8 poi niente di speciale. Quello che invece d\u00e0 dei vantaggi oggettivi sono le pratiche che \u00e8 necessario mettere in atto per essere in grado di eseguire lo sviluppo basato su trunk.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Affinch\u00e9 un team sia in grado di lavorare direttamente su master&nbsp;\u00e8 necessario&nbsp;che tutti siano in grado di lavorare senza rompere il codice,&nbsp;che tutti sappiano come scrivere dei test robusti e&nbsp;che tutti&nbsp;sappiano come lavorare insieme in modo efficace.&nbsp;&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Come cominciare?&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Se al momento stai sviluppando in feature&nbsp;branch&nbsp;e vuoi cominciare ad usare TBD,&nbsp;mi sento di consigliarti&nbsp;due cose:&nbsp;<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li><strong>Fortifica il tuo modo di scrivere test.&nbsp;<\/strong>Cerca di lavorare per arrivare ad una build che secondo te non ha problemi, anche se non si pu\u00f2 mai esserne certi. Prova a utilizzare la tecnica TDD (Test Driven Development), ti renderai cos\u00ec conto di inserire una quantit\u00e0 di test che riesce quasi a coprire tutto quello che la tua applicazione \u00e8 in grado di fare.<\/li><\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"2\"><li><strong>Fai&nbsp;Pair&nbsp;Programming.&nbsp;&nbsp;<\/strong>Eliminando il processo di Pull Request e quello di Code Review \u00e8 fondamentale che il codice sia sviluppato sotto il controllo di almeno due persone.&nbsp;<\/li><\/ol>\n\n\n\n<ol class=\"wp-block-list\" start=\"3\"><li><strong>Analisi del codice:&nbsp;<\/strong>\u00c8 possibile integrare all\u2019interno della propria CI dei meccanismi di analisi statica del codice (noi utilizziamo&nbsp;SonarQube).&nbsp;In questo modo,&nbsp;viene fatto l&#8217;enforcing&nbsp;delle regole di stile semplificando ancora di pi\u00f9 parte del processo di review.&nbsp;<\/li><\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">Spero di aver alimentato la vostra curiosit\u00e0 su un nuovo modo di sviluppare.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Alla&nbsp;prossima.&nbsp;<\/p>\n\n\n\n\n","protected":false},"excerpt":{"rendered":"<p>Un\u2019esperienza sul campo utilizzando questa metodologia di sviluppo<\/p>\n","protected":false},"author":196716246,"featured_media":32093,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_et_pb_use_builder":"off","_et_pb_old_content":"","_et_gb_content_width":"","_coblocks_attr":"","_coblocks_dimensions":"","_coblocks_responsive_height":"","_coblocks_accordion_ie_support":"","inline_featured_image":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_wpcom_ai_launchpad_first_post":false,"_jetpack_feature_clip_id":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":"","jetpack_publicize_message":"{title}\n\n{excerpt}\n\n{url}","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2},"_wpas_customize_per_network":false,"jetpack_post_was_ever_published":false},"categories":[688637374],"tags":[688637539],"class_list":["post-32090","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog","tag-devops-it"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Diciamo addio alle PR con il Trunk Based Development - Blexin<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/\" \/>\n<meta property=\"og:locale\" content=\"it_IT\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Diciamo addio alle PR con il Trunk Based Development - Blexin\" \/>\n<meta property=\"og:description\" content=\"Un\u2019esperienza sul campo utilizzando questa metodologia di sviluppo\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/\" \/>\n<meta property=\"og:site_name\" content=\"Blexin\" \/>\n<meta property=\"article:published_time\" content=\"2021-01-27T09:35:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2021-05-20T18:11:49+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1\" \/>\n\t<meta property=\"og:image:width\" content=\"1105\" \/>\n\t<meta property=\"og:image:height\" content=\"656\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Francesco de Vicariis\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Scritto da\" \/>\n\t<meta name=\"twitter:data1\" content=\"Francesco de Vicariis\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tempo di lettura stimato\" \/>\n\t<meta name=\"twitter:data2\" content=\"8 minuti\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/\"},\"author\":{\"name\":\"Francesco de Vicariis\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"headline\":\"Diciamo addio alle PR con il Trunk Based Development\",\"datePublished\":\"2021-01-27T09:35:00+00:00\",\"dateModified\":\"2021-05-20T18:11:49+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/\"},\"wordCount\":1520,\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1\",\"keywords\":[\"DevOps\"],\"articleSection\":[\"Blog\"],\"inLanguage\":\"it-IT\"},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/\",\"name\":\"Diciamo addio alle PR con il Trunk Based Development - Blexin\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1\",\"datePublished\":\"2021-01-27T09:35:00+00:00\",\"dateModified\":\"2021-05-20T18:11:49+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\"},\"breadcrumb\":{\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#breadcrumb\"},\"inLanguage\":\"it-IT\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#primaryimage\",\"url\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1\",\"contentUrl\":\"https:\\\/\\\/i0.wp.com\\\/blexin.com\\\/wp-content\\\/uploads\\\/2021\\\/01\\\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1\",\"width\":1105,\"height\":656},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/blog\\\/diciamo-addio-alle-pr-con-il-trunk-based-development\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/blexin.com\\\/it\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Diciamo addio alle PR con il Trunk Based Development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#website\",\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/\",\"name\":\"Blexin\",\"description\":\"Con noi \u00e8 semplice\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/blexin.com\\\/it\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"it-IT\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/blexin.com\\\/it\\\/#\\\/schema\\\/person\\\/6f8514ed8b0d3be31369ca5436c4781f\",\"name\":\"Francesco de Vicariis\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"it-IT\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g\",\"caption\":\"Francesco de Vicariis\"},\"url\":\"https:\\\/\\\/blexin.com\\\/it\\\/author\\\/francesco-devicariisblexin-com\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Diciamo addio alle PR con il Trunk Based Development - Blexin","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/","og_locale":"it_IT","og_type":"article","og_title":"Diciamo addio alle PR con il Trunk Based Development - Blexin","og_description":"Un\u2019esperienza sul campo utilizzando questa metodologia di sviluppo","og_url":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/","og_site_name":"Blexin","article_published_time":"2021-01-27T09:35:00+00:00","article_modified_time":"2021-05-20T18:11:49+00:00","og_image":[{"width":1105,"height":656,"url":"https:\/\/i1.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1","type":"image\/png"}],"author":"Francesco de Vicariis","twitter_card":"summary_large_image","twitter_misc":{"Scritto da":"Francesco de Vicariis","Tempo di lettura stimato":"8 minuti"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#article","isPartOf":{"@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/"},"author":{"name":"Francesco de Vicariis","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"headline":"Diciamo addio alle PR con il Trunk Based Development","datePublished":"2021-01-27T09:35:00+00:00","dateModified":"2021-05-20T18:11:49+00:00","mainEntityOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/"},"wordCount":1520,"image":{"@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1","keywords":["DevOps"],"articleSection":["Blog"],"inLanguage":"it-IT"},{"@type":"WebPage","@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/","url":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/","name":"Diciamo addio alle PR con il Trunk Based Development - Blexin","isPartOf":{"@id":"https:\/\/blexin.com\/it\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#primaryimage"},"image":{"@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#primaryimage"},"thumbnailUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1","datePublished":"2021-01-27T09:35:00+00:00","dateModified":"2021-05-20T18:11:49+00:00","author":{"@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f"},"breadcrumb":{"@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#breadcrumb"},"inLanguage":"it-IT","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/"]}]},{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#primaryimage","url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1","contentUrl":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1","width":1105,"height":656},{"@type":"BreadcrumbList","@id":"https:\/\/blexin.com\/it\/blog\/diciamo-addio-alle-pr-con-il-trunk-based-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blexin.com\/it\/"},{"@type":"ListItem","position":2,"name":"Diciamo addio alle PR con il Trunk Based Development"}]},{"@type":"WebSite","@id":"https:\/\/blexin.com\/it\/#website","url":"https:\/\/blexin.com\/it\/","name":"Blexin","description":"Con noi \u00e8 semplice","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blexin.com\/it\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"it-IT"},{"@type":"Person","@id":"https:\/\/blexin.com\/it\/#\/schema\/person\/6f8514ed8b0d3be31369ca5436c4781f","name":"Francesco de Vicariis","image":{"@type":"ImageObject","inLanguage":"it-IT","@id":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/b3a3164fd0b28d429cd427aafae38a687a41a250a2bccf4ab3b0744138afd64e?s=96&d=identicon&r=g","caption":"Francesco de Vicariis"},"url":"https:\/\/blexin.com\/it\/author\/francesco-devicariisblexin-com\/"}]}},"jetpack_publicize_connections":[],"jetpack_shortlink":"https:\/\/wp.me\/pcyUBx-8lA","jetpack_sharing_enabled":true,"jetpack_featured_media_url":"https:\/\/i0.wp.com\/blexin.com\/wp-content\/uploads\/2021\/01\/2_21_1105x656-blog-TBD-A.png?fit=1105%2C656&ssl=1","_links":{"self":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/32090","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/users\/196716246"}],"replies":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/comments?post=32090"}],"version-history":[{"count":14,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/32090\/revisions"}],"predecessor-version":[{"id":32170,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/posts\/32090\/revisions\/32170"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media\/32093"}],"wp:attachment":[{"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/media?parent=32090"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/categories?post=32090"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blexin.com\/it\/wp-json\/wp\/v2\/tags?post=32090"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}