Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 0 additions & 6 deletions TODO.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,4 @@
# TODO

- [ ] Thank You pages to contain case studies slider for visibility
- [ ] When there's more case studies, "see other" case studies at the bottom of the case study page.
- [ ] More visibility across the website on case study success stories (instead of hidden under the "CONTENT" dropdown only)
- [ ] Audit services page, add visibiltiy there as well.
- [ ] Revamp the index listing page of Case Studies (https://masterpoint.io/case-studies/) once we get more case studies.
- [ ] OpenTofu Exclude Flag Blog Post: cross link to Cursor case study as a way to see where we took use of this feature or something like that, at the bottom callout section.
- [ ] OpenTofu Exclude Flag -- link to a dedicated OpenTofu OpenTelemetry blog araticle
- [ ] Add "drift" in TF terminology breakdown blog post.
19 changes: 17 additions & 2 deletions assets/css/custom.scss
Original file line number Diff line number Diff line change
Expand Up @@ -1951,7 +1951,10 @@ footer {
}
}
}
#our-word {
// /services/audit mirrors this section (content/sections/iac-our-word.md,
// same id) — @at-root scopes the treatment to both pages.
@at-root #home #our-word,
#page-iac-audit-services #our-word {
Comment thread
oycyc marked this conversation as resolved.
color: #fff;
padding: 5.25rem 0 3rem;
background: $pine;
Expand Down Expand Up @@ -3169,8 +3172,20 @@ footer {
padding: 0 0 3.5rem;
}

.col {
@media (min-width: 768px) {
width: 86%;
max-width: 86%;
flex: 0 0 auto;
}
}

.quoteLabel {
margin-bottom: 2.5rem;
margin-bottom: 1.25rem;
}

.flexslider .slides {
align-items: flex-start;
Comment thread
coderabbitai[bot] marked this conversation as resolved.
}

