{"id":31344,"date":"2025-09-30T11:29:00","date_gmt":"2025-09-30T09:29:00","guid":{"rendered":"https:\/\/www.angulararchitects.io\/blog\/crime-scene\/"},"modified":"2025-09-30T11:29:00","modified_gmt":"2025-09-30T09:29:00","slug":"crime-scene","status":"publish","type":"post","link":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/","title":{"rendered":"Investigating Code Quality: Crime Scene++"},"content":{"rendered":"<p>Code analysis is more complex than ever. We could argue this is due to the advent of tools like Claude Code, Cursor, and their peers. That makes it even more important to grasp a codebase quickly. To help with that, I\u2019ve added new tools and metrics to Detective to surface anti-patterns and identify hotspots faster.<\/p>\n<p>Let\u2019s start with the new tool: Hotspot City. The idea is to render a 3D city based on your code and use footprint\/height to visualize LOC and complexity, and color to visualize the score. Here\u2019s a screenshot\u2014but I recommend trying it so you can explore the scene in 3D.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_07.30.272x.png\" alt=\"\" \/><\/p>\n<p>You can manipulate the scene; even more importantly, you can hover over buildings to see key facts about them.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_07.32.452x.png\" alt=\"\" \/><\/p>\n<p>That already provides useful visual feedback on your codebase, but often we need more context.<\/p>\n<p>To address that, Detective introduces metrics. These metrics currently operate at the file level. When you click a building, the X-Ray view opens and computes metrics for that file.<\/p>\n<p>We analyze three categories:<\/p>\n<ul>\n<li>Methods (analysis at the method level)<\/li>\n<li>Classes (we parse all classes in the file)<\/li>\n<li>Code Quality (hints derived from the TypeScript AST to uncover possible bad patterns)<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_07.34.512x.png\" alt=\"\" \/><\/p>\n<p>For class-level analysis, we report the following metrics:<\/p>\n<ul>\n<li>Methods \u2014 Number of methods in the class<\/li>\n<li>Fields \u2014 Number of fields<\/li>\n<li>Class complexity \u2014 Cyclomatic complexity of the class<\/li>\n<li>File complexity \u2014 Cyclomatic complexity of the file<\/li>\n<li>Unused members \u2014 Count of unused private\/super-private members<\/li>\n<li>Dependencies \u2014 A heuristic that detects constructor-injected or public member fields with type names matching patterns like Service, Manager, and so on\n<ul>\n<li>This helps, especially in Angular, to spot classes that inject too much and hurt testability<\/li>\n<\/ul>\n<\/li>\n<li>Reasons to change \u2014 An estimate of whether the class violates the Single Responsibility Principle. As a heuristic, we look at used types and classify them. For example, if we detect <code>HttpClient<\/code>, we tag the class as \u201cnetworking.\u201d If we detect <code>Document<\/code>, we add the tag \u201cdom.\u201d Multiple tags suggest the class spans layers, which is a signal to investigate.<\/li>\n<\/ul>\n<p>For method-level analysis, we include:<\/p>\n<ul>\n<li>Lines \u2014 Lines of code in the method<\/li>\n<li>Parameters \u2014 Helpful for spotting primitive obsession<\/li>\n<li>Complexity \u2014 Cyclomatic complexity of the function<\/li>\n<li>Nesting \u2014 Maximum nesting depth of conditionals in the method\n<ul>\n<li>Reduce nesting for readability and maintainability<\/li>\n<\/ul>\n<\/li>\n<li>Responsibilities \u2014 As above, but scoped to the function<\/li>\n<li>Writes <code>this.*<\/code> \u2014 Method mutates object state (<code>this.*<\/code>)<\/li>\n<li>Mutates params \u2014 Method reassigns or mutates its parameters<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.04.452x.png\" alt=\"\" \/><\/p>\n<p>The final tab is the Code Quality tab, split into three sections: \u201cData Structures,\u201d \u201cCode Organization,\u201d and \u201cTypeScript Quality.\u201d<\/p>\n<p>In \u201cData Structures\u201d we offer:<\/p>\n<ul>\n<li>Public fields \u2014 Counts public fields, ignoring Angular concepts like signals<\/li>\n<li>Magic numbers \u2014 Detects unnamed numeric literals<\/li>\n<li>Null checks \u2014 Non-strict (<code>==<\/code>\/<code>!=<\/code>) null checks are error\u2011prone. Prefer <code>===<\/code>\/<code>!==<\/code> or explicit nullish handling<\/li>\n<li>Complex data passing \u2014 Detects large object literals\/destructures in calls or signatures<\/li>\n<li>Array mixed meanings \u2014 Arrays containing mixed element kinds (for example, numbers + objects) often hide multiple responsibilities<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.17.092x.png\" alt=\"\" \/><\/p>\n<p>In \u201cTypeScript Quality\u201d we include:<\/p>\n<ul>\n<li>Any types \u2014 Detect usage of the <code>any<\/code> type<\/li>\n<li>Type assertions \u2014 Detect assertions that may hide runtime errors<\/li>\n<li>Complex unions \u2014 Large unions increase complexity<\/li>\n<li>Missing type guards \u2014 Prefer narrowing with guards<\/li>\n<li>Weak type definitions \u2014 All\u2011optional interfaces are weak<\/li>\n<li>Type duplication \u2014 Detect duplicate type shapes, for example:<\/li>\n<\/ul>\n<pre><code class=\"language-ts\">interface A { id: number; name: string }\ninterface C { id: number; name: string }<\/code><\/pre>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.23.152x.png\" alt=\"\" \/><\/p>\n<p>Finally, in \u201cCode Organization\u201d we have:<\/p>\n<ul>\n<li>Feature envy \u2014 Counts methods that access properties on parameters (foreign data) significantly more than their own state; triggered when a method reads fields on its parameters at least three times and more often than it accesses <code>this<\/code><\/li>\n<li>Middle man \u2014 Counts classes where most methods are one\u2011liners that delegate to another object (for example, <code>this.dep.method(...)<\/code>) or to a parameter<\/li>\n<li>Complex algorithms \u2014 Counts functions\/methods likely to be hard to understand or change, based on two heuristics: cyclomatic complexity \u2265 15 or maximum nesting depth \u2265 4. High control\u2011flow complexity and deep nesting reduce readability and maintainability<\/li>\n<li>Temporal coupling \u2014 Counts fields written in one method and later read inside a conditional in a different method. This indicates an implicit ordering dependency between methods. If one method must run before another for correct behavior, the class may exhibit temporal coupling<\/li>\n<\/ul>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.27.452x.png\" alt=\"\" \/><\/p>\n<p>X-Rays are invaluable for highlighting where to look closer and assessing potential issues.<\/p>\n<p>Another area we improved in Detective is the \u201cBus Factor\u201d within Team Alignment. The data already existed, but it wasn\u2019t shown in the UI.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.34.452x.png\" alt=\"\" \/><\/p>\n<p>Based on the selected modules, we now display a table with the primary and secondary contributors. This helps identify areas that need better knowledge sharing and team rotation.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.35.422x.png\" alt=\"\" \/><\/p>\n<p>Within Change Coupling, we introduced a new, interactive chord diagram to make relationships easier to understand.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.37.522x.png\" alt=\"\" \/><\/p>\n<p>Last but not least, we added a brand\u2011new feature: Trend Analysis. Here, we iterate through each commit and each file and build trends for \u201cComplexity\u201d and \u201cSize,\u201d as shown below.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.39.592x.png\" alt=\"\" \/><\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.41.542x.png\" alt=\"\" \/><\/p>\n<p>When you click a folder\/module, we aggregate the trends to give an overview of all files contained in that folder.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.42.582x.png\" alt=\"\" \/><\/p>\n<p>You can also open the X-Ray analysis for the files in view to investigate further. Often it\u2019s enough to look at the top ten files with the biggest changes in complexity or LOC and jump straight into their X-Rays.<\/p>\n<p><img decoding=\"async\" src=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_08.44.282x.png\" alt=\"\" \/><\/p>\n<p>These are substantial changes, and I have more ideas for Angular\u2011specific metrics based on templates that could catch additional anti\u2011patterns.<\/p>\n<h2>Next Steps: Request Your Code Review<\/h2>\n<p>With our code reviews, we help you achieve your architectural and quality goals. In addition to the code analysis described here, we apply several other techniques and take established community best practices into account. As a result, you receive a 360\u00b0 view of the overall \u201chealth\u201d of your implementation, along with a prioritized list of recommendations.<\/p>\n<p>Request your review now \u2014 and let\u2019s make your Angular solution future-proof.<\/p>\n<p><a class=\"hero-button-link button-link\" style=\"text-decoration:none !important\" href=\"https:\/\/www.angulararchitects.io\/en\/contact\/\">Request your Review!<\/a><\/p>\n<h2>Conclusion<\/h2>\n<p>Detective\u2019s new capabilities\u2014Hotspot City, X\u2011Ray metrics, Bus Factor insights, Change Coupling\u2019s chord diagram, and Trend Analysis\u2014turn raw repository history and code structure into actionable signals. They help you spot where complexity is growing, where responsibilities leak across boundaries, and where knowledge is concentrated in too few hands. The goal is not to replace judgment but to focus attention where it matters most.<\/p>\n<p>Give it a spin on your codebase: explore the city, drill into X\u2011Rays, review the top trend movers, and use the findings to guide refactoring and team conversations. I\u2019d love feedback and ideas\u2014especially around Angular\u2011specific template metrics\u2014to make these tools even more insightful.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Code analysis is more complex than ever. We could argue this is due to the advent of tools like Claude Code, Cursor, and their peers. That makes it even more important to grasp a codebase quickly. To help with that, I\u2019ve added new tools and metrics to Detective to surface anti-patterns and identify hotspots faster. [&hellip;]<\/p>\n","protected":false},"author":20,"featured_media":31341,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"_price":"","_stock":"","_tribe_ticket_header":"","_tribe_default_ticket_provider":"","_ticket_start_date":"","_ticket_end_date":"","_tribe_ticket_show_description":"","_tribe_ticket_show_not_going":false,"_tribe_ticket_use_global_stock":"","_tribe_ticket_global_stock_level":"","_global_stock_mode":"","_global_stock_cap":"","_tribe_rsvp_for_event":"","_tribe_ticket_going_count":"","_tribe_ticket_not_going_count":"","_tribe_tickets_list":"[]","_tribe_ticket_has_attendee_info_fields":false,"footnotes":""},"categories":[18],"tags":[],"class_list":["post-31344","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-uncategorized"],"acf":[],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v27.1.1 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Investigating Code Quality: Crime Scene++ - ANGULARarchitects<\/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.angulararchitects.io\/en\/blog\/crime-scene\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Investigating Code Quality: Crime Scene++ - ANGULARarchitects\" \/>\n<meta property=\"og:description\" content=\"Code analysis is more complex than ever. We could argue this is due to the advent of tools like Claude Code, Cursor, and their peers. That makes it even more important to grasp a codebase quickly. To help with that, I\u2019ve added new tools and metrics to Detective to surface anti-patterns and identify hotspots faster. [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/\" \/>\n<meta property=\"og:site_name\" content=\"ANGULARarchitects\" \/>\n<meta property=\"article:published_time\" content=\"2025-09-30T09:29:00+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_07.30.272x.png\" \/>\n<meta name=\"author\" content=\"Murat Sari\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:creator\" content=\"@daniel\" \/>\n<meta name=\"twitter:label1\" content=\"Written by\" \/>\n\t<meta name=\"twitter:data1\" content=\"Murat Sari\" \/>\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:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/\"},\"author\":{\"name\":\"Murat Sari\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/8b851c1c2595cabe82a9ce8fb10fde7c\"},\"headline\":\"Investigating Code Quality: Crime Scene++\",\"datePublished\":\"2025-09-30T09:29:00+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/\"},\"wordCount\":1060,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg\",\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/\",\"name\":\"Investigating Code Quality: Crime Scene++ - ANGULARarchitects\",\"isPartOf\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage\"},\"thumbnailUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg\",\"datePublished\":\"2025-09-30T09:29:00+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#breadcrumb\"},\"inLanguage\":\"en-US\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg\",\"width\":1000,\"height\":527},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\/\/www.angulararchitects.io\/en\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Investigating Code Quality: Crime Scene++\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#website\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"name\":\"ANGULARarchitects\",\"description\":\"AngularArchitects.io\",\"publisher\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-US\"},{\"@type\":\"Organization\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#organization\",\"name\":\"ANGULARarchitects\",\"alternateName\":\"SOFTWAREarchitects\",\"url\":\"https:\/\/www.angulararchitects.io\/en\/\",\"logo\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\",\"url\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"contentUrl\":\"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg\",\"width\":644,\"height\":216,\"caption\":\"ANGULARarchitects\"},\"image\":{\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/\"},\"sameAs\":[\"https:\/\/github.com\/angular-architects\",\"https:\/\/www.linkedin.com\/company\/angular-architects\/\"]},{\"@type\":\"Person\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/8b851c1c2595cabe82a9ce8fb10fde7c\",\"name\":\"Murat Sari\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"en-US\",\"@id\":\"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/secure.gravatar.com\/avatar\/e885be3561c9cc577af106107ea6fbf4cb40dab2e6f73f715c56f07026588a35?s=96&d=mm&r=g\",\"contentUrl\":\"https:\/\/secure.gravatar.com\/avatar\/e885be3561c9cc577af106107ea6fbf4cb40dab2e6f73f715c56f07026588a35?s=96&d=mm&r=g\",\"caption\":\"Murat Sari\"},\"sameAs\":[\"https:\/\/x.com\/daniel\"]}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Investigating Code Quality: Crime Scene++ - ANGULARarchitects","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.angulararchitects.io\/en\/blog\/crime-scene\/","og_locale":"en_US","og_type":"article","og_title":"Investigating Code Quality: Crime Scene++ - ANGULARarchitects","og_description":"Code analysis is more complex than ever. We could argue this is due to the advent of tools like Claude Code, Cursor, and their peers. That makes it even more important to grasp a codebase quickly. To help with that, I\u2019ve added new tools and metrics to Detective to surface anti-patterns and identify hotspots faster. [&hellip;]","og_url":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/","og_site_name":"ANGULARarchitects","article_published_time":"2025-09-30T09:29:00+00:00","og_image":[{"url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/CleanShot_2025-09-05_at_07.30.272x.png","type":"","width":"","height":""}],"author":"Murat Sari","twitter_card":"summary_large_image","twitter_creator":"@daniel","twitter_misc":{"Written by":"Murat Sari","Est. reading time":"5 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#article","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/"},"author":{"name":"Murat Sari","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/8b851c1c2595cabe82a9ce8fb10fde7c"},"headline":"Investigating Code Quality: Crime Scene++","datePublished":"2025-09-30T09:29:00+00:00","mainEntityOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/"},"wordCount":1060,"commentCount":0,"publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg","inLanguage":"en-US","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/","url":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/","name":"Investigating Code Quality: Crime Scene++ - ANGULARarchitects","isPartOf":{"@id":"https:\/\/www.angulararchitects.io\/en\/#website"},"primaryImageOfPage":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage"},"thumbnailUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg","datePublished":"2025-09-30T09:29:00+00:00","breadcrumb":{"@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#breadcrumb"},"inLanguage":"en-US","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/"]}]},{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#primaryimage","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2025\/09\/shutterstock_2544221945.jpg","width":1000,"height":527},{"@type":"BreadcrumbList","@id":"https:\/\/www.angulararchitects.io\/en\/blog\/crime-scene\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/www.angulararchitects.io\/en\/"},{"@type":"ListItem","position":2,"name":"Investigating Code Quality: Crime Scene++"}]},{"@type":"WebSite","@id":"https:\/\/www.angulararchitects.io\/en\/#website","url":"https:\/\/www.angulararchitects.io\/en\/","name":"ANGULARarchitects","description":"AngularArchitects.io","publisher":{"@id":"https:\/\/www.angulararchitects.io\/en\/#organization"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.angulararchitects.io\/en\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-US"},{"@type":"Organization","@id":"https:\/\/www.angulararchitects.io\/en\/#organization","name":"ANGULARarchitects","alternateName":"SOFTWAREarchitects","url":"https:\/\/www.angulararchitects.io\/en\/","logo":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/","url":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","contentUrl":"https:\/\/www.angulararchitects.io\/wp-content\/uploads\/2023\/07\/AA-Logo-RGB-horizontal-inside-knowledge-black.svg","width":644,"height":216,"caption":"ANGULARarchitects"},"image":{"@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/logo\/image\/"},"sameAs":["https:\/\/github.com\/angular-architects","https:\/\/www.linkedin.com\/company\/angular-architects\/"]},{"@type":"Person","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/8b851c1c2595cabe82a9ce8fb10fde7c","name":"Murat Sari","image":{"@type":"ImageObject","inLanguage":"en-US","@id":"https:\/\/www.angulararchitects.io\/en\/#\/schema\/person\/image\/","url":"https:\/\/secure.gravatar.com\/avatar\/e885be3561c9cc577af106107ea6fbf4cb40dab2e6f73f715c56f07026588a35?s=96&d=mm&r=g","contentUrl":"https:\/\/secure.gravatar.com\/avatar\/e885be3561c9cc577af106107ea6fbf4cb40dab2e6f73f715c56f07026588a35?s=96&d=mm&r=g","caption":"Murat Sari"},"sameAs":["https:\/\/x.com\/daniel"]}]}},"_links":{"self":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/31344","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/users\/20"}],"replies":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/comments?post=31344"}],"version-history":[{"count":0,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/posts\/31344\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media\/31341"}],"wp:attachment":[{"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/media?parent=31344"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/categories?post=31344"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.angulararchitects.io\/en\/wp-json\/wp\/v2\/tags?post=31344"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}