{"id":65,"date":"2017-01-20T22:32:49","date_gmt":"2017-01-20T19:32:49","guid":{"rendered":"http:\/\/iamakulov.com\/notes2\/?p=65"},"modified":"2017-05-06T04:23:56","modified_gmt":"2017-05-06T01:23:56","slug":"exclusive-code-ownership","status":"publish","type":"post","link":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/","title":{"rendered":"Exclusive code ownership (why it\u2019s bad and what to do with it)"},"content":{"rendered":"<p>In December 2016, a front-end developer left\u00a0a\u00a0team where\u00a0I work. Apart from other changes, this created an issue. When he was working, the project had a couple of complex modules we were developing with him together. When he left, I realized that only I am able to work with them \u2013 other two team members knew nothing about how these modules function. <mark>This is called <em>\u201cexclusive code ownership\u201d<\/em>, and it\u2019s bad in the long term<\/mark>, so I had to start fixing this. Here\u2019s why it\u2019s bad and what to do with it.<\/p>\n<div class=\"bordered-highlight bordered-highlight_large\">\n<span style=\"transform: rotate(90deg); display: inline-block; will-change: transform;\">&#x1F590;<\/span> &#x1F52E;\n<\/div>\n<h1 id=\"problems\">Problems<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#problems\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h1>\n<h2 id=\"bus-factor\">Bus factor<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#bus-factor\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h2>\n<p>Imagine there\u2019s a complex module in your project that only you work with, and you\u2019re hit by a bus tomorrow. Will the team be able to\u00a0continue developing this module the next day? Most likely no.\u00a0This means the bus\u00a0factor of your team is 1 \u2013 that is, it\u2019s enough to <s>kill<\/s> remove a single developer from the project to severely slow or even stop its development.<\/p>\n<div class=\"example-block\">\nUntil recently,\u00a0our project has been heavily relying on\u00a0a custom\u00a0front-end framework that was developed by only a single team member. No\u00a0other developers knew\u00a0its inner\u00a0parts, and only\u00a0a couple of them knew it deep enough. This meant the bus factor of the whole front-end team was just one. This, along with other issues, led us to migrate from this custom framework to React in 2016.\n<\/div>\n<h2 id=\"bottlenecks\">Bottlenecks<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#bottlenecks\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h2>\n<p>If\u00a0there\u2019s a\u00a0module in the project that you exclusively own, then, regardless of the team size, only you will be able to make changes\u00a0in it. If\u00a0tomorrow you\u00a0receive 5 critical issues related to this part,\u00a0there\u2019ll be nobody to help you. You may even slow down your team if these critical issues block them.<\/p>\n<div class=\"example-block\">\nWe had this problem\u00a0when\u00a0a part of our front-end infrastructure changed, and this broke builds for the whole team.\u00a0Because it was only\u00a0me who knew how\u00a0all this stuff works, I had to\u00a0fix the\u00a0problems one-by-one. If\u00a0other\u00a0team members knew this, they could\u2019ve helped me bring everything back sooner.\n<\/div>\n<h2 id=\"leaving-is-hard\">Leaving is hard<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#leaving-is-hard\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h2>\n<p>If\u00a0once you decide to\u00a0leave the project, you\u2019ll have to transfer all your unique knowledge about how these parts work to other team members.\u00a0Depending on the knowledge size, this can take\u00a0significant time, and it still\u00a0will be less effective than if other members had real experience with the code.<\/p>\n<p><mark class=\"bordered-highlight\">You create risk and slow down delivery<\/mark><\/p>\n<h1 id=\"what-to-do\">What to do<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#what-to-do\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h1>\n<h2 id=\"documentation-and-maintainability\">Documentation and maintainability<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#documentation-and-maintainability\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h2>\n<p>You have probably heard this advice for a lot of times, but it\u2019s never bad to repeat it again.\u00a0Make your code documented and maintainable. This includes\u00a0code cleanliness, inline comments, and external documentation.<\/p>\n<p>It\u2019s your choice how\u00a0much to document the code. I usually try to <a href=\"https:\/\/www.sitepoint.com\/self-documenting-javascript\/\">make it self-documenting<\/a> and add comments\u00a0only if the purpose of the code or the decisions behind it are still unclear. Also, remember that <mark>self-documenting code is better than comments, and comments are better than external documentation<\/mark>. People occasionally forget to update the comments and often\u00a0forget to update the external documentation, so the only up-to-date source of information is code.<\/p>\n<h2 id=\"commit-messages\">Commit messages<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#commit-messages\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h2>\n<p><mark>In my experience, writing detailed commit messages is very underestimated.<\/mark> I\u2019m sure that one of the best ways to share your code knowledge is to include it into your commits.\u00a0Once you commit something, it stays in the history forever, and\u00a0tools like <a href=\"https:\/\/help.github.com\/articles\/tracing-changes-in-a-file\/\"><em>git blame<\/em><\/a> help you to\u00a0easily\u00a0find\u00a0which commit changed the specific\u00a0lines. This means that\u00a0even if you leave the project, the other developer\u00a0that will work with the piece you\u2019ve written will be able to <em>git blame<\/em> the code and see why you made this or that change.<\/p>\n<p>What to write in a good commit message?\u00a0Well, this\u00a0is one of the examples from my project I like (I wrote this so I like it, pretty obvious):<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" src=\"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png\" alt=\"\" width=\"1309\" height=\"385\" class=\"alignnone size-full wp-image-71\" srcset=\"https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png 1309w, https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441-300x88.png 300w, https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441-768x226.png 768w, https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441-1024x301.png 1024w, https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441-1200x353.png 1200w\" sizes=\"(max-width: 709px) 85vw, (max-width: 909px) 67vw, (max-width: 1362px) 62vw, 840px\" \/><\/p>\n<p>Look, this commit includes:<\/p>\n<ul>\n<li>the issue number\u00a0(so that another developer could go and see the business requirements behind the change),<\/p>\n<\/li>\n<li>\n<p>the short description of the change (which is usual),<\/p>\n<\/li>\n<li>\n<p>and the longer\u00a0text\u00a0that explains\u00a0the commit.<\/p>\n<\/li>\n<\/ul>\n<p><mark>The last part is exactly where you put your code knowledge.<\/mark> Answer <em>why<\/em> you did the changes. Explain the background that could be unclear to another developer in the half of the year. Document the limitations that your solution has and the issues it creates (if any). Include everything else that you consider significant.<\/p>\n<p>Follow to <a href=\"https:\/\/robots.thoughtbot.com\/5-useful-tips-for-a-better-commit-message\">this Caleb Thompson\u2019s article<\/a> if you want to read more about good commit messages (especially, take a look at point 4). Also, kudos to <a href=\"https:\/\/twitter.com\/listochkin\">Andrey Listochkin<\/a> for\u00a0giving the advice about this in one of his talks.<\/p>\n<h2 id=\"processes\">Processes<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#processes\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h2>\n<p><strong>If you\u2019re a team lead,<\/strong> and\u00a0you realize that you have this problem\u00a0in your team, you can use your power to\u00a0change this:<\/p>\n<ol>\n<li>Find what modules are exclusively owned by someone.<\/li>\n<li>Find what tasks\u00a0you can give to other team members so that they get experience with these modules.<\/li>\n<li>Ask the module owner to\u00a0introduce developers that will work with the tasks into the module code.<\/li>\n<\/ol>\n<p><strong>If you\u2019re a regular developer,<\/strong> and you realize your team has this problem, talk with your team lead. Feel free to show them this article.<\/p>\n<p>Also, this should be solved by introducing mandatory code review or pair programming, though we haven\u2019t practiced this ourselves.<\/p>\n<p><mark class=\"bordered-highlight\">Docs, commit messages, processes<\/mark><\/p>\n<h1 id=\"%e2%88%91\">\u2211<a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#%e2%88%91\" class=\"heading-link\" aria-label=\"Link to this section\" title=\"Link to this section\">#<\/a><\/h1>\n<p><mark>So, well, the checklist:<\/mark><\/p>\n<ul>\n<li>Write self-documenting code<\/p>\n<\/li>\n<li>\n<p>Use comments when it\u2019s necessary<\/p>\n<\/li>\n<li>\n<p>Write good commit messages\u00a0answering <em>\u201cwhy\u201d<\/em>, not only <em>\u201cwhat\u201d<\/em><\/p>\n<\/li>\n<li>\n<p>Involve other team members\u00a0into working with\u00a0the code<\/p>\n<\/li>\n<\/ul>\n<p><em>Follow me on Twitter: <a href=\"https:\/\/twitter.com\/iamakulov\">@iamakulov<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>In December 2016, a front-end developer left\u00a0a\u00a0team where\u00a0I work. Apart from other changes, this created an issue. When he was working, the project had a couple of complex modules we were developing with him together. When he left, I realized that only I am able to work with them \u2013 other two team members knew &hellip; <a href=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/\" class=\"more-link\">Continue reading<span class=\"screen-reader-text\"> &#8220;Exclusive code ownership (why it\u2019s bad and what to do with it)&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v23.5 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Exclusive code ownership (why it\u2019s bad and what to do with it) - Ivan Akulov\u2019s blog<\/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:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Exclusive code ownership (why it\u2019s bad and what to do with it) - Ivan Akulov\u2019s blog\" \/>\n<meta property=\"og:description\" content=\"In December 2016, a front-end developer left\u00a0a\u00a0team where\u00a0I work. Apart from other changes, this created an issue. When he was working, the project had a couple of complex modules we were developing with him together. When he left, I realized that only I am able to work with them \u2013 other two team members knew &hellip; Continue reading &quot;Exclusive code ownership (why it\u2019s bad and what to do with it)&quot;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/\" \/>\n<meta property=\"og:site_name\" content=\"Ivan Akulov\u2019s blog\" \/>\n<meta property=\"article:publisher\" content=\"http:\/\/facebook.com\/iamakulov.page\" \/>\n<meta property=\"article:published_time\" content=\"2017-01-20T19:32:49+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2017-05-06T01:23:56+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/05\/chrome_2017-01-20_21-27-591.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1080\" \/>\n\t<meta property=\"og:image:height\" content=\"625\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Ivan Akulov\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@iamakulov\" \/>\n<meta name=\"twitter:site\" content=\"@iamakulov\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Ivan Akulov\" \/>\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:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/\",\"url\":\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/\",\"name\":\"Exclusive code ownership (why it\u2019s bad and what to do with it) - Ivan Akulov\u2019s blog\",\"isPartOf\":{\"@id\":\"https:\/\/iamakulov.com\/notes\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#primaryimage\"},\"thumbnailUrl\":\"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png\",\"datePublished\":\"2017-01-20T19:32:49+00:00\",\"dateModified\":\"2017-05-06T01:23:56+00:00\",\"author\":{\"@id\":\"https:\/\/iamakulov.com\/notes\/#\/schema\/person\/ebf7b61bf573e7be5fe438f50ebd9b81\"},\"breadcrumb\":{\"@id\":\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#primaryimage\",\"url\":\"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png\",\"contentUrl\":\"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/iamakulov.com\/notes\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Exclusive code ownership (why it\u2019s bad and what to do with it)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/iamakulov.com\/notes\/#website\",\"url\":\"https:\/\/iamakulov.com\/notes\/\",\"name\":\"Ivan Akulov\u2019s blog\",\"description\":\"Ivan Akulov writes about his front-end experience, React, webpack, and performance optimizations.\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/iamakulov.com\/notes\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/iamakulov.com\/notes\/#\/schema\/person\/ebf7b61bf573e7be5fe438f50ebd9b81\",\"name\":\"Ivan Akulov\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/iamakulov.com\/notes\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/f68e4cd477cef1577c339e6f09736d3a?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/f68e4cd477cef1577c339e6f09736d3a?s=96&d=mm&r=g\",\"caption\":\"Ivan Akulov\"},\"description\":\"I'm a software engineer specializing in web performance, JavaScript, and React. I\u2019m also a Google Developer Expert. I work at Framer.\",\"sameAs\":[\"http:\/\/iamakulov.com\",\"https:\/\/x.com\/iamakulov\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Exclusive code ownership (why it\u2019s bad and what to do with it) - Ivan Akulov\u2019s blog","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:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/","og_locale":"en_US","og_type":"article","og_title":"Exclusive code ownership (why it\u2019s bad and what to do with it) - Ivan Akulov\u2019s blog","og_description":"In December 2016, a front-end developer left\u00a0a\u00a0team where\u00a0I work. Apart from other changes, this created an issue. When he was working, the project had a couple of complex modules we were developing with him together. When he left, I realized that only I am able to work with them \u2013 other two team members knew &hellip; Continue reading \"Exclusive code ownership (why it\u2019s bad and what to do with it)\"","og_url":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/","og_site_name":"Ivan Akulov\u2019s blog","article_publisher":"http:\/\/facebook.com\/iamakulov.page","article_published_time":"2017-01-20T19:32:49+00:00","article_modified_time":"2017-05-06T01:23:56+00:00","og_image":[{"width":1080,"height":625,"url":"https:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/05\/chrome_2017-01-20_21-27-591.png","type":"image\/png"}],"author":"Ivan Akulov","twitter_card":"summary_large_image","twitter_creator":"@iamakulov","twitter_site":"@iamakulov","twitter_misc":{"Written by":"Ivan Akulov","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/","url":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/","name":"Exclusive code ownership (why it\u2019s bad and what to do with it) - Ivan Akulov\u2019s blog","isPartOf":{"@id":"https:\/\/iamakulov.com\/notes\/#website"},"primaryImageOfPage":{"@id":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#primaryimage"},"image":{"@id":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#primaryimage"},"thumbnailUrl":"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png","datePublished":"2017-01-20T19:32:49+00:00","dateModified":"2017-05-06T01:23:56+00:00","author":{"@id":"https:\/\/iamakulov.com\/notes\/#\/schema\/person\/ebf7b61bf573e7be5fe438f50ebd9b81"},"breadcrumb":{"@id":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#primaryimage","url":"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png","contentUrl":"http:\/\/iamakulov.com\/notes2\/wp-content\/uploads\/2017\/01\/ApplicationFrameHost_2017-01-20_18-56-441.png"},{"@type":"BreadcrumbList","@id":"https:\/\/iamakulov.com\/notes\/exclusive-code-ownership\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/iamakulov.com\/notes\/"},{"@type":"ListItem","position":2,"name":"Exclusive code ownership (why it\u2019s bad and what to do with it)"}]},{"@type":"WebSite","@id":"https:\/\/iamakulov.com\/notes\/#website","url":"https:\/\/iamakulov.com\/notes\/","name":"Ivan Akulov\u2019s blog","description":"Ivan Akulov writes about his front-end experience, React, webpack, and performance optimizations.","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/iamakulov.com\/notes\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/iamakulov.com\/notes\/#\/schema\/person\/ebf7b61bf573e7be5fe438f50ebd9b81","name":"Ivan Akulov","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/iamakulov.com\/notes\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/f68e4cd477cef1577c339e6f09736d3a?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/f68e4cd477cef1577c339e6f09736d3a?s=96&d=mm&r=g","caption":"Ivan Akulov"},"description":"I'm a software engineer specializing in web performance, JavaScript, and React. I\u2019m also a Google Developer Expert. I work at Framer.","sameAs":["http:\/\/iamakulov.com","https:\/\/x.com\/iamakulov"]}]}},"jetpack_featured_media_url":"","_links":{"self":[{"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/posts\/65"}],"collection":[{"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/comments?post=65"}],"version-history":[{"count":5,"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/posts\/65\/revisions"}],"predecessor-version":[{"id":70,"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/posts\/65\/revisions\/70"}],"wp:attachment":[{"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/media?parent=65"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/categories?post=65"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/iamakulov.com\/notes\/wp-json\/wp\/v2\/tags?post=65"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}