{"id":34380,"date":"2019-09-27T10:00:24","date_gmt":"2019-09-27T14:00:24","guid":{"rendered":"https:\/\/simpleprogrammer.com\/?p=34380"},"modified":"2019-09-27T07:48:10","modified_gmt":"2019-09-27T11:48:10","slug":"code-review-and-quality-assurance","status":"publish","type":"post","link":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/","title":{"rendered":"The Modern Developer, Part 4: Code Review and Quality Assurance"},"content":{"rendered":"\n<div class=\"wp-block-image\"><figure class=\"alignright is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/code-review.png\" alt=\"\" class=\"wp-image-34434\" width=\"280\" height=\"280\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">As a software developer, your job isn\u2019t just to write code. It\u2019s to deliver quality solutions to complex problems.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Is the code you\u2019ve written high quality, allowing the software to do the job it is supposed to? When the software encounters an error, does it handle it gracefully? Is the software secure and performant enough?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are two processes that are used to measure and raise the quality of a software project: code reviews and quality assurance. Let\u2019s examine each of them and see how you can implement them in your workflow to deliver better results.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Code Reviews<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">A while ago, I wrote an article about <a href=\"https:\/\/simpleprogrammer.com\/hunting-mythical-high-quality-code\/\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">high quality code<\/a>. There are a few things I would like to revisit in this article:<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Self Code Reviews<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The first thing to know is that self code reviews are absolutely mandatory.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The second is that there are codebases that are of such low quality and with so many inconsistencies that everyone has given up on them. This means that they are merely patched up and developed further only when absolutely necessary.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For this type of code base, I\u2019ve created a \u201clite\u201d version of the<a href=\"https:\/\/simpleprogrammer.com\/code-quality\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\"> code quality<\/a> checklist from the initial article. I also use this lite version while writing code on the fly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When I write code, I usually leave out quite a lot of to-do\u2019s to refactor later on. This way, the code reaches an acceptable level of quality, and I don\u2019t have to distract myself from the business logic. Since I\u2019ve started using this list, the to-do\u2019s in my code have gone down significantly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Here is the checklist:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Does the new code follow the guidelines and style of the file you are editing ?<\/strong> &#8211; Even if the convention is old, ugly, and not optimal, if you don\u2019t have the time to fix everything, keeping with the current convention is most likely a better approach than introducing a second style.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Are the entry points as restricted as they should be? &#8211;<\/strong> Entry points to a module\/class should have as many checks as they need. If you guarantee that all of your private functions and business logic functions work with clean parameters, this will remove a lot of boilerplate code and will make the crucial functions much smaller and easier to read and debug.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Are the variable and function names descriptive? &#8211;<\/strong> Even if they are long, this is a much better solution than having small, cryptic names. For \u201crotting\u201d code bases, this helps with reading the code in the future. For newly developed code, a name that is long will eventually help you choose a good alternative, since you can rework the name itself to be shorter but with the same meaning.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Is the error checking strict enough and logged? &#8211;<\/strong> Every error must be logged. Additionally, you want to make as many checks as possible\u2014as long as they don\u2019t overlap. Checking the same thing twice makes no sense. Try to handle multiple cases with a single check.<\/li><\/ul>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>If an error occurs, will I be able to understand the entire problem from a single line?<\/strong> &#8211; When an error occurs, the log should be so descriptive that you don\u2019t need additional debugging information to understand what went wrong.<\/li><\/ul>\n\n\n\n<h3 class=\"wp-block-heading\">Team Code Reviews<\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/code-review-team.png\" alt=\"\" class=\"wp-image-34435\" width=\"280\" height=\"280\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">The more common approach to code reviews is to have them performed by someone from the team. The process itself depends on the company and may vary, but the important thing is that feedback must be given.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With regard to the reviewer, they must give constructive feedback. The reviewer should know what the code is supposed to do. A hallway-code review\u2014when you get feedback on a piece of code from a random colleague\u2014is an exception, but this is rarely used.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">When it comes to you, the reviewee, always assume good intentions. Chances are both you and the reviewer want to deliver the highest quality code possible. Do not take any criticism about your code personally\u2014you are not your code, and you are not your work.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Don\u2019t forget that the purpose of the code is to solve a problem. If you disagree with the reviewer on something, approach them and have a short discussion. I suggest you skip the email, unless it is company policy, since verbal communication is better when it comes to solving these kinds of misunderstandings.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Code Review Software<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">There are tools that do code review automatically. Although they can catch some bugs and follow rules such as \u201cno function name longer than XY symbols,\u201d they aren\u2019t that useful \u2026 yet.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">To me they are extended code and style linters. Even though some of them can point out cyclomatic complexity issues, they can\u2019t catch business errors. Feel free to use them, but they can\u2019t replace the self code review or the team code review.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Don\u2019t Skip Code Reviews<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Although time concerns and pressure to release as soon as possible may tempt you to skip code reviews, this is always a bad idea.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Software is a team effort, and as a team it is your responsibility to deliver the highest quality software you can. Code reviews are one of the simplest ways to improve the quality of your work and verify the success of the feature you are releasing.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Remember that even a 10-minute self code review can end up catching business-critical bugs that would be shipped into production. Don\u2019t compromise quality. Do code reviews.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Quality Assurance<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Quality assurance (QA) has passed through many trends. The industry is heading toward automated testing, but interestingly enough, there are still quite a few positions open for manual testers.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let\u2019s break down some of the most popular QA approaches and see how each one raises the quality of the software.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Quality Assurance Done by the Developers<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">This is when a developer, usually someone from the team, tests the feature for correctness, acting as an end user. This is one of the oldest approaches, partly because management doesn\u2019t want to hire manual QA personnel. The end results are usually pretty poor.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Most of the time, developers have enough on their mind already and won\u2019t treat the testing with the same level of detail as their development tasks. In theory this shouldn\u2019t happen since it\u2019s unprofessional, but in practice this is exactly what happens.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Nowadays, the only legitimate way testing is done by developers is internally between the devs, and often by the team leader, before a feature is pushed for real QA.&nbsp;<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Manual QA<\/h3>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/quality-assurence.png\" alt=\"\" class=\"wp-image-34436\" width=\"280\" height=\"280\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">In the oldest form of QA, one or more people manually test the software. Software with Graphical User Interface is primarily tested manually. Although its market share has gotten smaller, the predictions that it would disappear completely have so far been wrong.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Although quality assurance done by humans will not be perfect, humans learn\u2014unlike automated tests. An experienced quality assurance specialist who has tested the system for months will often catch issues and cases that the developers and designers haven\u2019t considered. Knowledge about the system and how it\u2019s used is worth its weight in gold.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Since QA is done manually, some of the most useful user experience and usability feedback can come from the experienced quality assurance engineers. When this feedback comes, use it and don\u2019t dismiss the QA engineer when they have ideas about improving the product.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Automated Tests<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/simpleprogrammer.com\/test-automation\" target=\"_blank\" rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\">Automated tests <\/a>are great! Write them once, and then run them as many times as you need and for whatever reason.\u00a0<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Want to check your code before committing? Sure! Want to run regular tests on production to ensure that the system is running correctly? No problem! How about running them automatically after every merge in master? Let\u2019s do this!<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Use cases for automated tests can be numerous. The examples above are just a small fraction of them. But why aren\u2019t automated tests done by everyone?&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Unfortunately, as great as automated tests are, they come at a considerable price. Since automated testing is done with code,you have to do quality assurance and testing on the <em>tests themselves<\/em>. Furthermore, any change in the software will require change in the tests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In short, automated tests require significant resources to function. This is why they are absent from so many companies.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">For me, automated tests are worth the investment if done correctly. My checklist for writing automated tests is as follows:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li>Have automated tests for business-critical features.<\/li><li>Make them as simple as possible even if the code is ugly.<\/li><li>Do rigorous testing on the tests to ensure that they work in all use cases and don\u2019t return false positives.<\/li><li>Start implementing the tests when a feature is nearly in QA to minimize the number of tests that will be thrown away due to major code or functionality changes.<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Automated tests can save hundreds of hours in debugging for big projects. They are a big advantage when done correctly. The only real downside is they require resources allocated to them constantly. At the end of the day, automated tests add a lot of value to a project, so you should advocate for them as a developer.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Functional and Nonfunctional Tests<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">So far we have categorized tests according to <a rel=\"noreferrer noopener\" aria-label=\" (opens in a new tab)\" href=\"https:\/\/simpleprogrammer.com\/different-roles-of-qa-and-testing\/\" target=\"_blank\">who<\/a> or what executes them.Now we\u2019ll explore some types of tests focusing on <em>what <\/em>is being tested.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">There are two main categories: functional tests and nonfunctional tests.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Starting with the former, functional tests are those that test what the system does. Examples include:&nbsp;<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Unit testing<\/strong> &#8211; typically performed by the programmer and tests the smallest components of a software product, such as functions and classes.<\/li><li><strong>Integration testing &#8211;<\/strong> examines whether the different modules and subsystems work well together and communicate correctly. It\u2019s especially effective for distributed applications.<\/li><li><strong>Acceptance testing<\/strong> &#8211; performed by the client or the product owner and tests the entire functionality of the system. Successfully passing acceptance testing usually means the system is close to a production release.<\/li><\/ul>\n\n\n\n<div class=\"wp-block-image\"><figure class=\"alignright is-resized\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/test.png\" alt=\"\" class=\"wp-image-34437\" width=\"280\" height=\"280\"\/><\/figure><\/div>\n\n\n\n<p class=\"wp-block-paragraph\">Despite being tempted to skip unit and integration tests, most of the time, skipping them will slow you down more in the long run. Don\u2019t try to cut corners\u2014do things properly so once the project is released, you will have very light maintenance instead of having bugs haunt you and bring your productivity down into the next one or two quarters.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">On the other hand, nonfunctional tests are those that check how the system should perform certain tasks:<\/p>\n\n\n\n<ul class=\"wp-block-list\"><li><strong>Performance testing<\/strong> &#8211; examines the speed in which the system will work under normal load.<\/li><li><strong>Stress testing<\/strong> &#8211; checks how the system will behave when there are many concurrent users.<\/li><li><strong>Recovery testing<\/strong> &#8211; reveals whether the system can recover from a crash. Usually, the processes start running without many problems, but the storage\u2014file system and databases\u2014will go into recovery mode. Sometimes, the only way to get the system operational will be by using a backup.<\/li><li><strong>Security testing<\/strong> &#8211; If you can afford a security audit, have one. If you can\u2019t, there are a lot of lists with the most common vulnerabilities for a given technology, e.g., web. Make sure that you don\u2019t have these security holes, and your system will be better off than 95% of all software.&nbsp;<\/li><\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">Functional tests tend to take precedence over nonfunctional tests in most organizations. This is quite unfortunate because each type of test is made to catch specific errors, and projects usually encounter all manner of errors sooner or later.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Even if the resources allocated for QA aren\u2019t sufficient, all the main types of tests should be performed before the system goes into production.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">Don\u2019t Forget Functionality Testing<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">A feature can have no bugs, work fast, and be user-friendly, and still not be a good feature. More important are questions like: Does it perform the task that it is supposed to? Is it useful to the system? Does it add value?<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">All too often, features don\u2019t bring nearly as much value as they could if they went through a couple of feedback loops with the intended users. This isn\u2019t something that can be solved with a code review or by a great QA engineer. This is something that exists at a company-culture level.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Software Quality Is a Journey, Not a Destination<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">As long as software changes, keeping the quality up is a constant battle. It won\u2019t always be straightforward, and it won\u2019t always be easy, but it is a necessity that keeps the project vitalized and with low technical debt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Doing self code reviews is one of the cheapest and most effective ways to deliver higher quality software. Similarly, the use of automated linters and style checkers will help you concentrate on the business logic.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But even beyond that, involving your colleagues will help you deliver a better architectured code, and doing quality assurance, both manual and automatic, will reduce the number of bugs that make it to production.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As a software developer, always remind yourself that keeping the quality of the code high is just as important a part of your job as adding new features.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>As a software developer, your job isn\u2019t just to write code. It\u2019s to deliver quality solutions to complex problems.&nbsp; Is the code you\u2019ve written high quality, allowing the software to do the job it is supposed to? When the software encounters an error, does it handle it gracefully? Is the software secure and performant enough?&#8230;<\/p>\n","protected":false},"author":1010,"featured_media":34432,"comment_status":"open","ping_status":"closed","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,14560,524297,162229782,415,31679,1],"tags":[],"class_list":["post-34380","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-best-practices","category-career","category-code-reviews","category-goals","category-guest-post","category-process-improvement","category-uncategorized"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.6 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>The Modern Developer, Part 4: Code Review and Quality Assurance - Simple Programmer<\/title>\n<meta name=\"description\" content=\"An essential part of development is code review and quality assurance, so the code will not slow you down in the future and is ready to be released.\" \/>\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\/code-review-and-quality-assurance\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"The Modern Developer, Part 4: Code Review and Quality Assurance - Simple Programmer\" \/>\n<meta property=\"og:description\" content=\"An essential part of development is code review and quality assurance, so the code will not slow you down in the future and is ready to be released.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/\" \/>\n<meta property=\"og:site_name\" content=\"Simple Programmer\" \/>\n<meta property=\"article:published_time\" content=\"2019-09-27T14:00:24+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/The-Modern-Developer-Part-4.png\" \/>\n\t<meta property=\"og:image:width\" content=\"1280\" \/>\n\t<meta property=\"og:image:height\" content=\"720\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"\" \/>\n\t<meta name=\"twitter:label2\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data2\" content=\"11 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#article\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/\"},\"author\":{\"name\":\"\",\"@id\":\"\"},\"headline\":\"The Modern Developer, Part 4: Code Review and Quality Assurance\",\"datePublished\":\"2019-09-27T14:00:24+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/\"},\"wordCount\":2216,\"commentCount\":0,\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/The-Modern-Developer-Part-4.png\",\"articleSection\":[\"Best Practices\",\"Career\",\"Code Reviews\",\"Goals\",\"Guest Post\",\"Process Improvement\"],\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/\",\"name\":\"The Modern Developer, Part 4: Code Review and Quality Assurance - Simple Programmer\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/The-Modern-Developer-Part-4.png\",\"datePublished\":\"2019-09-27T14:00:24+00:00\",\"author\":{\"@id\":\"\"},\"description\":\"An essential part of development is code review and quality assurance, so the code will not slow you down in the future and is ready to be released.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#primaryimage\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/The-Modern-Developer-Part-4.png\",\"contentUrl\":\"https:\\\/\\\/simpleprogrammer.com\\\/wp-content\\\/uploads\\\/2019\\\/09\\\/The-Modern-Developer-Part-4.png\",\"width\":1280,\"height\":720},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/simpleprogrammer.com\\\/code-review-and-quality-assurance\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/simpleprogrammer.com\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"The Modern Developer, Part 4: Code Review and Quality Assurance\"}]},{\"@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\":\"\",\"url\":\"https:\\\/\\\/simpleprogrammer.com\\\/author\\\/\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"The Modern Developer, Part 4: Code Review and Quality Assurance - Simple Programmer","description":"An essential part of development is code review and quality assurance, so the code will not slow you down in the future and is ready to be released.","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\/code-review-and-quality-assurance\/","og_locale":"en_US","og_type":"article","og_title":"The Modern Developer, Part 4: Code Review and Quality Assurance - Simple Programmer","og_description":"An essential part of development is code review and quality assurance, so the code will not slow you down in the future and is ready to be released.","og_url":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/","og_site_name":"Simple Programmer","article_published_time":"2019-09-27T14:00:24+00:00","og_image":[{"width":1280,"height":720,"url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/The-Modern-Developer-Part-4.png","type":"image\/png"}],"twitter_card":"summary_large_image","twitter_misc":{"Written by":"","Est. reading time":"11 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#article","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/"},"author":{"name":"","@id":""},"headline":"The Modern Developer, Part 4: Code Review and Quality Assurance","datePublished":"2019-09-27T14:00:24+00:00","mainEntityOfPage":{"@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/"},"wordCount":2216,"commentCount":0,"image":{"@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/The-Modern-Developer-Part-4.png","articleSection":["Best Practices","Career","Code Reviews","Goals","Guest Post","Process Improvement"],"inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/","url":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/","name":"The Modern Developer, Part 4: Code Review and Quality Assurance - Simple Programmer","isPartOf":{"@id":"https:\/\/simpleprogrammer.com\/#website"},"primaryImageOfPage":{"@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#primaryimage"},"image":{"@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#primaryimage"},"thumbnailUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/The-Modern-Developer-Part-4.png","datePublished":"2019-09-27T14:00:24+00:00","author":{"@id":""},"description":"An essential part of development is code review and quality assurance, so the code will not slow you down in the future and is ready to be released.","breadcrumb":{"@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#primaryimage","url":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/The-Modern-Developer-Part-4.png","contentUrl":"https:\/\/simpleprogrammer.com\/wp-content\/uploads\/2019\/09\/The-Modern-Developer-Part-4.png","width":1280,"height":720},{"@type":"BreadcrumbList","@id":"https:\/\/simpleprogrammer.com\/code-review-and-quality-assurance\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/simpleprogrammer.com\/"},{"@type":"ListItem","position":2,"name":"The Modern Developer, Part 4: Code Review and Quality Assurance"}]},{"@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":"","url":"https:\/\/simpleprogrammer.com\/author\/"}]}},"_links":{"self":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/34380","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\/1010"}],"replies":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/comments?post=34380"}],"version-history":[{"count":0,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/posts\/34380\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media\/34432"}],"wp:attachment":[{"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/media?parent=34380"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/categories?post=34380"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/simpleprogrammer.com\/wp-json\/wp\/v2\/tags?post=34380"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}