{"id":3346,"date":"2013-04-22T12:03:55","date_gmt":"2013-04-22T20:03:55","guid":{"rendered":"http:\/\/blog.mozilla.org\/webdev\/?p=3346"},"modified":"2013-04-22T12:06:05","modified_gmt":"2013-04-22T20:06:05","slug":"kanban-for-mdn-development","status":"publish","type":"post","link":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/","title":{"rendered":"Kanban for MDN development"},"content":{"rendered":"<p style=\"text-align: left;\"><a href=\"https:\/\/mdn.kanbanery.com\/projects\/32137\/board\/?key=0383ba5f05e165e0eb19d8476654fe9775ce2ca7\"><img decoding=\"async\" loading=\"lazy\" class=\"size-medium wp-image-3348 aligncenter\" alt=\"MDN Kanbanery\" src=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png\" width=\"300\" height=\"151\" srcset=\"https:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png 300w, https:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-1024x515.png 1024w\" sizes=\"(max-width: 300px) 100vw, 300px\" \/><\/a><\/p>\n<h2 style=\"text-align: left;\">MDN workflow was a formless void<\/h2>\n<p style=\"text-align: left;\">When I first joined Mozilla there was no workflow for MDN; in fact, there were no full-time developers for MDN! To push <a href=\"https:\/\/github.com\/fwenzel\/mdn\/commit\/2969239112346c04c46db2cebece4b675d779590\">my first bug fix<\/a> to the site, I had to negotiate a <strong>mess of mdn bugs, wiki pages, and IT bugs, strung together with email<\/strong>. It took a couple weeks to get a simple fix into production, and worst of all &#8211; I had to interrupt at least 3 other peoples&#8217; regular workflows.<\/p>\n<h2 style=\"text-align: left;\">Let there be Scrum<\/h2>\n<p style=\"text-align: center;\"><a href=\"http:\/\/scrumbu.gs\/t\/mdn\/2012-07-03\/\"><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-3374 aligncenter\" alt=\"MDN Sprint Burndown\" src=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_sprint_burndown-580x290.png\" width=\"580\" height=\"290\" srcset=\"https:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_sprint_burndown-580x290.png 580w, https:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_sprint_burndown.png 879w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/><\/a><\/p>\n<p style=\"text-align: left;\">I had done Scrum for a few years at SourceForge so I naturally <strong>started to work in some &#8220;scrummy&#8221; things for MDN<\/strong> &#8211; first I added some <a href=\"http:\/\/groovecoder.com\/2011\/07\/18\/bugzilla-agile\/\">agile\/scrum features to the Bugzilla JS addon<\/a>. Then we got another couple of developers on the team and we used <a href=\"http:\/\/groovecoder.com\/2011\/11\/09\/mdn-agile-status\/\">more agile practices in our MDN workflow<\/a>. So we did user stories, <a href=\"http:\/\/standu.ps\/project\/mdndev\">standups<\/a>, retrospectives,\u00a0<a href=\"http:\/\/planningpoker.com\/\">planning poker<\/a>, and <a href=\"http:\/\/scrumbu.gs\/t\/mdn\/\">sprints on top of Bugzilla<\/a> with Paul McLanahan&#8217;s fantastic <a href=\"http:\/\/scrumbu.gs\/\">ScrumBugs<\/a> tool. We used it to run our sprints for over a year; to migrate MDN from MindTouch to Django<strong><\/strong>. <strong>Sprints helped<\/strong><strong> us prioritize, plan, and commit to release batches of bug-fixes, enhancements, and features at regular intervals.<\/strong><\/p>\n<h2 style=\"text-align: left;\">Continuous Deployment<\/h2>\n<p style=\"text-align: left;\"><a href=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_chief_stage.png\"><img decoding=\"async\" loading=\"lazy\" class=\"size-full wp-image-3377 aligncenter\" alt=\"MDN Staging Chief\" src=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_chief_stage.png\" width=\"491\" height=\"417\" \/><\/a><\/p>\n<p style=\"text-align: left;\">On our new Django platform, <a href=\"http:\/\/jamessocol.com\/\">James<\/a> and <a href=\"https:\/\/twitter.com\/jake_maul\">Jake<\/a> hooked <a href=\"https:\/\/github.com\/mozilla\/chief\">chief<\/a> up to give us continuous deployment to MDN; our &#8220;regular intervals&#8221; went from weeks to hours. Our flexibility and adaptability with continuous deployment is awesome. Pushing frequently caused a series of effects on our workflow, though:<\/p>\n<ol style=\"text-align: left;\">\n<li>We naturally <strong>prioritized things by hours or days<\/strong>. So, during our sprints, we would<\/li>\n<li><strong>remove and add items between planning meetings<\/strong>. This had knock-on effects like<\/li>\n<li>making it <strong>hard to see what we&#8217;re actually working on<\/strong> between meetings, and<\/li>\n<li>making our <strong>sprint-based estimates totally inaccurate<\/strong>.<\/li>\n<\/ol>\n<h2 style=\"text-align: left;\">A ban came, it&#8217;s name was Kan<\/h2>\n<p style=\"text-align: left;\">Around this time, I read <a href=\"http:\/\/www.amazon.com\/Kanban-ebook\/dp\/B0057H2M70\/ref=sr_1_1_bnp_1_kin?ie=UTF8&amp;qid=1352048493&amp;sr=8-1&amp;keywords=kanban\">Kanban<\/a>, by David Anderson and some of <a href=\"http:\/\/www.infoq.com\/minibooks\/kanban-scrum-minibook\">Kanban and Scrum<\/a>. A couple things stood out to me:<\/p>\n<ul style=\"text-align: left;\">\n<li>Kanban visualizes existing workflow<\/li>\n<li>Kanban favors <a href=\"http:\/\/www.joelonsoftware.com\/items\/2007\/10\/26.html\">Evidence-Based Scheduling<\/a> over estimates<\/li>\n<\/ul>\n<p style=\"text-align: left;\">The Kanban feature I most liked was <em>lead time<\/em> &#8211; i.e., the clock time between when a request is made and delivered &#8211; and <em>cycle times<\/em> &#8211; i.e., the clock time between when a cycle of work begins and ends. These clock times seem more valuable to plan and prioritize than fuzzy estimations. Because really &#8211; who doesn&#8217;t like data and numbers, right? So, of course, I wrote code &#8211; <a href=\"https:\/\/github.com\/groovecoder\/kanbugs\">kanbugs<\/a> &#8211; to help visualize our MDN workflow and calculate our lead and cycle times.<\/p>\n<h2 style=\"text-align: left;\">Kanbugs<\/h2>\n<p style=\"text-align: left;\"><a href=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/kanbugs_screenshot.png\"><img decoding=\"async\" loading=\"lazy\" class=\" wp-image-3370 aligncenter\" alt=\"Kanbugs Screenshot\" src=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/kanbugs_screenshot-580x832.png\" width=\"348\" height=\"499\" srcset=\"https:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/kanbugs_screenshot-580x832.png 580w, https:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/kanbugs_screenshot.png 818w\" sizes=\"(max-width: 348px) 100vw, 348px\" \/><\/a>Kanbugs used data from our bugzilla product and our GitHub pull requests to visualize our workflow. In general, the workflow was:<\/p>\n<ol style=\"text-align: left;\">\n<li>We <strong>select<\/strong> a bug and add &#8216;p=&lt;estimate&gt;&#8217; to the whiteboard<\/li>\n<li>We <strong>implement<\/strong> a bug and submit a GitHub pull request with &#8220;fix bug &lt;id&gt;&#8221; in the commit message<\/li>\n<li>We <strong>review<\/strong> a bug and merge it to master, which automatically marks the bug &#8216;RESOLVED:FIXED&#8217; in bugzilla<\/li>\n<li>WebQA <strong>tests<\/strong> the bug on <a href=\"http:\/\/developer-dev.allizom.org\/\">the MDN dev integration server<\/a><\/li>\n<li>We <strong>release<\/strong> the code to production, and WebQA marks the bug &#8220;VERIFIED:FIXED&#8221; in bugzilla<\/li>\n<\/ol>\n<p style=\"text-align: left;\">By visualizing the workflow and calculating both lead and cycle times we learned a couple interesting things. Most prominently, of our 39-day lead-time, 19 days were spent in <em>triage<\/em> and 14 days were spent <em>waiting for testing<\/em>! <strong>85% of our lead-time was happening outside the development team<\/strong>. This kind of data helps us more effectively improve our workflow. E.g., rather than improve our estimates, we worked with WebQA to change from mandatory to as-needed exploratory testing.<\/p>\n<p style=\"text-align: left;\">Kanbugs was good for passive, read-only visualization and calculation, but (like Scrumbu.gs before) it wasn&#8217;t made for active management. It lacks:<\/p>\n<ul style=\"text-align: left;\">\n<li><strong>Quick visual scanning for action items<\/strong> &#8211; who&#8217;s blocked? who&#8217;s too busy? what should I work on next?<\/li>\n<li><strong>Work-in-Progress limits<\/strong> &#8211; Kanban enforces <a href=\"http:\/\/www.startuplessonslearned.com\/2009\/02\/work-in-small-batches.html\">small batch sizes<\/a> by setting limits on how many things can be in the board at a time<\/li>\n<\/ul>\n<h2 style=\"text-align: left;\">Kanbanery<\/h2>\n<p style=\"text-align: left;\"><a href=\"https:\/\/mdn.kanbanery.com\/projects\/32137\/board\/?key=0383ba5f05e165e0eb19d8476654fe9775ce2ca7\"><img decoding=\"async\" loading=\"lazy\" class=\"aligncenter\" alt=\"MDN Kanbanery\" src=\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png\" width=\"300\" height=\"151\" \/><\/a>Kanbanery is good for these features. So, a couple months ago, we started an <a href=\"https:\/\/mdn.kanbanery.com\/projects\/32137\/board\/?key=0383ba5f05e165e0eb19d8476654fe9775ce2ca7\">MDN board on Kanbanery<\/a>. Kanbanery&#8217;s visualization is great. On a typical morning, I check emails and then<\/p>\n<ol style=\"text-align: left;\">\n<li>quickly scan the board<strong> for any cards with green check-marks<\/strong> that I can pull to the next step of development.<\/li>\n<li>quickly scan the <strong>work-in-progress limits to see if I can help un-block cards<\/strong> that are piling up at a certain step<\/li>\n<li>quickly scan the board <strong>for my cards to resume my main dev task(s)<\/strong><\/li>\n<\/ol>\n<p style=\"text-align: left;\">Of course, now that we&#8217;ve used Kanbanery for a couple months, we&#8217;ve hit drawbacks:<\/p>\n<ul style=\"text-align: left;\">\n<li><strong>Yet Another Tracking Tool<\/strong> &#8211; we already have to keep up with email, bugzilla, and github. Scrumbugs had the same drawback, but Scrumbugs doesn&#8217;t micro-track through the sprint, and it automatically marks bugs fixed using bugzilla data.<\/li>\n<li><strong>How to incorporate contributors<\/strong> &#8211; we don&#8217;t want to make contributors use Yet Another Tracking Tool, so we don&#8217;t include them in the board. That means the board doesn&#8217;t show contributors&#8217; work, which can be considerable.<\/li>\n<li><strong>General process churn<\/strong> &#8211; we went from no process through multiple forms of agile and scrum practices to Kanban in the space of about 18 months. I really like to continuously improve dev practices, but even I&#8217;m getting tired of changing things.<\/li>\n<\/ul>\n<h2 style=\"text-align: left;\">What&#8217;s next &#8211; maybe Kanbuggery?<\/h2>\n<p style=\"text-align: left;\">Rather than change things up again, what I&#8217;d really like to do is <strong>automate Kanbanery &#8211; to update the board based on bugzilla and github actions<\/strong>, like we had done with Kanbugs. Then Kanbanery could give us its great visual features without needing active care and attention. <a href=\"http:\/\/support.kanbanery.com\/entries\/20347483-API-Version-1-3\">Kanbanery has what looks like a fully-featured API<\/a>, but I haven&#8217;t had time to explore it. Has anyone else?<\/p>\n<p style=\"text-align: left;\">How are other Mozilla, open-source, or website teams using Kanban for development?<\/p>\n","protected":false},"excerpt":{"rendered":"<p>MDN workflow was a formless void When I first joined Mozilla there was no workflow for MDN; in fact, there were no full-time developers for MDN! To push my first bug fix to the site, I had to negotiate a &hellip; <a class=\"go\" href=\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/\">Continue reading<\/a><\/p>\n","protected":false},"author":285,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[20272,4710,288],"tags":[],"coauthors":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v22.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Kanban for MDN development - Mozilla Web Development<\/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:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Luke Crouch\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"5 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/\",\"name\":\"Kanban for MDN development - Mozilla Web Development\",\"isPartOf\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png\",\"datePublished\":\"2013-04-22T20:03:55+00:00\",\"dateModified\":\"2013-04-22T20:06:05+00:00\",\"author\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/491692acd36de650165e25dd53c99954\"},\"breadcrumb\":{\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#primaryimage\",\"url\":\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png\",\"contentUrl\":\"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blog.mozilla.org\/webdev\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Kanban for MDN development\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#website\",\"url\":\"https:\/\/blog.mozilla.org\/webdev\/\",\"name\":\"Mozilla Web Development\",\"description\":\"For make benefit of glorious tubes\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blog.mozilla.org\/webdev\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/491692acd36de650165e25dd53c99954\",\"name\":\"Luke Crouch\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/image\/48dd88f364049f42e8435a858f692d2f\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/ac76daf656edb21915fd4611edae2b2e?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/ac76daf656edb21915fd4611edae2b2e?s=96&d=mm&r=g\",\"caption\":\"Luke Crouch\"},\"description\":\"Privacy Engineer\",\"sameAs\":[\"https:\/\/groovecoder.com\",\"https:\/\/x.com\/groovecoder\"],\"url\":\"https:\/\/blog.mozilla.org\/webdev\/author\/lcrouchmozilla-com\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Kanban for MDN development - Mozilla Web Development","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:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/","twitter_misc":{"Written by":"Luke Crouch","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/","url":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/","name":"Kanban for MDN development - Mozilla Web Development","isPartOf":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#primaryimage"},"image":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#primaryimage"},"thumbnailUrl":"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png","datePublished":"2013-04-22T20:03:55+00:00","dateModified":"2013-04-22T20:06:05+00:00","author":{"@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/491692acd36de650165e25dd53c99954"},"breadcrumb":{"@id":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#primaryimage","url":"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png","contentUrl":"http:\/\/blog.mozilla.org\/webdev\/files\/2013\/04\/mdn_kanban-300x151.png"},{"@type":"BreadcrumbList","@id":"https:\/\/blog.mozilla.org\/webdev\/2013\/04\/22\/kanban-for-mdn-development\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blog.mozilla.org\/webdev\/"},{"@type":"ListItem","position":2,"name":"Kanban for MDN development"}]},{"@type":"WebSite","@id":"https:\/\/blog.mozilla.org\/webdev\/#website","url":"https:\/\/blog.mozilla.org\/webdev\/","name":"Mozilla Web Development","description":"For make benefit of glorious tubes","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blog.mozilla.org\/webdev\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/491692acd36de650165e25dd53c99954","name":"Luke Crouch","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blog.mozilla.org\/webdev\/#\/schema\/person\/image\/48dd88f364049f42e8435a858f692d2f","url":"https:\/\/secure.gravatar.com\/avatar\/ac76daf656edb21915fd4611edae2b2e?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/ac76daf656edb21915fd4611edae2b2e?s=96&d=mm&r=g","caption":"Luke Crouch"},"description":"Privacy Engineer","sameAs":["https:\/\/groovecoder.com","https:\/\/x.com\/groovecoder"],"url":"https:\/\/blog.mozilla.org\/webdev\/author\/lcrouchmozilla-com\/"}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/3346"}],"collection":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/users\/285"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/comments?post=3346"}],"version-history":[{"count":0,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/posts\/3346\/revisions"}],"wp:attachment":[{"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/media?parent=3346"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/categories?post=3346"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/tags?post=3346"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/blog.mozilla.org\/webdev\/wp-json\/wp\/v2\/coauthors?post=3346"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}