.flex-control-paging {
Expand Down
9 changes: 8 additions & 1 deletion content/blog/2025-05-21-tf-terminology-breakdown.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: Terraform + OpenTofu Terminology Breakdown
slug: terraform-opentofu-terminology-breakdown
author: Matt Gowie
date: 2025-05-21
date_modified: 2026-06-10 # Be sure to use this if you've updated the post as this helps with SEO and index freshness
date_modified: 2026-07-22 # Be sure to use this if you've updated the post as this helps with SEO and index freshness
description: List of Terraform and OpenTofu terms with definitions and explanations.
image: /img/updates/tf-terminology-breakdown.png
callout: <p>👋 <b>Got a term that you're still confused on in the TF or IaC space that you want us to include here? <a href='/contact'>Get in touch and we'd be happy to add it!</a></b></p>
Expand All @@ -31,6 +31,7 @@ callout: <p>👋 <b>Got a term that you're still confused on in the TF or IaC sp
- [Terratest](#terratest)
- [Industry Terms](#industry-terms)
- [ClickOps](#clickops)
- [Drift](#drift)
- [Provider](#provider)
- [TACOS](#tacos)
- [TF Frameworks](#tf-frameworks)
Expand Down Expand Up @@ -154,6 +155,12 @@ The trouble with ClickOps is that it doesn't scale: manually-created resources a

You can read more on this topic here: [What is ClickOps?](https://spacelift.io/blog/what-is-clickops) For a real-world example, read our **[case study success story on how we brought MarketSpark to 100% Infrastructure as Code](/case-studies/marketspark/)** 📈, unlocking benefits such as disaster recovery and faster infrastructure deployments.

## Drift

Drift (sometimes called configuration drift or state drift) is when the real-world state of your infrastructure no longer matches what your code and state file say it should be. This typically happens when changes are made outside of the normal Terraform workflow: someone makes a quick fix in the cloud console ([ClickOps](#clickops)), an automated process modifies a resource, or a cloud provider changes something on its end. It's dangerous because it silently undermines the core promise of IaC: that your code is the source of truth.

You can surface drift by running `terraform plan` (or `tofu plan`) with the `-refresh-only` flag, and many [TACOS](#tacos) platforms offer scheduled drift detection that alerts you when your infrastructure has diverged from code. The long-term fix is process: make all changes through your TF workflow, and when out-of-band changes do happen, reconcile them back into code promptly. Read more [in depth in this article](https://spacelift.io/blog/drift-detection).
Comment thread
coderabbitai[bot] marked this conversation as resolved.

## Provider

A provider in TF is a plugin that enables interaction with an API; typically for a specific infrastructure platform or service. Providers serve as the bridge between TF configuration code and the actual infrastructure resources you're managing. Each provider (like AWS, Azure, GCP, Kubernetes, GitHub, CloudFlare, DataDog, etc.) contains resource types and data sources that correspond to services offered by that platform. Providers must be configured in your TF code with the necessary authentication credentials and regional settings before you can use their associated resources.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ title: "Using OpenTofu's Exclude Flag to Isolate Performance Bottlenecks"
author: Yangci Ou
slug: using-opentofu-exclude-flag-isolate-performance-bottlenecks
date: 2026-06-22
# date_modified: 2026-xx-xx Be sure to use this if you've updated the post as this helps with SEO and index freshness
date_modified: 2026-07-22 # Be sure to use this if you've updated the post as this helps with SEO and index freshness
description: "Pair OpenTofu's exclude flag with OpenTelemetry tracing to isolate and prove Terraform performance bottlenecks. A real-world story of cutting plan times from 7 minutes to 2 by pinpointing AWS Route 53 API rate limiting."
image: /img/updates/opentofu-exclude-flag-performance-bottlenecks/opentofu-exclude-flag.png
callout: <p>👋 <b>If you're ready to take your infrastructure to the next level, we're here to help. We love to work together with engineering teams to help them build well-documented, scalable, automated IaC that make their jobs easier. <a href='/contact'>Get in touch!</a></p>
Expand Down Expand Up @@ -70,7 +70,7 @@ Looking at the OpenTelemetry traces, it showed that individual `aws_route53_reco
</ErrorResponse>
```

Route 53 has a [hard cap of five API requests per second, per account](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests), according to the official AWS documentation. We even filed a ticket with AWS support to see if there was any way to get it raised; the answer a flat "no" because DNS is critical infrastructure and 5 requests / second is the hard limit. This matches with other [engineers' experiences](https://github.com/rancher/rancher/issues/3257) as well.
Route 53 has a [five API requests per second rate limit, per account](https://docs.aws.amazon.com/Route53/latest/DeveloperGuide/DNSLimitations.html#limits-api-requests), according to the official AWS documentation. We even filed a ticket with AWS support and spoke to an AWS Technical Account Manager (TAM) to see if there was any way to get it raised; the answer a flat "no" because DNS is critical infrastructure and 5 requests / second is the hard limit. This matches with other [engineers' experiences](https://github.com/rancher/rancher/issues/3257) as well.

Buried in the 3,000 resources were 400 AWS Route 53 records, each as its own [TF resource](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/route53_record), and the provider read each record as individual API requests. 400 records (AWS API requests) at 5 requests per second is 80 seconds. But as mentioned above, in an enterprise environment, there are many dependencies, so the bottleneck compounds well past the theoretical 80 seconds.

Expand Down Expand Up @@ -152,3 +152,5 @@ The OpenTofu docs are blunt about targeting and exclusion, and they're right to
We used OpenTelemetry traces with the exclude flag to isolate the problem & confirm the root cause, then went forward with the refactor. It helped us gain the hard evidence that confirms the benefits to justify the refactor.

When TF runs are mysteriously slow and you suspect a particular resource type or module is the culprit, OpenTofu's excluding feature lets you test that hypothesis in minutes, against your real state, without refactoring a line of code or affecting real infrastructure.

Check out our [case study success story with Cursor](https://masterpoint.io/case-studies/cursor) where we used this technique to isolate and prove a performance bottleneck.
2 changes: 1 addition & 1 deletion content/case-studies/cursor.md
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ We had one giant workspace that took way too long to plan. It was killing us.
But the problem wasn't just the lack of speed. It was a lack of engineering confidence in the Infrastructure as Code system. Issues included:

- The AWS console was used to [manually make changes](https://masterpoint.io/blog/terraform-opentofu-terminology-breakdown/#clickops) during incidents and these fixes were never rolled into Terraform, and so were later inadvertently reverted.
- Managing ECS deployments through Terraform caused constant [drift](https://spacelift.io/blog/drift-detection) in the production terralith, flooding PR diffs with hundreds of unrelated changes.
- Managing ECS deployments through Terraform caused constant [drift](https://masterpoint.io/blog/terraform-opentofu-terminology-breakdown/#drift) in the production terralith, flooding PR diffs with hundreds of unrelated changes.

Over time, the team stopped trusting the system, let alone reading the diffs.

Expand Down
2 changes: 1 addition & 1 deletion content/sections/iac-cta.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
---
title: Ready to Own Your Infrastructure?
weight: 7
weight: 9
position: justify-content-center text-center
size: col-12 col-md-10 col-lg-8
#section_image: /img/diverse_group_of_doctors.jpg
Expand Down
15 changes: 15 additions & 0 deletions content/sections/iac-our-word.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
---
title: Don't take our word for it...
weight: 7
size: col-12 col-md-7
image: /img/bg_our_word.jpg
section_categories:
- iacaudit
# Reuses the homepage section id so the #our-word CSS block in custom.scss
# (centered column, scrim, pagination) applies identically on this page.
id: our-word
---

### Our clients love our hands-on approach {.text-gradient .quoteLabel}

{{<testimonials>}}
Comment thread
coderabbitai[bot] marked this conversation as resolved.
23 changes: 23 additions & 0 deletions content/sections/iac-success-stories.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
---
title: Case Study Success Stories
weight: 8
section_categories:
- iacaudit
id: iac-success-stories
---

<div class="row justify-content-center text-center">
<div class="col col-12 col-md-10 col-lg-8 col-xl-7">

### <span class="text-gradient">SUCCESS STORIES</span> {.groupTitle .text-center .text-rhythm}

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use an H2 for the section heading.

This Markdown file has no preceding H2, so ### skips a heading level and triggers MD001. Change it to ##; the existing .groupTitle classes will preserve the visual styling.

🧰 Tools
🪛 markdownlint-cli2 (0.23.0)

[warning] 12-12: Heading levels should only increment by one level at a time
Expected: h2; Actual: h3

(MD001, heading-increment)

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@content/sections/iac-success-stories.md` at line 12, Update the SUCCESS
STORIES heading in the Markdown section to use an H2 (`##`) instead of an H3
(`###`), preserving the existing text and `.groupTitle .text-center
.text-rhythm` classes.

Source: Linters/SAST tools


<p class="font20 text-pine">See case study success stories and learn how engineering teams partner with Masterpoint to turn tangled infrastructure into platforms that scale.</p>

</div>
</div>

{{<case-study-slider>}}

<div class="text-center csh-see-all">
<a href="/case-studies/" class="button btn-outline-gradient text-pine btn-big">See All Case Studies →</a>
</div>
8 changes: 7 additions & 1 deletion docs/case-studies.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,7 +77,13 @@ card grid to stay scannable as the list grows. Card image = each study's
Featured case-study slider on the homepage (section
`content/sections/home-case-studies.md`, id `#case-study-highlights`, weight 5).
One dark pine card per study (logo pill, title, blurb, CTA, photo) on a sliding
track navigated by a client-logo tab strip.
track navigated by a client-logo tab strip. Reused verbatim on `/services/audit/`
via `content/sections/iac-success-stories.md` (weight 8, after the quotes section,
before the CTA) — the shortcode and `.csh-*` styles are class-scoped/page-agnostic,
so keep the two section files' body content in sync when editing either. The
homepage quotes/testimonials section is likewise mirrored there as
`content/sections/iac-our-word.md` (weight 7), which reuses `id: our-word` so the
`#our-word` CSS applies unchanged.

- **Files:** `layouts/shortcodes/case-study-slider.html` (self-contained vanilla
JS, no jQuery — NOT flexslider, which `plugins.js` would hijack) + the `.csh-*`
Expand Down