{"id":2290,"date":"2023-06-14T10:26:32","date_gmt":"2023-06-14T10:26:32","guid":{"rendered":"https:\/\/www.infobip.com\/developers\/?p=2290"},"modified":"2023-09-11T14:28:44","modified_gmt":"2023-09-11T14:28:44","slug":"still-talking-to-your-rubber-duck-draw-it-a-diagram-instead","status":"publish","type":"post","link":"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead","title":{"rendered":"Still talking to your rubber duck? Draw it a diagram instead."},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">If you don\u2019t know how to start with the visualization, go back to your roots. And the root of all IT work is&nbsp;<strong>data<\/strong>. We can develop it for different purposes and make complex systems limited only by our imagination, but it is always about taking data from one place, transforming it when needed, and putting it in another place.<strong>&nbsp;Repeat.&nbsp;<\/strong><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So we start with the data flow diagram, or what happened to the data before we saw it on a page.&nbsp;&nbsp;<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">What happens to your data?<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">As a distributed systems engineer, I deal with a chain of services and need to figure out who does what. Systems are big and developed by several teams or even departments, so finding the root of a seemingly simple problem can be pretty complex.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s imagine our client has a balance of $100001 and wants to know where the extra dollar came from. Opening the page with the balance data may make only one backend request for debit and credit numbers \u2013 balance is just the difference between debit and credit numbers. But the devil is always in details. God knows how many services work together to get billing data to that page. And who knows how many services update debit and credit for the balance data?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To understand it,&nbsp;<strong>we can draw a data flow diagram where squares are data processes<\/strong>. Arrows represent the transition of data (and actual data), and squares with numbers are data storage.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/shiftmag.dev\/wp-content\/uploads\/2023\/05\/data_flow-1024x516.png?x54910\" alt=\"\" class=\"wp-image-644\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">You can choose whatever type of diagram you like or make your own rules. You aim to understand what is happening and do what works best for you. But if you share your diagrams, make sure your colleagues understand your style and can easily read it without misinterpreting it.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I prefer a different kind of diagram where squares are actual data and arrows are a process of data.<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/shiftmag.dev\/wp-content\/uploads\/2023\/05\/data_flow_hand-1024x287.png?x54910\" alt=\"\" class=\"wp-image-645\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">This diagram may help you localize some data processes in particular services of your system.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">From data to services<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">We haven\u2019t found our answer yet, but now we understand which data processes our system performs.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The next step is understanding which services or groups of services are responsible for a particular data process. Architecture diagrams can help you with that:<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/shiftmag.dev\/wp-content\/uploads\/2023\/05\/service_architecture-1024x812.png?x54910\" alt=\"\" class=\"wp-image-646\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">In the current example, I made it as simple as possible: squares are services, arrows are interactions between services, and I added extra marks for data processes. This diagram is very simple and suits a lot of cases, and a big bonus is that everybody understands it intuitively.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Drawing an architecture diagram helps us:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Understand which service does what, and see how our data transfers between services in real life.<\/li>\n\n\n\n<li>Localize the problem, so we can check the service separately and try to find the wrong output for test input data.<\/li>\n\n\n\n<li>Understand which data storages are involved in the process, so we can check if the data in data storages is correct.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">At that point checking data in storage showed everything was fine. The balancing service sends correct numbers for debits and credits, but the client still got an incorrect balance. Was something wrong with our API proxy? Let\u2019s dig deeper.<\/p>\n\n\n\n<h1 class=\"wp-block-heading\">Deep dive into the components<\/h1>\n\n\n\n<p class=\"wp-block-paragraph\">Based on the previous investigation of data flow, we now draw how data goes through the component of API proxy services.&nbsp;<\/p>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/shiftmag.dev\/wp-content\/uploads\/2023\/05\/api_proxy-1024x515.png?x54910\" alt=\"\" class=\"wp-image-647\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">According to the schema, no data transformation happens in the service. All the components add new information and work as proxies between a client and backends. So if a client gets the wrong numbers for debit and credit right after our proxy, something must be wrong with the data representation.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This means we have to double-check responses from balance services and what we have after the API proxy. The difference between debit and credit is 100000, and the balance service returns precisely what we need:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{ \n\n\u202f\u202f\u202f\u202fdebit:\u202f9007199254840991, \n\n\u202f\u202f\u202f\u202fcredit:\u202f9007199254740991 \n\n} <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Response from API proxy is.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{ \n\n\u202f\u202f\u202f\u202fdebit:\u202f9007199254840992, \n\n\u202f\u202f\u202f\u202fcredit:\u202f9007199254740991 \n\n} <\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">Responses are different; if we look at the numbers, the API proxy has the wrong debit. After our investigation, we know there is an API proxy issue.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Yet, we also know that it is a NodeJs service. Could our numbers be too big for JS? We have a Long data type which has Long.MAX_VALUE= 9,223,372,036,854,775,807, and JS has Number.MAX_SAFE_INTEGER = 9,007,199,254,740,991.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A debit number is bigger than the Max Integer Js number for 100000, which causes overflow, and as a result, we have the wrong number for debit and the wrong balance, which is bigger for 1$ = 100001.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">9007199254840991 \u2013 9007199254740991 = 100000<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">9007199254840992 \u2013 9007199254740991 = 100001<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">So we sketched out the problem, found the issue, and we could get to work fixing it.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\"><strong>When drawing comes in handy<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This drawing approach isn\u2019t always necessary, and some would argue that it can be a waste of time, but it helps if:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>You are stuck with an issue;<\/li>\n\n\n\n<li>You are new to the product and need to learn about it as quickly as possible.<\/li>\n\n\n\n<li>Interactions and dependencies between services are very confusing and not obvious.<\/li>\n\n\n\n<li>The system is too big.<\/li>\n\n\n\n<li>You share complex information on a call \u2013 it\u2019s better to see something once than to hear it ten times.<\/li>\n\n\n\n<li>You need to explain services\/systems to somebody.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">A cool side effect of visualization is that you&nbsp;<strong>document the system immediately and use all your findings as documentation<\/strong>.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Needless to say, the example used was made up (who in their right mind would use Long for financial information?), but it served our visualization purposes well. That said, if you use NodeJs services with big numbers, keep an eye on them.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><em>*This article was created through the Infobip Advocate program and originally published on <a href=\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/\">ShiftMag.<\/a><\/em><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?<\/p>\n","protected":false},"author":46,"featured_media":2296,"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":[47],"coauthors":[219],"class_list":["post-2290","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-blog-post","category-engineering-practices","tag-data"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v25.6 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Still talking to your rubber duck? Draw it a diagram instead.<\/title>\n<meta name=\"description\" content=\"Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Still talking to your rubber duck? Draw it a diagram instead.\" \/>\n<meta property=\"og:description\" content=\"Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?\" \/>\n<meta property=\"og:url\" content=\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/\" \/>\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=\"2023-06-14T10:26:32+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2023-09-11T14:28:44+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"2560\" \/>\n\t<meta property=\"og:image:height\" content=\"1707\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"author\" content=\"Ivan Makovchik\" \/>\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=\"Ivan Makovchik\" \/>\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\":\"Article\",\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead\"},\"author\":{\"name\":\"Ivan Makovchik\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/6f929a39ca544e87a06bfacb6b90944e\"},\"headline\":\"Still talking to your rubber duck? Draw it a diagram instead.\",\"datePublished\":\"2023-06-14T10:26:32+00:00\",\"dateModified\":\"2023-09-11T14:28:44+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead\"},\"wordCount\":968,\"publisher\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#organization\"},\"image\":{\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg\",\"keywords\":[\"data\"],\"articleSection\":[\"Blog Post\",\"Engineering Practices\"],\"inLanguage\":\"en-US\"},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead\",\"url\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/\",\"name\":\"Still talking to your rubber duck? Draw it a diagram instead.\",\"isPartOf\":{\"@id\":\"https:\/\/www.infobip.com\/developers\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg\",\"datePublished\":\"2023-06-14T10:26:32+00:00\",\"dateModified\":\"2023-09-11T14:28:44+00:00\",\"description\":\"Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?\",\"breadcrumb\":{\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage\",\"url\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg\",\"contentUrl\":\"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg\",\"width\":2560,\"height\":1707,\"caption\":\"Flat lay of bath duck on double colorful background.\"},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.infobip.com\/developers\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Still talking to your rubber duck? Draw it a diagram instead.\"}]},{\"@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\/6f929a39ca544e87a06bfacb6b90944e\",\"name\":\"Ivan Makovchik\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/647e2f304a973f5994eb69705139aa2e\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/57a6c57fac5306263fdc1945329cad6ff9d73d6a3dcca4658dd894b0c6ab6476?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/57a6c57fac5306263fdc1945329cad6ff9d73d6a3dcca4658dd894b0c6ab6476?s=96&d=mm&r=g\",\"caption\":\"Ivan Makovchik\"},\"description\":\"Ivan is a software engineer with over eight years of experience using Kotlin, Java, and various frontend technologies. He enjoys mentoring other engineers and is dedicated to continuously improving their skills as a specialist. In addition, Ivan is passionate about music and has an impressive vinyl collection.\",\"url\":\"https:\/\/www.infobip.com\/developers\/blog\/author\/ivan-makovchik\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Still talking to your rubber duck? Draw it a diagram instead.","description":"Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?","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:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/","og_locale":"en_US","og_type":"article","og_title":"Still talking to your rubber duck? Draw it a diagram instead.","og_description":"Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?","og_url":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/","og_site_name":"Infobip Developers Hub","article_publisher":"https:\/\/www.facebook.com\/infobip\/","article_published_time":"2023-06-14T10:26:32+00:00","article_modified_time":"2023-09-11T14:28:44+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg","type":"image\/jpeg"}],"author":"Ivan Makovchik","twitter_card":"summary_large_image","twitter_creator":"@InfobipDev","twitter_site":"@InfobipDev","twitter_misc":{"Written by":"Ivan Makovchik","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#article","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead"},"author":{"name":"Ivan Makovchik","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/6f929a39ca544e87a06bfacb6b90944e"},"headline":"Still talking to your rubber duck? Draw it a diagram instead.","datePublished":"2023-06-14T10:26:32+00:00","dateModified":"2023-09-11T14:28:44+00:00","mainEntityOfPage":{"@id":"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead"},"wordCount":968,"publisher":{"@id":"https:\/\/www.infobip.com\/developers\/#organization"},"image":{"@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg","keywords":["data"],"articleSection":["Blog Post","Engineering Practices"],"inLanguage":"en-US"},{"@type":"WebPage","@id":"https:\/\/www.infobip.com\/developers\/blog\/still-talking-to-your-rubber-duck-draw-it-a-diagram-instead","url":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/","name":"Still talking to your rubber duck? Draw it a diagram instead.","isPartOf":{"@id":"https:\/\/www.infobip.com\/developers\/#website"},"primaryImageOfPage":{"@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage"},"image":{"@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage"},"thumbnailUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg","datePublished":"2023-06-14T10:26:32+00:00","dateModified":"2023-09-11T14:28:44+00:00","description":"Engineers often use the rubber duck approach when they are stuck, but why not draw for our little yellow friend instead?","breadcrumb":{"@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#primaryimage","url":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg","contentUrl":"https:\/\/www.infobip.com\/developers\/wp-content\/uploads\/2023\/06\/flat-lay-of-bath-duck-2021-08-26-16-24-25-utc-scaled.jpg","width":2560,"height":1707,"caption":"Flat lay of bath duck on double colorful background."},{"@type":"BreadcrumbList","@id":"https:\/\/shiftmag.dev\/talking-to-rubber-duck-draw-a-diagram-582\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.infobip.com\/developers\/"},{"@type":"ListItem","position":2,"name":"Still talking to your rubber duck? Draw it a diagram instead."}]},{"@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\/6f929a39ca544e87a06bfacb6b90944e","name":"Ivan Makovchik","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.infobip.com\/developers\/#\/schema\/person\/image\/647e2f304a973f5994eb69705139aa2e","url":"https:\/\/secure.gravatar.com\/avatar\/57a6c57fac5306263fdc1945329cad6ff9d73d6a3dcca4658dd894b0c6ab6476?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/57a6c57fac5306263fdc1945329cad6ff9d73d6a3dcca4658dd894b0c6ab6476?s=96&d=mm&r=g","caption":"Ivan Makovchik"},"description":"Ivan is a software engineer with over eight years of experience using Kotlin, Java, and various frontend technologies. He enjoys mentoring other engineers and is dedicated to continuously improving their skills as a specialist. In addition, Ivan is passionate about music and has an impressive vinyl collection.","url":"https:\/\/www.infobip.com\/developers\/blog\/author\/ivan-makovchik"}]}},"_links":{"self":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/2290","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\/46"}],"replies":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/comments?post=2290"}],"version-history":[{"count":4,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/2290\/revisions"}],"predecessor-version":[{"id":2297,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/posts\/2290\/revisions\/2297"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media\/2296"}],"wp:attachment":[{"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/media?parent=2290"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/categories?post=2290"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/tags?post=2290"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/www.infobip.com\/developers\/wp-json\/wp\/v2\/coauthors?post=2290"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}