{"id":318,"date":"2020-08-06T06:00:00","date_gmt":"2020-08-06T06:00:00","guid":{"rendered":"https:\/\/blogs.zeiss.com\/tech\/?p=318"},"modified":"2020-08-25T09:40:23","modified_gmt":"2020-08-25T09:40:23","slug":"the-culture-of-code-reviews-zeiss","status":"publish","type":"post","link":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/","title":{"rendered":"The culture of code reviews @ ZEISS"},"content":{"rendered":"\n<p>Everyone doing software engineering\nunderstands the importance of code reviews, and there is an almost unlimited\nnumber of articles that talk about code reviews best practices and how to\nperform them.<\/p>\n\n\n\n<p>Today I want to share with you a different\nangle on the topic, discussing how we use code reviews at ZEISS not only to\nimprove the quality of our codebase over time but also to build stronger teams,\nimprove cross-team collaboration and promote learning through mentoring.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">A few words on quality<\/h2>\n\n\n\n<p>The primary purpose of the code review is to\nmake sure the overall code health and quality of ZEISS\u2019s codebase is improving\nover time. In order to achieve this, we created a strong change review process,\nwhich relies on the senior engineers on the role of code reviewers to own the\nCL (change list) and balance the trade-offs between the feature sets and the\nengineering rules on the code.<\/p>\n\n\n\n<p>As a <strong>general\nrule<\/strong>, reviewers should favor approving the CL once the code is in a state\nwhere it <strong>suffices its purpose<\/strong>, it\u2019s <strong>properly documented<\/strong> and <strong>improves the overall code health<\/strong>.<\/p>\n\n\n\n<p>Code health or code quality can be relative to\neach project or team, depending on their specific needs and programming\nlanguage in use, however, there are some concepts which apply during the code\nreview phase which includes:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>The code is well designed<\/li><li>The code suffices its purpose<\/li><li>There are no broken UIs<\/li><li>The code is easy to follow and\nunderstand<\/li><li>The changes are tested<\/li><li>The code follows proper naming\nconventions<\/li><li>The code is properly commented<\/li><li>The code follows the style guide<\/li><li>The code is properly documented<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Tooling<\/h2>\n\n\n\n<p>Whenever possible we make use of tools that help us validate a number of items before the CR reaches the reviewer. Tools can help us automate the validation of coding style (with tools like eslint), test coverage and test results, naming conventions, etc.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Mentoring<\/h2>\n\n\n\n<p>Code reviews are like knowledge exchange\nsessions, and they can be an important part of teaching developers best\npractices, or something new about a language, a framework, or general software\nengineering principles.<\/p>\n\n\n\n<p>During this session, the reviewer will comment\nover all the findings identified from his\/her experience with 3 different types\nof comments:<\/p>\n\n\n\n<ol class=\"wp-block-list\"><li>Necessary changes<\/li><li>Suggested changes<\/li><li>Informative<\/li><\/ol>\n\n\n\n<h3 class=\"wp-block-heading\">Necessary changes<\/h3>\n\n\n\n<p>Enforceable changes are changes that are\nmandatory to resolve in order for the reviewer to approve the code. Though we\nencourage reviewers to be flexible with personal preferences, we do follow the\nrule \u201cTechnical facts and data overrule opinions and personal preferences\u201d.<\/p>\n\n\n\n<p>Enforceable changes are those which guarantee our code health and quality.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"770\" height=\"627\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/necessary.jpg\" alt=\"A screenshot of a cell phone\n\nDescription automatically generated\" class=\"wp-image-320\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/necessary.jpg 770w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/necessary-300x244.jpg 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/necessary-768x625.jpg 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/necessary-640x521.jpg 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><figcaption>Example of necessary changes<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Suggested changes<\/h3>\n\n\n\n<p>These are comments that are placed by the reviewer to suggest an alternative solution for a given problem or suggestions for a different way to accomplish the same. If there are no big reasons to rewrite the code, the reviewee can opt to do the changes or to keep the code as-is.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"770\" height=\"402\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/Suggested.jpg\" alt=\"A screenshot of a cell phone\n\nDescription automatically generated\" class=\"wp-image-321\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/Suggested.jpg 770w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/Suggested-300x157.jpg 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/Suggested-768x401.jpg 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/Suggested-640x334.jpg 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><figcaption>Example of suggested changes<\/figcaption><\/figure><\/div>\n\n\n\n<h3 class=\"wp-block-heading\">Informative<\/h3>\n\n\n\n<p>These are comments which do not require resolution, they are of informative character, and they are used just to provide additional information among the parts. A good example could be a summary of the reviewer\u2019s thoughts over the CL. They provide a path for more generic feedback which can help to build the relationship between the parts.<\/p>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"aligncenter size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"770\" height=\"426\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/informative.jpg\" alt=\"A screenshot of a cell phone\n\nDescription automatically generated\" class=\"wp-image-322\" srcset=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/informative.jpg 770w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/informative-300x166.jpg 300w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/informative-768x425.jpg 768w, https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/informative-640x354.jpg 640w\" sizes=\"auto, (max-width: 639px) 98vw, (max-width: 1199px) 64vw, 770px\" \/><figcaption>Example of informatives<\/figcaption><\/figure><\/div>\n\n\n\n<p>In any case, all comments are intended to be\nconstructive feedback, and a way to transfer knowledge between the reviewer and\nthe reviewee, or vice-versa. There are some rules any comment should follow to\nbe effective for this purpose:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Be kind<\/li><li>Explain your reasoning<\/li><li>Enable the reviewee to solve the\nproblem by just pointing out the issues with the code rather than giving an\nexplicit solution<\/li><li>If the code is hard to follow,\nkindly ask to simplify the code rather than explaining the code to you<\/li><\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Building stronger teams<\/h2>\n\n\n\n<p>At ZEISS, we have a strong team culture. Teams\nare empowered, autonomous and fully functional units. To maintain them\nproductive we make sure there is respect and trust among team members, but\nalso, that they have fun while working on the projects.<\/p>\n\n\n\n<p>Code reviews as discussed play a crucial role\nin supporting the individual developer\u2019s growth and learning, but it also helps\nbuild better relationships and trust. And this is true not only for my own team\nmembers but also for people among different teams in the organization.<\/p>\n\n\n\n<p>As we covered before in our <a href=\"https:\/\/blogs.zeiss.com\/tech\/our-journey-to-microfrontends\/\">microservices \/ microfrontends architecture<\/a>,\neach team project is connected to the overall Digital Customer Companion\n(portal.zeiss.com), and we often use common services or libraries that every\nteam can upgrade. Thus it can be very hard to keep up with the changes to a\npopular service when it can be altered by multiple teams.<\/p>\n\n\n\n<p>Code reviews help us to keep it under control,\nand keeping everyone informed of what is occurring. As code reviews that happen\nin the form of a PR (pull request) are not limited only to members of my own\nteam, reviewers who are interested in a particular service, a library, or a\nmicrofrontend can review the code of any team as long as it follows the\nguidelines.<\/p>\n\n\n\n<p>But it is often the case that the engineer\ncreating the PR will assign it to specific people from their own team, and from\nother teams that are experts on that particular area or code repository. This\ncreates a balance and accountability cross teams that help increase the code\nquality and bring teams together.<\/p>\n\n\n\n<p>There\u2019s a lot to talk about how our teams\nperform to deliver the quality products ZEISS is known for but would be the\nsubject of its own article.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Conclusion<\/h2>\n\n\n\n<p>Code reviews are at the heart of our performance\nand quality, they are not an annoyance in the process but rather an opportunity\nto learn and build better code.<\/p>\n\n\n\n<p>Fun fact: this blog post has been subjected to\na cross-team <s>code<\/s>\u201cpost\u201d review.<\/p>\n\n\n\n<p>Thanks for reading!<\/p>\n\n\n\n  <figure id=\"image-wo-block_5f2ad3f2f9726\" class=\"image-options  none full-width\">\n\n\n\n    <div class=\"image-wo\">\n       <div class=\"image-wo-wrap\">\n              <div class=\"copyright black\">\u00a9 Luca Bravo on Unsplash<\/div>\n      \n\n                       <img decoding=\"async\" src=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-1024x683.jpg\" alt=\"\">\n                 <\/div>\n          \n\n\n\n\n  <!-- end image-options-->\n  <\/figure>\n","protected":false},"excerpt":{"rendered":"<p>Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.<\/p>\n","protected":false},"author":13,"featured_media":325,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"advgb_blocks_editor_width":"","advgb_blocks_columns_visual_guide":"","footnotes":""},"categories":[1,19,28],"tags":[11,29,30,31],"topics":[23],"class_list":["post-318","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-general","category-teams","category-coding","tag-software-engineering","tag-review","tag-technology","tag-best-practice","topics-collaboration"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v24.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>The culture of code reviews @ ZEISS - Digital Innovation Partners<\/title>\n<meta name=\"description\" content=\"Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The culture of code reviews @ ZEISS - Digital Innovation Partners\" \/>\n<meta property=\"og:description\" content=\"Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/\" \/>\n<meta property=\"og:site_name\" content=\"Digital Innovation Partners\" \/>\n<meta property=\"article:published_time\" content=\"2020-08-06T06:00:00+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2020-08-25T09:40:23+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-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=\"Juan Cruz Martinez\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@bajcmartinez\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Juan Cruz Martinez\" \/>\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:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/\",\"name\":\"The culture of code reviews @ ZEISS - Digital Innovation Partners\",\"isPartOf\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg\",\"datePublished\":\"2020-08-06T06:00:00+00:00\",\"dateModified\":\"2020-08-25T09:40:23+00:00\",\"author\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/f072ddbc78e2c97f1044fc0383ef47a6\"},\"description\":\"Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.\",\"breadcrumb\":{\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#primaryimage\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/blogs.zeiss.com\/tech\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The culture of code reviews @ ZEISS\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#website\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/\",\"name\":\"Digital Innovation Partners\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/blogs.zeiss.com\/tech\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Person\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/f072ddbc78e2c97f1044fc0383ef47a6\",\"name\":\"Juan Cruz Martinez\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/photo_juan-150x150.jpg\",\"contentUrl\":\"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/photo_juan-150x150.jpg\",\"caption\":\"Juan Cruz Martinez\"},\"description\":\"Juan is a software engineer, author, speaker, and doer of things. He has a passion for sharing his knowledge and experience of software development and helping the new generation of developers getting started. He enjoys working at the intersection of Science, Software Engineering, and Emerging Technology to help customers with their digital products.\",\"sameAs\":[\"https:\/\/livecodestream.dev\/\",\"https:\/\/x.com\/bajcmartinez\"],\"url\":\"https:\/\/blogs.zeiss.com\/tech\/author\/juan-cruz-martinez\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The culture of code reviews @ ZEISS - Digital Innovation Partners","description":"Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.","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:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/","og_locale":"en_US","og_type":"article","og_title":"The culture of code reviews @ ZEISS - Digital Innovation Partners","og_description":"Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.","og_url":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/","og_site_name":"Digital Innovation Partners","article_published_time":"2020-08-06T06:00:00+00:00","article_modified_time":"2020-08-25T09:40:23+00:00","og_image":[{"width":2560,"height":1707,"url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg","type":"image\/jpeg"}],"author":"Juan Cruz Martinez","twitter_card":"summary_large_image","twitter_creator":"@bajcmartinez","twitter_misc":{"Written by":"Juan Cruz Martinez","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/","url":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/","name":"The culture of code reviews @ ZEISS - Digital Innovation Partners","isPartOf":{"@id":"https:\/\/blogs.zeiss.com\/tech\/#website"},"primaryImageOfPage":{"@id":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#primaryimage"},"image":{"@id":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#primaryimage"},"thumbnailUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg","datePublished":"2020-08-06T06:00:00+00:00","dateModified":"2020-08-25T09:40:23+00:00","author":{"@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/f072ddbc78e2c97f1044fc0383ef47a6"},"description":"Everyone doing software engineering understands the importance of code reviews, and there is an almost unlimited number of articles that talk about code reviews best practices and how to perform them.","breadcrumb":{"@id":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#primaryimage","url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-scaled.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/blogs.zeiss.com\/tech\/the-culture-of-code-reviews-zeiss\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/blogs.zeiss.com\/tech\/"},{"@type":"ListItem","position":2,"name":"The culture of code reviews @ ZEISS"}]},{"@type":"WebSite","@id":"https:\/\/blogs.zeiss.com\/tech\/#website","url":"https:\/\/blogs.zeiss.com\/tech\/","name":"Digital Innovation Partners","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/blogs.zeiss.com\/tech\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Person","@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/f072ddbc78e2c97f1044fc0383ef47a6","name":"Juan Cruz Martinez","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/blogs.zeiss.com\/tech\/#\/schema\/person\/image\/","url":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/photo_juan-150x150.jpg","contentUrl":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/photo_juan-150x150.jpg","caption":"Juan Cruz Martinez"},"description":"Juan is a software engineer, author, speaker, and doer of things. He has a passion for sharing his knowledge and experience of software development and helping the new generation of developers getting started. He enjoys working at the intersection of Science, Software Engineering, and Emerging Technology to help customers with their digital products.","sameAs":["https:\/\/livecodestream.dev\/","https:\/\/x.com\/bajcmartinez"],"url":"https:\/\/blogs.zeiss.com\/tech\/author\/juan-cruz-martinez\/"}]}},"author_meta":{"display_name":"Juan Cruz Martinez","author_link":"https:\/\/blogs.zeiss.com\/tech\/author\/juan-cruz-martinez\/"},"featured_img":"https:\/\/blogs.zeiss.com\/tech\/wp-content\/uploads\/2020\/08\/banner_codereviews-300x200.jpg","coauthors":[],"tax_additional":{"categories":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/general\/\" class=\"advgb-post-tax-term\">General<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/teams\/\" class=\"advgb-post-tax-term\">Teams<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/coding\/\" class=\"advgb-post-tax-term\">Coding<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">General<\/span>","<span class=\"advgb-post-tax-term\">Teams<\/span>","<span class=\"advgb-post-tax-term\">Coding<\/span>"]},"tags":{"linked":["<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/coding\/\" class=\"advgb-post-tax-term\">software engineering<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/coding\/\" class=\"advgb-post-tax-term\">Review<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/coding\/\" class=\"advgb-post-tax-term\">Technology<\/a>","<a href=\"https:\/\/blogs.zeiss.com\/tech\/category\/coding\/\" class=\"advgb-post-tax-term\">Best practice<\/a>"],"unlinked":["<span class=\"advgb-post-tax-term\">software engineering<\/span>","<span class=\"advgb-post-tax-term\">Review<\/span>","<span class=\"advgb-post-tax-term\">Technology<\/span>","<span class=\"advgb-post-tax-term\">Best practice<\/span>"]}},"comment_count":"0","relative_dates":{"created":"Posted 6 years ago","modified":"Updated 6 years ago"},"absolute_dates":{"created":"Posted on August 6, 2020","modified":"Updated on August 25, 2020"},"absolute_dates_time":{"created":"Posted on August 6, 2020 6:00 am","modified":"Updated on August 25, 2020 9:40 am"},"featured_img_caption":"","series_order":"","_links":{"self":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/318","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/users\/13"}],"replies":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/comments?post=318"}],"version-history":[{"count":9,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/318\/revisions"}],"predecessor-version":[{"id":332,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/posts\/318\/revisions\/332"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/media\/325"}],"wp:attachment":[{"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/media?parent=318"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/categories?post=318"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/tags?post=318"},{"taxonomy":"topics","embeddable":true,"href":"https:\/\/blogs.zeiss.com\/tech\/wp-json\/wp\/v2\/topics?post=318"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}