Skip to main content

On This Page

Understanding the Symptoms: Why Your FinOps Explainer Might Not Be Landing

2 min read
Share

These articles are AI-generated summaries. Please check the original sources for full details.

Understanding the Symptoms: Why Your FinOps Explainer Might Not Be Landing

You’ve invested time and effort into a comprehensive FinOps explainer, yet it’s met with lukewarm reception and slow adoption. Often, the issue isn’t the data, but its presentation: teams continue to provision resources without cost awareness, leading to budget surprises.

Why This Matters

Traditional cost reporting often fails to connect technical details to business outcomes, resulting in an estimated $14.1 billion in wasted cloud spend in 2023 according to Flexera’s State of the Cloud Report. Effectively communicating the value of FinOps is crucial to shifting organizational culture and optimizing cloud investment.

Key Insights

  • FinOps adoption is growing: The FinOps Foundation reported a 40% increase in certified professionals in 2024.
  • Showback/Chargeback models are evolving: Moving beyond simple cost allocation to sophisticated models that incorporate business context is critical.
  • IaC enhances cost control: Infrastructure as Code tools like Terraform allow preemptive cost management through automated resource provisioning.

Working Example

# Example Python (for AWS Lambda) to stop idle EC2 instances (pseudocode)
import boto3
import os
REGION = os.environ.get('AWS_REGION', 'us-east-1')
IDLE_THRESHOLD_CPU = 5.0 # percentage
IDLE_PERIOD_DAYS = 7
def lambda_handler(event, context):
ec2 = boto3.client('ec2', region_name=REGION)
cloudwatch = boto3.client('cloudwatch', region_name=REGION)
running_instances = ec2.describe_instances(
Filters=[{'Name': 'instance-state-name', 'Values': ['running']}]
)
instances_to_stop = []
for reservation in running_instances['Reservations']:
for instance in reservation['Instances']:
instance_id = instance['InstanceId']
# Get CPU utilization metric for the last N days
response = cloudwatch.get_metric_statistics(
Period=86400 * IDLE_PERIOD_DAYS, # Daily average over N days
StartTime=datetime.utcnow() - timedelta(days=IDLE_PERIOD_DAYS),
EndTime=datetime.utcnow(),
MetricName='CPUUtilization',
Namespace='AWS/EC2',
Statistics=['Average'],
Dimensions=[{'Name': 'InstanceId', 'Value': instance_id}]
)
avg_cpu = response['Datapoints'][0]['Average'] if response['Datapoints'] else 100 # Assume busy if no data
if avg_cpu < IDLE_THRESHOLD_CPU:
instances_to_stop.append(instance_id)
if instances_to_stop:
ec2.stop_instances(InstanceIds=instances_to_stop)
print(f"Stopped instances: {instances_to_stop}")
else:
print("No idle instances to stop.")
return {
'statusCode': 200,
'body': 'Processed idle instances.'
}

Practical Applications

  • Company/system: Netflix uses granular cost allocation and automation to optimize spend across a large distributed microservices architecture, aligning cloud costs to specific streaming titles.
  • Pitfall: Overly complex tagging schemes increase administrative overhead and reduce adoption; keep tagging simple and focused on key allocation dimensions.

References:


Continue reading

Next article

Stop Scattering Your Business Logic: Meet Masterly.BusinessRules for .NET

Related Content