{"id":915,"date":"2010-06-07T09:12:48","date_gmt":"2010-06-07T16:12:48","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=915"},"modified":"2018-04-13T12:21:00","modified_gmt":"2018-04-13T16:21:00","slug":"simple-branching-strategy-part-2-implementation","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/simple-branching-strategy-part-2-implementation\/","title":{"rendered":"Simple Branching Strategy Part 2: Implementation"},"content":{"rendered":"<p>In my <a href=\"https:\/\/simpleprogrammer.com\/2010\/06\/04\/simple-branching-strategy-part-1-back-to-basics\/\">previous post<\/a>, I talked about the idea of having a simple branching strategy and why I prefer one where everyone works off the same branch.\\n\\nIn this post I will show you how to create what I believe is the most simple and effective branching strategy.\\n\\nTake a look at this diagram of a sample project\u2019s code lines:\\n\\n<a href=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png\"><img loading=\"lazy\" decoding=\"async\" style=\"display: inline; border: 0px;\" title=\"SimpleBranch\" alt=\"branching strategy\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch_thumb.png\" width=\"511\" height=\"279\" border=\"0\" \/><\/a>\\n\\n<\/p>\n<h2>Walking through it<\/h2>\n<p>\\n\\nThe idea here is very simple.\u00a0 Let&#8217;s walk through a development cycle together:\\n\\n<\/p>\n<ol>\\n    <\/p>\n<li>Development starts.\u00a0 Everyone works off of trunk.\u00a0 Code is frequently checked into trunk, many developers checking in code 3-4 times a day, as they complete small quality sections of development.<\/li>\n<p>\\n    <\/p>\n<li>The continuous build server is continuously building and checking the quality of the code every single time code is checked in.\u00a0 Any integration problems are immediately fixed.<\/li>\n<p>\\n    <\/p>\n<li>Enough features are done to create a release.\u00a0 Trunk is tagged for release and a release 1 branch is created representing the currently release production code.<\/li>\n<p>\\n    <\/p>\n<li>Developers continue to work on trunk not being interrupted by the release.<\/li>\n<p>\\n    <\/p>\n<li>A customer finds a high priority issue in Release 1.<\/li>\n<p>\\n    <\/p>\n<li>A Rel 1 Hot Fix branch is created, branched off of Release 1 to fix the high priority issue.\u00a0 It turns out that a good fix will take some time.\u00a0 Team decides the best course of action is to apply a temporary fix for now.<\/li>\n<p>\\n    <\/p>\n<li>Rel 1 Hot Fix is done and merged back into Release 1 branch.\u00a0 Release 1 is re-deployed to production.<\/li>\n<p>\\n    <\/p>\n<li>In the meantime another emergency problem shows up that must be fixed before the next release.\u00a0 Rel 1 Hot Fix 2 branch is created.<\/li>\n<p>\\n    <\/p>\n<li>The bug fix for Rel 1 Hot Fix 2 is a good fix which we want in all future releases.\u00a0 Rel 1 Hot Fix 2 branch is merged back to Release 1 branch, and merged back to trunk.\u00a0 Release 1 is redeployed.<\/li>\n<p>\\n    <\/p>\n<li>In the meantime work has been going on on trunk, team is ready for Release 2.<\/li>\n<p>\\n    <\/p>\n<li>Release 2 branch is created\u2026<\/li>\n<p>\\n<\/ol>\n<p>\\n\\n<\/p>\n<h2>Breaking it down<\/h2>\n<p>\\n\\nI gave a pretty detailed walk-through for a very simple set of actual steps.\u00a0 But, I hope you can see how simple this process really is.\\n\\nThe basic idea here is that we are trying to decouple releases from development as much as possible.\u00a0 The team is always going to keep chugging along, building new features and enhancing the code base.\u00a0 When we decide we have enough features for a release, we simply branch off of trunk and create the release branch.\\n\\nWe can even do some testing on the release branch before we go to production if we need to without impacting future development.\\n\\nThe release branch code-lines never come back to trunk.\u00a0 They don\u2019t need to, they only exist so that we can have the exact production code and make modifications to it as hot-fixes if we need to.\\n\\nWe branch hot-fixes off of the release branch so that we can work on them independently, because not all hot-fixes go back to the main code-line.\u00a0 We can make a hot-fix just for the current release, or we can merge it back to trunk to make it a permanent fix.\\n\\nThat is all there is to it.\u00a0 This kind of branching strategy almost completely eliminates merges.\u00a0 The only merge you ever do is small merges for hot-fixes.\\n\\nYour branching strategy does not have to be complicated.\u00a0 A simple strategy like this can fit almost any software development shop.\\n\\n<\/p>\n<h2>Frequently disputed points<\/h2>\n<p>\\n\\nAlmost immediately when I introduce this simple system someone says:\\n\\n<strong>What about half-completed features?\u00a0 I don\u2019t want to release half-completed features.\u00a0 Using this strategy with everyone working off trunk, you will always have half-completed features.<\/strong>\\n\\nSo what?\u00a0 How many times does a half-completed feature cause a potential problem in the system?\u00a0 If the code is quality and incrementally developed, it should not impact the rest of the system.\u00a0 If you are adding a new feature, usually the last thing you do is actually hook-up the UI to it.\u00a0 It won\u2019t hurt anything to have its back-end code released without any way to get to it.\\n\\nContinuous integration, (especially running automated functional tests), trains you to always keep the system releasable with every commit of new code.\u00a0 It really isn\u2019t hard to do this, you just have to think about it a little bit.\\n\\nIf worse comes to worst and you have a half-finished feature that makes the code releasable, you can always pull out that code on the release branch.\u00a0 (Although I would highly recommend that you try and find a way to build the feature incrementally instead.)\\n\\nIf you know you&#8217;re going to do something that will disrupt everything, like redesigning the UI, or drastically changing the architecture, then go ahead and create a separate branch for that work.\u00a0 That should be a rare event though.\\n\\n<strong>I need to be able to develop the features in isolation.\u00a0 If everyone is working off of trunk, I can\u2019t tell if what I did broke something or if it is someone else\u2019s code.\u00a0 I am impacted by someone else breaking things.<\/strong>\\n\\nGood, that is some pain you should feel.\u00a0 It hurts a lot less when you&#8217;re continuously integrating vs. working on something for a week, merging your feature and finding that everything is broken.\\n\\nIt is like eating a meal.\u00a0 All the food is going to end up in the same place anyway.\u00a0 Don\u2019t worry about mixing your mashed potatoes with your applesauce.\\n\\nIf something someone else is doing is going to break your stuff, <strong>better to fail fast<\/strong>, then to fail later.\u00a0 Let\u2019s integrate as soon as possible and fix the issue rather than waiting until we both think we are done.\\n\\nBesides that, it is good to learn to always check in clean code.\u00a0 When you break other people and they shoot you with Nerf guns and make you wear a chicken head, you are taught to test your code locally before you check it in.\\n\\n<\/p>\n<h2>How to be successful<\/h2>\n<p>\\n\\nHow can you be successful at this simple strategy?\\n\\n<\/p>\n<ul>\\n    <\/p>\n<li>Make sure you have a continuous integration server up and running and <a href=\"https:\/\/simpleprogrammer.com\/2009\/12\/30\/continuous-integration-best-practices\/\">doing everything it should be doing<\/a>.<\/li>\n<p>\\n    <\/p>\n<li>When you work on code, find ways to break it up into small incremental steps of development which never break the system.\u00a0 Hook up the UI last.<\/li>\n<p>\\n    <\/p>\n<li>Always think that every time you check in code, it should be code you are comfortable to release.<\/li>\n<p>\\n    <\/p>\n<li>Check in code at least once a day, preferably as soon as you make any incremental progress.<\/li>\n<p>\\n    <\/p>\n<li>Test, test, test.\u00a0 Test locally, unit test, test driven development, automated functional tests.\u00a0 Have ways to be confident the system never moves backward in functionality.<\/li>\n<p>\\n    <\/p>\n<li>So important I\u2019ll say it twice.\u00a0 Automated functional tests.\u00a0 If you don\u2019t know how to do this, <a href=\"https:\/\/simpleprogrammer.com\/2010\/01\/05\/automated-ui-testing-framework-a-real-example\/\">read this<\/a>.<\/li>\n<p>\\n    <\/p>\n<li>Release frequently instead of hot-fixing.\u00a0 If you never hot-fix you will never have to merge.\u00a0 If you never have to merge, you will live a longer, less-stressed life.<\/li>\n<p>\\n    <\/p>\n<li>Don\u2019t go back and clean up code later.\u00a0 Write it right the first time.\u00a0 Check it in right the first time.<\/li>\n<p>\\n<\/ul>\n<p>\\n\\nHopefully that helps you to simplify your branching process.\u00a0 Feel free to email me or post here if you have any questions, or are skeptical that this could work.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>In my previous post, I talked about the idea of having a simple branching strategy and why I prefer one where everyone works off the same branch.\\n\\nIn this post I will show you how to create what I believe is the most simple and effective branching strategy.\\n\\nTake a look at this diagram of a sample&#8230;<\/p>\n","protected":false},"author":2,"featured_media":913,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"_kad_post_classname":"","footnotes":""},"categories":[2185,163615,32,31679,53511,1981],"tags":[],"class_list":["post-915","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices","category-continuous-integration","category-infrastructure","category-process-improvement","category-source-control","category-tools"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Simple Branching Strategy Part 2: Implementation<\/title>\n<meta name=\"description\" content=\"Part 2 of an explanation on why developers should work off the same branch. Includes step-by-step instructions on how to implement this branching strategy.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/simpleprogrammer.com\/products\/careerguide\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Simple Branching Strategy Part 2: Implementation\" \/>\n<meta property=\"og:description\" content=\"Part 2 of an explanation on why developers should work off the same branch. Includes step-by-step instructions on how to implement this branching strategy.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/products\/careerguide\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2010-06-07T16:12:48+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2018-04-13T16:21:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png\" \/>\n\t<meta property=\"og:image:width\" content=\"640\" \/>\n\t<meta property=\"og:image:height\" content=\"348\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"John Sonmez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"John Sonmez\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"6 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simple-branching-strategy-part-2-implementation\\\/\"},\"author\":{\"name\":\"John Sonmez\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\"},\"headline\":\"Simple Branching Strategy Part 2: Implementation\",\"datePublished\":\"2010-06-07T16:12:48+00:00\",\"dateModified\":\"2018-04-13T16:21:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simple-branching-strategy-part-2-implementation\\\/\"},\"wordCount\":1265,\"commentCount\":10,\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/06\\\/simplebranch.png\",\"articleSection\":[\"Best Practices\",\"Continuous Integration\",\"Infrastructure\",\"Process Improvement\",\"Source Control\",\"Tools\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/simple-branching-strategy-part-2-implementation\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide\",\"name\":\"Simple Branching Strategy Part 2: Implementation\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/06\\\/simplebranch.png\",\"datePublished\":\"2010-06-07T16:12:48+00:00\",\"dateModified\":\"2018-04-13T16:21:00+00:00\",\"author\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\"},\"description\":\"Part 2 of an explanation on why developers should work off the same branch. Includes step-by-step instructions on how to implement this branching strategy.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#primaryimage\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/06\\\/simplebranch.png\",\"contentUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2010\\\/06\\\/simplebranch.png\",\"width\":640,\"height\":348},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/products\\\/careerguide#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Simple Branching Strategy Part 2: Implementation\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/\",\"name\":\"Simple Programmer\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/simpleprogrammer.com\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#\\\/schema\\\/person\\\/1abc70edfb189184827740310672de67\",\"name\":\"John Sonmez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"url\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"contentUrl\":\"https:\\\/\\\/secure.gravatar.com\\\/avatar\\\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g\",\"caption\":\"John Sonmez\"},\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/jsonmez\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Simple Branching Strategy Part 2: Implementation","description":"Part 2 of an explanation on why developers should work off the same branch. Includes step-by-step instructions on how to implement this branching strategy.","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:\/\/simpleprogrammer.com\/products\/careerguide","og_locale":"en_US","og_type":"article","og_title":"Simple Branching Strategy Part 2: Implementation","og_description":"Part 2 of an explanation on why developers should work off the same branch. Includes step-by-step instructions on how to implement this branching strategy.","og_url":"https:\/\/simpleprogrammer.com\/products\/careerguide","og_site_name":"Simple Programmer","article_published_time":"2010-06-07T16:12:48+00:00","article_modified_time":"2018-04-13T16:21:00+00:00","og_image":[{"width":640,"height":348,"url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png","type":"image\/png"}],"author":"John Sonmez","twitter_card":"summary_large_image","twitter_misc":{"Written by":"John Sonmez","Est. reading time":"6 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/simple-branching-strategy-part-2-implementation\/"},"author":{"name":"John Sonmez","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67"},"headline":"Simple Branching Strategy Part 2: Implementation","datePublished":"2010-06-07T16:12:48+00:00","dateModified":"2018-04-13T16:21:00+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/simple-branching-strategy-part-2-implementation\/"},"wordCount":1265,"commentCount":10,"image":{"@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png","articleSection":["Best Practices","Continuous Integration","Infrastructure","Process Improvement","Source Control","Tools"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/products\/careerguide#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/simple-branching-strategy-part-2-implementation\/","url":"https:\/\/simpleprogrammer.com\/products\/careerguide","name":"Simple Branching Strategy Part 2: Implementation","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#primaryimage"},"image":{"@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png","datePublished":"2010-06-07T16:12:48+00:00","dateModified":"2018-04-13T16:21:00+00:00","author":{"@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67"},"description":"Part 2 of an explanation on why developers should work off the same branch. Includes step-by-step instructions on how to implement this branching strategy.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/products\/careerguide"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#primaryimage","url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png","contentUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2010\/06\/simplebranch.png","width":640,"height":348},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/products\/careerguide#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"Simple Branching Strategy Part 2: Implementation"}]},{"@type":"WebSite","@id":"https:\/\/simpleprogrammer.com\/#website","url":"https:\/\/simpleprogrammer.com\/","name":"Simple Programmer","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/simpleprogrammer.com\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/simpleprogrammer.com\/#\/schema\/person\/1abc70edfb189184827740310672de67","name":"John Sonmez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","url":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/dc2f18dfa76e017566ce607de002d7abe4acfd5ec19a6db82c180b00867b8d94?s=96&d=mm&r=g","caption":"John Sonmez"},"url":"https:\/\/simpleprogrammer.com\/author\/jsonmez\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/915","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=915"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/915\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media\/913"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=915"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=915"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=915"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}