{"id":615173,"date":"2025-05-26T10:06:16","date_gmt":"2025-05-26T08:06:16","guid":{"rendered":"https:\/\/www.devoteam.com\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/"},"modified":"2025-05-26T11:22:37","modified_gmt":"2025-05-26T09:22:37","slug":"reducing-technical-debt-with-azure-verified-modules","status":"publish","type":"expert-view","link":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/","title":{"rendered":"Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules"},"content":{"rendered":"\n<p class=\"wp-block-yoast-seo-estimated-reading-time yoast-reading-time__wrapper\"><span class=\"yoast-reading-time__icon\"><svg aria-hidden=\"true\" focusable=\"false\" data-icon=\"clock\" width=\"20\" height=\"20\" fill=\"none\" stroke=\"currentColor\" style=\"display:inline-block;vertical-align:-0.1em\" role=\"img\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\" viewBox=\"0 0 24 24\"><path stroke-linecap=\"round\" stroke-linejoin=\"round\" stroke-width=\"2\" d=\"M12 8v4l3 3m6-3a9 9 0 11-18 0 9 9 0 0118 0z\"><\/path><\/svg><\/span><span class=\"yoast-reading-time__spacer\" style=\"display:inline-block;width:1em\"><\/span><span class=\"yoast-reading-time__descriptive-text\">Estimated reading time: <\/span><span class=\"yoast-reading-time__reading-time\">8<\/span><span class=\"yoast-reading-time__time-unit\"> minutes<\/span><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Designing infrastructure as code (IaC) for Azure using <a href=\"https:\/\/devoteam.info\/me\/expert-view\/terraform-leader-cloud-application-development\/\">Terraform<\/a> brings significant benefits, but also recurring challenges. One of the most consistent pain points I&#8217;ve observed across various projects comes from the <strong>granularity and interdependence of modules<\/strong>.&nbsp;<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In this article, we will examine the two common traps Terraform modules fall into \u2014 being overly simplistic or overly specific. But pointing out the potential challenges is not enough! We will focus on how to address them and design a robust and maintainable Azure infrastructure using Terraform&#8217;s Azure Verified Modules (<a href=\"https:\/\/azure.github.io\/Azure-Verified-Modules\/\">AVM<\/a>).&nbsp;<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-the-power-and-pitfalls-of-terraform-modules\">The Power and Pitfalls of Terraform Modules<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Terraform modules are the building blocks of scalable and maintainable Infrastructure as Code (IaC). By encapsulating logic into reusable, composable components, they enable engineering teams to enforce consistency, reduce duplication, and accelerate infrastructure delivery.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">But as powerful as modules are, they can just as easily become a source of fragility and inefficiency when misused, especially when teams fall into two common traps &#8211; simplistic modules and overly specific modules.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-1-simplistic-modules-no-abstraction-no-value\">1. <strong>Simplistic Modules: No Abstraction, No Value<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">These modules are often thin wrappers around a single Terraform resource with little to no added logic. Here is an example:<\/p>\n\n\n\n<p class=\"has-gray-light-background-color has-background wp-block-paragraph\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">module \"basic_storage\" {<br>  source = \".\/modules\/storage-account\"<br>  name &nbsp; = var.name<br>}<\/mark><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Where the module merely wraps:<\/p>\n\n\n\n<p class=\"has-gray-light-background-color has-background wp-block-paragraph\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">resource \"azurerm_storage_account\" \"this\" {<br>   name &nbsp; = var.name<br>   resource_group_name&nbsp; &nbsp; &nbsp; = var.resource_group_name<br>   location &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = var.location<br>   account_tier &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = \"Standard\"<br>   account_replication_type = \"LRS\"<br>}<\/mark><\/code><\/p>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-5d9a58c0 wp-block-group-is-layout-constrained\" style=\"background-color:#fcd9dd94;padding-top:var(--wp--preset--spacing--small);padding-right:var(--wp--preset--spacing--small);padding-bottom:var(--wp--preset--spacing--small);padding-left:var(--wp--preset--spacing--small)\">\n<h4 class=\"wp-block-heading has-base-font-size\" id=\"h-why-this-is-a-problem\"><strong>Why This Is a Problem:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>No real encapsulation: You\u2019re not abstracting complexity or enforcing best practices.<\/li>\n\n\n\n<li>No added value: It\u2019s easier and clearer to use the resource directly.<\/li>\n\n\n\n<li>Code scattering: The logic gets fragmented across unnecessary files, making debugging harder.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">In these cases, modules serve as overhead instead of abstraction. They increase indirection and offer no return on that investment.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-2-specific-modules-locked-in-by-design\">2. <strong>Specific Modules: Locked In by Design<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">At the other extreme, we find modules that try to do too much for a specific use case. <br>For example:<\/p>\n\n\n\n<p class=\"has-gray-light-background-color has-background wp-block-paragraph\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">module \"app_network\" {<br>  source = \".\/modules\/vnet\"<br>  environment = \"production\"<br>  location&nbsp; &nbsp; = \"centralus\"<br>  app_type&nbsp; &nbsp; = \"web-app\"<br>  enable_redis = true<br>  enable_sql &nbsp; = true<br>}<\/mark><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Inside, the module creates a full virtual network plus subnets for Redis, SQL, web apps, all tied to naming conventions and settings that work only for one project.<\/p>\n\n\n\n<div class=\"wp-block-group has-background has-global-padding is-layout-constrained wp-container-core-group-is-layout-5d9a58c0 wp-block-group-is-layout-constrained\" style=\"background-color:#fcd9dd85;padding-top:var(--wp--preset--spacing--small);padding-right:var(--wp--preset--spacing--small);padding-bottom:var(--wp--preset--spacing--small);padding-left:var(--wp--preset--spacing--small)\">\n<h4 class=\"wp-block-heading has-base-font-size\" id=\"h-why-this-is-a-problem-0\"><strong>Why This Is a Problem:<\/strong><\/h4>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Low reusability: Designed for a single scenario, unusable elsewhere without forking.<\/li>\n\n\n\n<li>High coupling: Business logic and infrastructure concerns are mixed, making refactoring painful.<\/li>\n\n\n\n<li>Maintenance nightmare: Small changes for one consumer risk breaking others.<\/li>\n<\/ul>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\">These types of modules often come up from a &#8220;build once, use forever&#8221; mindset, but in reality, they create infrastructure silos.<\/p>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-the-result-technical-debt-in-infrastructure-code\"><strong>The Result: Technical Debt in Infrastructure Code<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">When modules swing too far in either direction, they introduce a debt that compounds over time:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Symptoms-and-Causes-of-Technical-Debt-1024x576.jpg\" alt=\"Symptoms and Causes of Technical Debt in Infrastructure Code - Symptoms: 1)Excessive duplication\n2)Hard-to-debug code\n3)Inflexible deployments\n4)Poor team onboarding\n5Slow iteration\nRoot Cause: 1)Overly specific modules\n2)Unnecessary abstraction layers\n3)Too opinionated module logic\n4)Inconsistent module conventions\n5)High coupling between modules\" class=\"has-border-color has-gray-light-border-color wp-image-613512\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Symptoms-and-Causes-of-Technical-Debt-1024x576.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Symptoms-and-Causes-of-Technical-Debt-300x169.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Symptoms-and-Causes-of-Technical-Debt-768x432.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Symptoms-and-Causes-of-Technical-Debt-1536x864.jpg 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Symptoms-and-Causes-of-Technical-Debt.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Ironically, modules built to accelerate delivery end up slowing teams down, as they become difficult to maintain, extend, or confidently reuse.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-4-principles-for-designing-effective-terraform-modules\"><strong>4 Principles for Designing Effective Terraform Modules<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To unlock the power of modules without falling into these traps, consider these design principles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>Design for composition, not inheritance:<\/strong> Modules should be small, composable units that can be combined to form patterns, not do everything themselves.<\/li>\n\n\n\n<li><strong>Focus on interface clarity: <\/strong>A module should expose a clean, minimal set of inputs and outputs. Avoid exposing every possible variable from the underlying resources.<\/li>\n\n\n\n<li><strong>Encapsulate opinionated defaults, allow overrides:<\/strong> Let modules encode secure defaults (e.g., encryption, TLS), but allow flexibility via optional parameters.<\/li>\n\n\n\n<li><strong>Separate concerns: <\/strong>Don\u2019t mix networking, identity, compute, and storage in the same module. Let consumers orchestrate these via higher-order pattern modules.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-solution-introducing-azure-verified-modules-avm\"><strong>Solution: Introducing Azure Verified Modules (AVM)<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">To tackle these issues, Microsoft introduced Azure Verified Modules (<a href=\"https:\/\/azure.github.io\/Azure-Verified-Modules\/\">AVM<\/a>) a collection of rigorously reviewed Terraform modules that embody best practices for building secure, compliant, and production-grade Azure infrastructure.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Benefits-of-Azure-Verified-Modules-AVM-1024x576.jpg\" alt=\"Benefits of Azure Verified Modules: 1)Security-first defaults\n2)Standardisation\n3)Interoperability\n4)Validation by Microsoft and the community\" class=\"wp-image-613538\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Benefits-of-Azure-Verified-Modules-AVM-1024x576.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Benefits-of-Azure-Verified-Modules-AVM-300x169.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Benefits-of-Azure-Verified-Modules-AVM-768x432.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Benefits-of-Azure-Verified-Modules-AVM-1536x864.jpg 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Benefits-of-Azure-Verified-Modules-AVM.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-benefits-of-avm\"><strong>Benefits of AVM<\/strong><\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Security-first defaults: Built-in policies, naming conventions, and security settings.<\/li>\n\n\n\n<li>Standardisation: Ensures consistency across teams and projects.<\/li>\n\n\n\n<li>Interoperability: Modules are designed to work well together and across environments.<\/li>\n\n\n\n<li>Validation by Microsoft and the community: Each module undergoes thorough quality and security checks.<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading has-medium-font-size\" id=\"h-avm-module-types\"><strong>AVM Module Types<\/strong><\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">Azure Verified Modules (AVM) follow a clear classification model, designed to promote reusability, standardisation, and secure-by-default practices. Each module type serves a distinct purpose, allowing platform teams to compose infrastructure more effectively.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large has-custom-border\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/AVM-Module-Types-1024x576.jpg\" alt=\"AVM Module Types: 1)Resource Modules\n2)Pattern Modules\n3)Utility Modules\" class=\"has-border-color has-gray-light-border-color wp-image-613564\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/AVM-Module-Types-1024x576.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/AVM-Module-Types-300x169.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/AVM-Module-Types-768x432.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/AVM-Module-Types-1536x864.jpg 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/AVM-Module-Types.jpg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<ol style=\"font-style:normal;font-weight:600\" class=\"wp-block-list\">\n<li><strong>Resource Modules<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">These wrap one or more related Azure resources, providing abstraction, sensible defaults, and security best practices. Ideal for delivering reusable, standalone building blocks (e.g., storage accounts, resource groups, VNets).<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8d39b2df wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized wp-duotone-red-devoteam\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"512\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/09\/lightbulb-on-sharp-light.svg\" alt=\"\" class=\"wp-image-5419\" style=\"width:100px\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\"><strong>Use case: <\/strong><\/mark>Provisioning a resource group, storage account, or key vault with secure configurations baked in.Use case: Provisioning a resource group, storage account, or key vault with secure configurations baked in.<\/p>\n<\/div>\n\n\n\n<ol start=\"2\" style=\"font-style:normal;font-weight:600\" class=\"wp-block-list\">\n<li><strong>Pattern Modules<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">These combine multiple resource modules to implement common architectural patterns. They codify platform-level design principles and reduce duplication across projects.<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8d39b2df wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized wp-duotone-red-devoteam\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"512\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/09\/lightbulb-on-sharp-light.svg\" alt=\"\" class=\"wp-image-5419\" style=\"width:100px\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\"><strong>Use case: <\/strong><\/mark>A hub-and-spoke network topology, or a web application pattern including networking, compute, and monitoring.<\/p>\n<\/div>\n\n\n\n<ol start=\"3\" style=\"font-style:normal;font-weight:600\" class=\"wp-block-list\">\n<li><strong>Utility Modules<\/strong><\/li>\n<\/ol>\n\n\n\n<p class=\"wp-block-paragraph\">These modules do not provision Azure resources but support broader automation and standardisation. They often handle logic like naming conventions, tag policies, configuration processing, or telemetry.<\/p>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8d39b2df wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized wp-duotone-red-devoteam\"><img loading=\"lazy\" decoding=\"async\" width=\"640\" height=\"512\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/09\/lightbulb-on-sharp-light.svg\" alt=\"\" class=\"wp-image-5419\" style=\"width:100px\"\/><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\"><strong>Use case: <\/strong><\/mark>Generating standard resource names according to your org\u2019s naming strategy, or merging default tags with environment-specific tags.<\/p>\n<\/div>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-real-world-example-avm-resource-pattern-modules-in-action\"><strong>Real-World Example: AVM Resource + Pattern Modules in Action<\/strong><strong><br><\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This example demonstrates how Azure Verified Modules (AVM) can be leveraged to deploy a hub-and-spoke network topology with a shared resource group, adhering to enterprise-ready design principles. In this scenario, we focus exclusively on <strong>Pattern<\/strong> and <strong>Resource Modules<\/strong>, as <strong>Utility Modules<\/strong> typically serve more straightforward, supporting purposes and have limited complexity in their usage.<\/p>\n\n\n\n<p class=\"has-gray-light-background-color has-background wp-block-paragraph\"><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">module \"resourcegroup\" {<br>   source&nbsp; = <\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">\"Azure\/avm-res-resources-resourcegroup\/azurerm\"<br>   <\/mark><\/code><br>  <code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">version = \"0.2.1\"<br> name &nbsp; &nbsp; = var.resource_group.name<br> location = var.regions[var.primary_region]<br> tags = {<br>  alz = \"connectivity\"<br> }<br>}<br><\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">module \"hub-spoke\" {<br>source&nbsp; = <\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">\"Azure\/avm-ptn-alz-connectivity-hub-and-spoke-vnet\/azurerm\"<br> <\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">version = \"0.1.0\"<br><\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">enable_telemetry = false<\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\"><br>hub_virtual_networks = {<\/mark><\/code><br><code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">  primary = {<br>   hub_virtual_network = {<br>    name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = \"vnet-hub-primary\"<br>    address_space &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = [\"10.0.0.0\/22\"]<br>   location&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = local.regions.primary<br>   resource_group_name &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = module.resourcegroup.name<br>   resource_group_creation_enabled &nbsp; = false<br>   subnets = {<br>     \"default\" = {<br>      name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = \"default\"<br>      address_prefixes&nbsp; = [\"10.0.0.0\/24\"]<br>    }<br>   }<br> }<br> spoke_virtual_networks = {<br>   spoke1 = <code><mark style=\"background-color:rgba(0, 0, 0, 0);color:#108311\" class=\"has-inline-color\">{<\/mark><\/code><br>     name&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; = \"vnet-spoke1\"<br>     address_space = [\"10.1.0.0\/24\"]<br>     location&nbsp; &nbsp; &nbsp; = local.regions.primary<br>    }<br>   }<br>  }<br> }<br>}<\/mark><\/code><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The example above demonstrates how Azure Verified Modules (AVM) enable real-world, scalable infrastructure design using Terraform:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>A resource module ensures consistent, secure creation of foundational components like resource groups.<\/li>\n\n\n\n<li>A pattern module implements best-practice architectures, such as the hub-and-spoke network topology aligned with Azure Landing Zone (ALZ) principles.<\/li>\n\n\n\n<li>A clean separation of concerns enhances maintainability, auditability, and reusability across projects.<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">This modular, composable approach doesn&#8217;t just simplify provisioning; it also supports the evolution of cloud infrastructure toward self-service delivery models. In these models, platform teams build reusable components, and internal developers can deploy secure, compliant environments without deep infrastructure knowledge.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">As organisations scale, Infrastructure as Code (IaC) becomes critical\u2014but it also becomes complex. <br><strong>Poorly scoped Terraform modules can lead to:<\/strong><\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Fragile, hard-to-maintain codebases<\/li>\n\n\n\n<li>Inefficient onboarding and handoffs<\/li>\n\n\n\n<li>Inflexible module logic that inhibits change<\/li>\n\n\n\n<li>Technical debt that undermines automation efforts<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">AVM addresses these challenges by offering a curated, enterprise-ready module ecosystem, built around clear design principles:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Secure, opinionated defaults baked in<\/li>\n\n\n\n<li>Standardised structure for consistency and interoperability<\/li>\n\n\n\n<li>Granularity designed for reuse, not rigidity<\/li>\n\n\n\n<li>Strong alignment with Azure governance and landing zone frameworks<\/li>\n<\/ul>\n\n\n\n<p class=\"wp-block-paragraph\">In essence, AVM helps organisations avoid the pitfalls of module misuse, embrace platform engineering practices, and deliver infrastructure that is scalable, secure, and built for the future.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"h-going-a-step-further-cloud-enablers-by-devoteam\"><strong>Going a step further: Cloud Enablers by Devoteam<\/strong><\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">At Devoteam, we know that managing complex cloud environments goes far beyond just writing Terraform. It requires structure, security, and speed at scale. That\u2019s why we created <a href=\"https:\/\/devoteam.info\/microsoft\/cloud-enabler\/\">Cloud Enablers<\/a>: a fully automated, production-ready framework for accelerating the delivery of cloud foundations on Azure.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Built on industry best practices and deeply aligned with Microsoft Cloud Adoption Framework, Cloud Enablers empowers organisations to move fast without compromising on governance or security. It enables platform teams to deliver a standardised, enterprise-grade foundation, so developers and application teams can consume infrastructure as a service, safely and independently.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>See our Cloud Enabler explained in 60 seconds!<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Devoteam Cloud Enabler in 60 sec\" width=\"500\" height=\"281\" src=\"https:\/\/www.youtube.com\/embed\/G_fHbKEWF-4?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Whether you rely on GitHub or Azure DevOps, Cloud Enablers provides a secure, opinionated starting point with built-in automation, policy enforcement, and modular extensibility. It\u2019s how we help our clients adopt and manage Cloud Environments correctly from the start.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">With Cloud Enablers, your Azure platform becomes more than compliant, it becomes truly cloud-native, scalable, and ready for the future.<\/p>\n\n\n\n<div class=\"wp-block-group has-gray-light-background-color has-background is-vertical is-layout-flex wp-container-core-group-is-layout-5e24bdfd wp-block-group-is-layout-flex\" style=\"padding-top:var(--wp--preset--spacing--medium);padding-right:var(--wp--preset--spacing--medium);padding-bottom:var(--wp--preset--spacing--medium);padding-left:var(--wp--preset--spacing--medium)\">\n<h2 class=\"wp-block-heading has-xx-large-font-size wp-container-content-69bc4bdf\" id=\"h-3x-faster-cloud-migration-and-adoption\"><strong><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-primary-color\">3x faster<\/mark><\/strong> cloud migration and adoption<\/h2>\n\n\n\n<div class=\"wp-block-group is-nowrap is-layout-flex wp-container-core-group-is-layout-8d39b2df wp-block-group-is-layout-flex\">\n<figure class=\"wp-block-image size-large is-resized\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Cloud_Enabler_2023_black-2-edited-1024x576.png\" alt=\"\" class=\"wp-image-423424\" style=\"width:400px\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Cloud_Enabler_2023_black-2-edited-1024x576.png 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Cloud_Enabler_2023_black-2-edited-300x169.png 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Cloud_Enabler_2023_black-2-edited-768x432.png 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Cloud_Enabler_2023_black-2-edited-1536x864.png 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/Cloud_Enabler_2023_black-2-edited.png 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<div class=\"wp-block-group has-global-padding is-layout-constrained wp-block-group-is-layout-constrained\">\n<p class=\"has-medium-font-size wp-block-paragraph\"><strong>We\u2019ve built it, so you don\u2019t have to!<\/strong> Our Azure Cloud Enabler Framework<strong> <\/strong>accelerates your migration by 3 times and guarantees a secure and compliant outcome.<\/p>\n\n\n\n<div class=\"wp-block-buttons is-layout-flex wp-block-buttons-is-layout-flex\">\n<div class=\"wp-block-button\"><a class=\"wp-block-button__link wp-element-button\" href=\"https:\/\/devoteam.info\/microsoft\/cloud-enabler\/#contact\">Go Microsoft with us<\/a><\/div>\n<\/div>\n<\/div>\n<\/div>\n<\/div>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Designing infrastructure as code (IaC) for Azure using Terraform brings significant benefits, but also recurring challenges. One of the most consistent pain points I&#8217;ve observed across various projects comes from the granularity and interdependence of modules.&nbsp; In this article, we will examine the two common traps Terraform modules fall into \u2014 being overly simplistic or [&hellip;]<\/p>\n","protected":false},"featured_media":314488,"template":"","categories":[887,2334],"tags":[],"industry":[],"class_list":["post-615173","expert-view","type-expert-view","status-publish","has-post-thumbnail","hentry","category-cloud-native-app-development-me","category-microsoft-me"],"acf":[],"cards":"\n\t<div class=\"single-post-card\">\n\n\t\t<figure class=\"wp-block-post-featured-image\"><a href=\"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/\" target=\"_self\" ><img width=\"2560\" height=\"1707\" src=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg\" class=\"attachment-post-thumbnail size-post-thumbnail wp-post-image\" alt=\"Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules\" style=\"aspect-ratio:4\/3;width:100%;object-fit:cover;\" decoding=\"async\" loading=\"lazy\" srcset=\"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg 2560w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-300x200.jpg 300w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-1024x683.jpg 1024w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-768x512.jpg 768w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-1536x1024.jpg 1536w, https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-2048x1366.jpg 2048w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><\/a><\/figure>\n\n\t\t\n\t\t<div class=\"wp-block-group is-vertical is-layout-flex wp-container-core-group-is-layout-43282307 wp-block-group-is-layout-flex\">\n\t<p style=\"font-style:normal;font-weight:700\" class=\"has-link-color wp-elements-1 wp-block-lp-post-type has-text-color has-primary-color has-small-font-size\">Expert View<\/p>\n\n\t\t\n\t\t<h3 style=\"font-style:normal;font-weight:400\" class=\"wp-block-post-title has-base-font-size\"><a href=\"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/\" target=\"_self\" >Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules<\/a><\/h3><\/div>\n\t\t\n\t<\/div>\n\n","yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v28.4 (Yoast SEO v28.4) - https:\/\/yoast.com\/product\/yoast-seo-premium-wordpress\/ -->\n<title>Reduce Technical Debt with Azure Verified Modules: Expert Guide<\/title>\n<meta name=\"description\" content=\"Slash technical debt and build better infrastructure with Azure Verified Modules. Learn how AVM solve 2 common issues with Terraform modules.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/\" \/>\n<meta property=\"og:locale\" content=\"en_US\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules\" \/>\n<meta property=\"og:description\" content=\"Slash technical debt and build better infrastructure with Azure Verified Modules. Learn how AVM solve 2 common issues with Terraform modules.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/\" \/>\n<meta property=\"og:site_name\" content=\"Devoteam\" \/>\n<meta property=\"article:modified_time\" content=\"2025-05-26T09:22:37+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Terraform-Modules-Done-Right.jpg\" \/>\n\t<meta property=\"og:image:width\" content=\"1200\" \/>\n\t<meta property=\"og:image:height\" content=\"627\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/jpeg\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Est. reading time\" \/>\n\t<meta name=\"twitter:data1\" content=\"8 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/\",\"url\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/\",\"name\":\"Reduce Technical Debt with Azure Verified Modules: Expert Guide\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/#website\"},\"primaryImageOfPage\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/#primaryimage\"},\"image\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/#primaryimage\"},\"thumbnailUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg\",\"datePublished\":\"2025-05-26T08:06:16+00:00\",\"dateModified\":\"2025-05-26T09:22:37+00:00\",\"description\":\"Slash technical debt and build better infrastructure with Azure Verified Modules. Learn how AVM solve 2 common issues with Terraform modules.\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/#breadcrumb\"},\"inLanguage\":\"en-SA\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/\"]}]},{\"@type\":\"ImageObject\",\"inLanguage\":\"en-SA\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/#primaryimage\",\"url\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg\",\"contentUrl\":\"https:\\\/\\\/devoteam.info\\\/wp-content\\\/uploads\\\/2024\\\/12\\\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg\",\"width\":2560,\"height\":1707},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/reducing-technical-debt-with-azure-verified-modules\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/devoteam.info\\\/me\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Expert View\",\"item\":\"https:\\\/\\\/devoteam.info\\\/me\\\/expert-view\\\/\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/devoteam.info\\\/me\\\/#website\",\"url\":\"https:\\\/\\\/devoteam.info\\\/me\\\/\",\"name\":\"Devoteam\",\"description\":\"\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/devoteam.info\\\/me\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"en-SA\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"Reduce Technical Debt with Azure Verified Modules: Expert Guide","description":"Slash technical debt and build better infrastructure with Azure Verified Modules. Learn how AVM solve 2 common issues with Terraform modules.","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:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/","og_locale":"en_US","og_type":"article","og_title":"Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules","og_description":"Slash technical debt and build better infrastructure with Azure Verified Modules. Learn how AVM solve 2 common issues with Terraform modules.","og_url":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/","og_site_name":"Devoteam","article_modified_time":"2025-05-26T09:22:37+00:00","og_image":[{"width":1200,"height":627,"url":"https:\/\/devoteam.info\/wp-content\/uploads\/2025\/05\/Terraform-Modules-Done-Right.jpg","type":"image\/jpeg"}],"twitter_card":"summary_large_image","twitter_misc":{"Est. reading time":"8 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/","url":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/","name":"Reduce Technical Debt with Azure Verified Modules: Expert Guide","isPartOf":{"@id":"https:\/\/devoteam.info\/me\/#website"},"primaryImageOfPage":{"@id":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/#primaryimage"},"image":{"@id":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/#primaryimage"},"thumbnailUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg","datePublished":"2025-05-26T08:06:16+00:00","dateModified":"2025-05-26T09:22:37+00:00","description":"Slash technical debt and build better infrastructure with Azure Verified Modules. Learn how AVM solve 2 common issues with Terraform modules.","breadcrumb":{"@id":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/#breadcrumb"},"inLanguage":"en-SA","potentialAction":[{"@type":"ReadAction","target":["https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/"]}]},{"@type":"ImageObject","inLanguage":"en-SA","@id":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/#primaryimage","url":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg","contentUrl":"https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg","width":2560,"height":1707},{"@type":"BreadcrumbList","@id":"https:\/\/devoteam.info\/me\/expert-view\/reducing-technical-debt-with-azure-verified-modules\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/devoteam.info\/me\/"},{"@type":"ListItem","position":2,"name":"Expert View","item":"https:\/\/devoteam.info\/me\/expert-view\/"},{"@type":"ListItem","position":3,"name":"Terraform Modules Done Right: Reducing Technical Debt with Azure Verified Modules"}]},{"@type":"WebSite","@id":"https:\/\/devoteam.info\/me\/#website","url":"https:\/\/devoteam.info\/me\/","name":"Devoteam","description":"","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/devoteam.info\/me\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"en-SA"}]}},"uagb_featured_image_src":{"full":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1.jpg",2560,1707,false],"thumbnail":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-150x150.jpg",150,150,true],"medium":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-300x200.jpg",300,200,true],"medium_large":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-768x512.jpg",768,512,true],"large":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-1024x683.jpg",1024,683,true],"1536x1536":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-1536x1024.jpg",1536,1024,true],"2048x2048":["https:\/\/devoteam.info\/wp-content\/uploads\/2024\/12\/female-hand-holding-cloud-perforated-paper-craft-2021-08-26-15-55-23-utc-scaled-1-2048x1366.jpg",2048,1366,true]},"uagb_author_info":{"display_name":"aleksandra.juda","author_link":"https:\/\/devoteam.info\/me\/author\/"},"uagb_comment_info":0,"uagb_excerpt":"Designing infrastructure as code (IaC) for Azure using Terraform brings significant benefits, but also recurring challenges. One of the most consistent pain points I&#8217;ve observed across various projects comes from the granularity and interdependence of modules.&nbsp; In this article, we will examine the two common traps Terraform modules fall into \u2014 being overly simplistic or&hellip;","_links":{"self":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/expert-view\/615173","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/expert-view"}],"about":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/types\/expert-view"}],"version-history":[{"count":0,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/expert-view\/615173\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/media\/314488"}],"wp:attachment":[{"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/media?parent=615173"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/categories?post=615173"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/tags?post=615173"},{"taxonomy":"industry","embeddable":true,"href":"https:\/\/devoteam.info\/me\/wp-json\/wp\/v2\/industry?post=615173"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}