{"id":3856,"date":"2026-06-15T13:31:35","date_gmt":"2026-06-15T13:31:35","guid":{"rendered":"https:\/\/www.infobip.com\/developers\/?p=3856"},"modified":"2026-06-15T13:32:10","modified_gmt":"2026-06-15T13:32:10","slug":"the-artificial-frontend-backend-boundary-we-keep-making-up","status":"publish","type":"post","link":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up","title":{"rendered":"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">The line between frontend and backend&nbsp;isn&#8217;t&nbsp;a technical boundary.&nbsp;It&#8217;s&nbsp;a social one.&nbsp;It&#8217;s&nbsp;a reflection of what people feel comfortable with, echoed in software. And once&nbsp;it&#8217;s&nbsp;on the Jira board, it starts shaping how the feature gets built: two people, two contexts, one interface neither of them fully owns.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This post is about why that split is worth resisting, and how thinking about it differently leads to better software.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How it usually goes down<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We&#8217;re&nbsp;on our regular sprint planning, we realize what needs to be done for the next sprint, so we move existing tasks into the sprint&nbsp;and create new ones as&nbsp;needed;&nbsp;all the usual practices.&nbsp;But&nbsp;time and again&nbsp;I see the same things happening, separate frontend and backend tasks prefixed with &#8220;[FE]&#8221; and &#8220;[BE]&#8221; respectively. This has become a real tradition in our planning&nbsp;process;&nbsp;we do it because&nbsp;we&#8217;ve&nbsp;always done it. Someone sees an opportunity to split another task, so they do it,&nbsp;almost instinctively, and nobody asks questions, because the split is already so ingrained into the process.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I see&nbsp;a lot of&nbsp;developers think like this. They see this large boundary, so large it makes them think the only way forward is splitting the task by that boundary. And as a&nbsp;bonus&nbsp;it scratches our &#8220;breaking down&nbsp;a&nbsp;big task into smaller&nbsp;ones&#8221; itch, which is always&nbsp;a&nbsp;good&nbsp;call. Well except here. This boundary is entirely&nbsp;artificial.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Real reasons behind the boundaries<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">We keep making up this artificial boundary in our systems, because it is&nbsp;actually real, except it lies in another area,&nbsp;people&#8217;s&nbsp;familiarity&nbsp;and preference for either frontend or backend.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Engineers who are equally comfortable on both sides are uncommon.&nbsp;Most prefer one side of the stack, so we tend to make separate tasks so everyone can work on&nbsp;whatever&nbsp;they&nbsp;are&nbsp;most familiar with.&nbsp;It&#8217;s&nbsp;only&nbsp;natural&nbsp;to want to&nbsp;avoid&nbsp;the psychological barrier&nbsp;of dealing with something&nbsp;you\u2019re&nbsp;not 100% accustomed&nbsp;to.&nbsp;It\u2019s&nbsp;also normal&nbsp;to&nbsp;strive to&nbsp;reduce&nbsp;your company\u2019s&nbsp;development time&nbsp;and thus cost&nbsp;by doing something&nbsp;you\u2019re&nbsp;fast and good at.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Organizing around people&#8217;s comfort zones is fine. Letting it reshape your architecture is where things go wrong.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>How the split&nbsp;leads to tech debt<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Transferring this boundary from&nbsp;people&nbsp;into our systems creates a variety of problems.&nbsp;For example, as one person gets a task to create an internal API endpoint for retrieving some data and another person&nbsp;must&nbsp;consume this endpoint on the frontend, whatever kind of endpoint was created,&nbsp;it&#8217;ll&nbsp;be called by the frontend. &#8220;This API was provided to me, so I&#8217;m using it&#8221;&nbsp;the dev thinks&nbsp;&#8211; except it&nbsp;wasn&#8217;t&nbsp;provided, we ourselves created it. Effectively the important process of iterating on an idea or feature disappears.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Generally speaking, the&nbsp;whole feature&nbsp;implementation has a high likelihood of being sloppy, buggy, non-performant and&nbsp;<strong>starts right off as tech debt<\/strong>.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>A call is a call<\/strong>&nbsp;<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At&nbsp;Infobip,&nbsp;with our microservice architecture, we have similar &#8220;fake&#8221; boundaries between each service. In fact, these boundaries are identical, apart from the protocol used &#8211; HTTP or remote procedure calls (RPC).&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"883\" height=\"487\" src=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/image-5.png\" alt=\"\" class=\"wp-image-3859\" srcset=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/image-5.png 883w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/image-5-300x165.png 300w, https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/image-5-768x424.png 768w\" sizes=\"auto, (max-width: 883px) 100vw, 883px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The fact that the call passes over the network, instead of being a plain Java, Kotlin, C#, Python,&nbsp;etc. call,&nbsp;shouldn&#8217;t&nbsp;mean anything to us*.&nbsp;When it comes to backend work, we&nbsp;don\u2019t&nbsp;see these boundaries,&nbsp;and by&nbsp;equating them with the&nbsp;frontend-backend boundary&nbsp;we get to the realization that the frontend-backend split is indeed artificial.&nbsp;<\/p>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">*<em>Of course, sometimes we need to add caching or bulk methods, but&nbsp;that&#8217;s&nbsp;beside the point.<\/em>&nbsp;<\/p>\n<\/blockquote>\n\n\n\n<p class=\"wp-block-paragraph\">My advice would be to strongly avoid splitting feature tasks by layer.&nbsp;A single person should own a feature end-to-end, from the database to the UI, because only then can they see the full picture, catch problems in the approach early, and build a coherent mental model of how everything fits together. As John Whiles writes in&nbsp;<a href=\"https:\/\/johnwhiles.com\/posts\/programming-as-theory\" target=\"_blank\" rel=\"noreferrer noopener\"><em>Suddenly, I Understand Software<\/em><\/a>, that kind of deep, complete understanding is what separates someone who implemented a feature from someone who truly&nbsp;<em>gets<\/em>&nbsp;it.&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>Conclusion<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The frontend-backend split feels obvious, but&nbsp;it\u2019s&nbsp;a trap that leads straight to tech debt when we&nbsp;let it shape&nbsp;our development process.&nbsp;It\u2019s&nbsp;a social boundary, not a technical one,&nbsp;so we should&nbsp;bridge&nbsp;it&nbsp;and let&nbsp;people&nbsp;develop&nbsp;a&nbsp;full&nbsp;understanding&nbsp;of&nbsp;a&nbsp;feature&nbsp;before&nbsp;iterating&nbsp;on&nbsp;it.&nbsp;<\/p>\n","protected":false},"excerpt":{"rendered":"<p>The line between frontend and backend&nbsp;isn&#8217;t&nbsp;a technical boundary.&nbsp;It&#8217;s&nbsp;a social [&hellip;]<\/p>\n","protected":false},"author":85,"featured_media":3861,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[28,254],"tags":[146],"coauthors":[324],"class_list":["post-3856","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","category-engineering-practices","tag-development"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0 - Infobip Developers Hub<\/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:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0 - Infobip Developers Hub\" \/>\n<meta property=\"og:description\" content=\"The line between frontend and backend&nbsp;isn&#8217;t&nbsp;a technical boundary.&nbsp;It&#8217;s&nbsp;a social [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\" \/>\n<meta property=\"og:site_name\" content=\"Infobip Developers Hub\" \/>\n<meta property=\"article:publisher\" content=\"https:\/\/www.facebook.com\/infobip\/\" \/>\n<meta property=\"article:published_time\" content=\"2026-06-15T13:31:35+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2026-06-15T13:32:10+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1600\" \/>\n\t<meta property=\"og:image:height\" content=\"912\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"Karlo Bistricki\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:site\" content=\"@InfobipDev\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Karlo Bistricki\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"4 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\"},\"author\":{\"name\":\"Karlo Bistricki\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/98215a1f8a3d685e391510b7f1111896\"},\"headline\":\"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0\",\"datePublished\":\"2026-06-15T13:31:35+00:00\",\"dateModified\":\"2026-06-15T13:32:10+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\"},\"wordCount\":873,\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png\",\"keywords\":[\"development\"],\"articleSection\":[\"Blog Post\",\"Engineering Practices\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\",\"name\":\"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0 - Infobip Developers Hub\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png\",\"datePublished\":\"2026-06-15T13:31:35+00:00\",\"dateModified\":\"2026-06-15T13:32:10+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png\",\"width\":1600,\"height\":912,\"caption\":\"The Artificial Frontend-Backend Boundary We Keep Making Up\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.infobip.com\/developers\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\",\"url\":\"https:\/\/www.infobip.com\/developers\/\",\"name\":\"Infobip Developers Hub\",\"description\":\"Build meaningful customer relationships across any channel\",\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.infobip.com\/developers\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\",\"name\":\"Infobip Developers Hub\",\"url\":\"https:\/\/www.infobip.com\/developers\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png\",\"width\":696,\"height\":696,\"caption\":\"Infobip Developers Hub\"},\"image\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/www.facebook.com\/infobip\/\",\"https:\/\/x.com\/InfobipDev\",\"https:\/\/www.youtube.com\/channel\/UCUPSTy53VecI5GIir3J3ZbQ\",\"https:\/\/github.com\/infobip-community\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/98215a1f8a3d685e391510b7f1111896\",\"name\":\"Karlo Bistricki\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/f1cb04d11d81c41e9738a35b44d1a13c\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/c8943d4f959a57972e651e8e08579c82add0102d89f09756a5f3f83cba78abed?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/c8943d4f959a57972e651e8e08579c82add0102d89f09756a5f3f83cba78abed?s=96&d=mm&r=g\",\"caption\":\"Karlo Bistricki\"},\"description\":\"Karlo is a Junior Software Engineer at Infobip, working in the AgentOS team, who loves everything frontend related. Yes, even CSS.\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/author\/karlobistricki\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0 - Infobip Developers Hub","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:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up","og_locale":"en_US","og_type":"article","og_title":"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0 - Infobip Developers Hub","og_description":"The line between frontend and backend&nbsp;isn&#8217;t&nbsp;a technical boundary.&nbsp;It&#8217;s&nbsp;a social [&hellip;]","og_url":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up","og_site_name":"Infobip Developers Hub","article_publisher":"https:\/\/www.facebook.com\/infobip\/","article_published_time":"2026-06-15T13:31:35+00:00","article_modified_time":"2026-06-15T13:32:10+00:00","og_image":[{"width":1600,"height":912,"url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png","type":"image\/png"}],"author":"Karlo Bistricki","twitter_card":"summary_large_image","twitter_creator":"@InfobipDev","twitter_site":"@InfobipDev","twitter_misc":{"Written by":"Karlo Bistricki","Est. reading time":"4 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#article","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up"},"author":{"name":"Karlo Bistricki","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/98215a1f8a3d685e391510b7f1111896"},"headline":"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0","datePublished":"2026-06-15T13:31:35+00:00","dateModified":"2026-06-15T13:32:10+00:00","mainEntityOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up"},"wordCount":873,"publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png","keywords":["development"],"articleSection":["Blog Post","Engineering Practices"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up","url":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up","name":"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0 - Infobip Developers Hub","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png","datePublished":"2026-06-15T13:31:35+00:00","dateModified":"2026-06-15T13:32:10+00:00","breadcrumb":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#primaryimage","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2026\/06\/The-Artificial-Frontend-Backend-Boundary-We-Keep-Making-Up.png","width":1600,"height":912,"caption":"The Artificial Frontend-Backend Boundary We Keep Making Up"},{"@type":"BreadcrumbList","@id":"https:\/\/www.infobip.com\/developers\/blog\/the-artificial-frontend-backend-boundary-we-keep-making-up#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.infobip.com\/developers\/"},{"@type":"ListItem","position":2,"name":"The Artificial Frontend-Backend Boundary We Keep Making Up\u00a0"}]},{"@type":"WebSite","@id":"https:\/\/www.infobip.com\/developers\/#website","url":"https:\/\/www.infobip.com\/developers\/","name":"Infobip Developers Hub","description":"Build meaningful customer relationships across any channel","publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.infobip.com\/developers\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.infobip.com\/developers\/#organization","name":"Infobip Developers Hub","url":"https:\/\/www.infobip.com\/developers\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/03\/Infobip_logo_favicon.png","width":696,"height":696,"caption":"Infobip Developers Hub"},"image":{"@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/www.facebook.com\/infobip\/","https:\/\/x.com\/InfobipDev","https:\/\/www.youtube.com\/channel\/UCUPSTy53VecI5GIir3J3ZbQ","https:\/\/github.com\/infobip-community"]},{"@type":"Person","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/98215a1f8a3d685e391510b7f1111896","name":"Karlo Bistricki","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/f1cb04d11d81c41e9738a35b44d1a13c","url":"https:\/\/secure.gravatar.com\/avatar\/c8943d4f959a57972e651e8e08579c82add0102d89f09756a5f3f83cba78abed?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/c8943d4f959a57972e651e8e08579c82add0102d89f09756a5f3f83cba78abed?s=96&d=mm&r=g","caption":"Karlo Bistricki"},"description":"Karlo is a Junior Software Engineer at Infobip, working in the AgentOS team, who loves everything frontend related. Yes, even CSS.","url":"https:\/\/www.infobip.com\/developers\/blog\/author\/karlobistricki"}]}},"_links":{"self":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3856","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/users\/85"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/comments?post=3856"}],"version-history":[{"count":3,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3856\/revisions"}],"predecessor-version":[{"id":3860,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/3856\/revisions\/3860"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media\/3861"}],"wp:attachment":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media?parent=3856"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/categories?post=3856"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/tags?post=3856"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/coauthors?post=3856"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}