Reserved EC2 Instance: A Deep Dive in AWS Resources & Best Practices to Adopt
While organizations focus on optimizing their cloud spend and ensuring predictable capacity for their applications, Amazon EC2 Reserved Instances serve as a cornerstone financial tool that transforms unpredictable on-demand costs into strategic, long-term capacity commitments. According to AWS's own economic impact studies, organizations typically achieve 40-72% cost savings through Reserved Instance utilization, with enterprise customers reporting average savings of $2.2 million annually when properly implemented. The 2024 Cloud Financial Management Report by Flexera indicates that 87% of enterprises consider Reserved Instance optimization their top cloud cost management priority, yet only 31% feel confident in their current reservation strategy.
Reserved Instances represent more than just a billing discount mechanism - they're a capacity planning tool that allows organizations to lock in specific compute resources at predetermined rates. This becomes especially critical as cloud workloads mature from experimental to production-grade, where predictable costs and guaranteed capacity become business requirements rather than nice-to-have features. The State of Cloud Cost Management 2024 report shows that companies with mature Reserved Instance strategies reduce their overall EC2 costs by an average of 58% while maintaining 99.9% application availability.
In this blog post we will learn about what Reserved EC2 Instances are, how you can configure and work with them using Terraform, and learn about the best practices for this service.
What is Reserved EC2 Instance?
Reserved EC2 Instance is a billing construct that provides significant cost savings compared to On-Demand pricing in exchange for a commitment to use specific compute capacity for a one or three-year term. Rather than being an actual resource you launch like an EC2 Instance, Reserved Instances function as a discount that automatically applies to matching running instances within your AWS account.
The financial mechanics behind Reserved Instances operate on a capacity reservation model where you pay for compute resources whether you use them or not. This upfront or partial payment structure allows AWS to offer substantial discounts - typically 40-60% off On-Demand prices - because they can better predict and allocate their underlying infrastructure capacity. When you purchase a Reserved Instance, you're not reserving a specific physical server but rather claiming a billing discount that applies to any matching instances you run within the specified parameters.
The system works through an automatic matching process that occurs every hour. AWS evaluates all running instances in your account and applies Reserved Instance discounts to those that match the reservation's attributes: instance type, platform, tenancy, and Availability Zone (for zonal reservations) or region (for regional reservations). This matching happens transparently without any action required from you - the discount simply appears on your bill when qualifying instances are running.
Payment Options and Financial Flexibility
Reserved Instances offer three distinct payment models, each designed to accommodate different cash flow preferences and organizational budget structures. The All Upfront option requires 100% payment at purchase time and provides the maximum discount percentage, making it ideal for organizations with available capital looking to maximize savings. No Upfront reservations require no initial payment but offer smaller discounts, spreading the commitment across monthly payments over the term duration. Partial Upfront strikes a balance by requiring roughly 50% payment upfront with the remainder distributed monthly.
The financial implications extend beyond simple cost savings. Reserved Instances provide budget predictability that enables more accurate financial planning and resource allocation. Finance teams can model infrastructure costs with greater precision, knowing that a significant portion of their compute expenses are locked in at predetermined rates. This predictability becomes particularly valuable for organizations with seasonal workloads or those planning major application deployments.
The marketplace functionality adds another layer of financial flexibility. Organizations can sell unused Reserved Instances to other AWS customers through the Reserved Instance Marketplace, recovering a portion of their investment if business requirements change. This secondary market helps mitigate the risk of long-term capacity commitments by providing an exit strategy when reservations no longer align with actual usage patterns.
Architectural Considerations and Instance Matching
The architecture of Reserved Instance matching operates at the account level, with some considerations for multi-account environments. Within a single AWS account, Reserved Instances automatically apply to any matching instances regardless of which IAM user or role launched them. This account-level matching simplifies management but requires careful coordination in shared environments where multiple teams or applications share the same AWS account.
For organizations using AWS Organizations, Reserved Instance benefits can be shared across accounts within the same organization through consolidated billing. This sharing mechanism operates on a priority system where the purchasing account receives first priority for applying Reserved Instance discounts, with unused capacity automatically shared with other accounts in the organization. This cross-account sharing enables centralized purchasing strategies while maintaining decentralized resource management.
The matching algorithm considers several attributes when applying discounts. Instance type matching can be exact or flexible, depending on the reservation type. Regional Reserved Instances provide instance size flexibility within the same instance family, allowing a reservation for one large instance to apply to two medium instances or four small instances. This flexibility proves valuable when application requirements change over time or when teams need to adjust their compute configurations without losing reservation benefits.
EC2 Launch Templates and Auto Scaling Groups work seamlessly with Reserved Instances, as the matching occurs at the billing level rather than the resource level. This means that instances launched through automated scaling activities automatically receive Reserved Instance discounts when they match existing reservations, ensuring consistent cost optimization across both static and dynamic workloads.
Strategic Importance of Reserved Instance Planning
Reserved Instance planning represents a critical intersection of financial management and technical architecture planning. Organizations that treat Reserved Instances as purely a cost optimization tool often miss their strategic value as a capacity planning mechanism. The commitment inherent in Reserved Instance purchases forces teams to think more deliberately about their infrastructure requirements, leading to better resource utilization and more predictable capacity planning.
The strategic importance becomes particularly apparent when considering the total cost of ownership for cloud infrastructure. While On-Demand pricing offers maximum flexibility, the premium paid for that flexibility can represent 40-60% of total compute costs. For mature applications with predictable usage patterns, this premium becomes difficult to justify from a business perspective. Reserved Instances transform this variable cost into a fixed asset that can be depreciated and planned for like traditional infrastructure investments.
Financial Optimization and Budget Management
Reserved Instance financial optimization goes beyond simple cost reduction to encompass sophisticated portfolio management strategies. Organizations with diverse workloads can construct reservation portfolios that balance risk and reward across different instance types, regions, and commitment terms. This portfolio approach mirrors traditional financial investment strategies, where diversification reduces overall risk while maintaining return objectives.
The budget management benefits extend to both operational and capital expenditure planning. Reserved Instances can be structured to align with organizational fiscal cycles, with upfront payments treated as capital expenditures and ongoing monthly payments classified as operational costs. This flexibility enables organizations to optimize their cost structure based on broader financial objectives and budget constraints.
Cash flow management becomes more predictable with Reserved Instance commitments. Finance teams can model infrastructure costs with greater accuracy, knowing that a significant portion of their compute expenses are fixed for the commitment period. This predictability enables more strategic planning for growth initiatives, capacity expansion, and technology investments.
Risk Mitigation and Capacity Assurance
Reserved Instances provide capacity assurance that goes beyond cost savings to offer strategic risk mitigation. During periods of high demand or capacity constraints, Reserved Instance holders receive priority access to compute resources. This priority becomes particularly valuable during peak usage periods, product launches, or unexpected traffic spikes where on-demand capacity might be limited.
The risk mitigation extends to vendor lock-in considerations. While Reserved Instances represent a commitment to AWS, they also provide protection against sudden price increases or capacity availability issues. Organizations with Reserved Instance commitments have secured their compute costs and capacity allocation for the commitment period, providing stability in an otherwise dynamic pricing environment.
Geographic risk distribution becomes possible through regional Reserved Instance strategies. Organizations can distribute their capacity commitments across multiple regions, ensuring business continuity and disaster recovery capabilities while maintaining cost optimization benefits. This geographic distribution strategy aligns financial optimization with operational resilience requirements.
Long-term Strategic Planning
Reserved Instance planning forces organizations to think strategically about their infrastructure evolution. The commitment period requires teams to project their capacity needs 12-36 months into the future, encouraging better application lifecycle planning and resource forecasting. This forward-looking perspective often reveals opportunities for architectural improvements, application optimization, and capacity consolidation.
The strategic planning benefits extend to technology roadmap alignment. Organizations planning major migrations, application modernizations, or platform changes can structure their Reserved Instance commitments to support these initiatives. For example, teams planning containerization efforts can shift their reservations from larger, monolithic instances to smaller, more flexible configurations that better support microservices architectures.
Integration with broader cloud strategy becomes more coherent when Reserved Instance planning is aligned with multi-cloud and hybrid cloud initiatives. Organizations can use Reserved Instance commitments to anchor their AWS footprint while maintaining flexibility for workloads that might benefit from other cloud providers or on-premises infrastructure.
Managing Reserved EC2 Instances using Terraform
Working with Reserved Instances through Terraform presents unique challenges compared to other AWS resources. Unlike typical infrastructure resources that you create and manage directly, Reserved Instances function as purchasing commitments that modify how AWS bills your existing EC2 usage. This billing-focused nature means that Terraform's role shifts from resource creation to capacity planning and reservation management.
The complexity comes from understanding that Reserved Instances don't create actual compute resources - they create billing discounts that automatically apply to running instances that match specific criteria. This automatic matching behavior means that your Terraform configurations need to account for current and future EC2 usage patterns, making Reserved Instance management part capacity planning, part financial optimization, and part infrastructure forecasting.
Basic Reserved Instance Purchase
The most straightforward Reserved Instance scenario involves purchasing reservations for known, stable workloads with predictable capacity requirements.
# Purchase Reserved Instances for production web servers
resource "aws_ec2_reserved_instance" "web_server_capacity" {
instance_count = 10
instance_type = "m5.large"
availability_zone = "us-west-2a"
duration = 31536000 # 1 year in seconds
payment_option = "PartialUpfront"
# Reserved Instance applies to Linux instances
platform_details = "Linux/UNIX"
tags = {
Name = "web-server-reserved-capacity"
Environment = "production"
Application = "web-tier"
CostCenter = "engineering"
Purpose = "baseline-capacity"
ReviewDate = "2025-01-01"
}
}
# Reference Auto Scaling Group that will benefit from the reservation
data "aws_autoscaling_group" "web_tier" {
name = "production-web-tier-asg"
}
# Output reservation details for financial tracking
output "reservation_cost_savings" {
description = "Estimated annual savings from Reserved Instance purchase"
value = {
reservation_id = aws_ec2_reserved_instance.web_server_capacity.id
instance_count = aws_ec2_reserved_instance.web_server_capacity.instance_count
instance_type = aws_ec2_reserved_instance.web_server_capacity.instance_type
effective_cost = aws_ec2_reserved_instance.web_server_capacity.recurring_charges[0].amount
payment_option = aws_ec2_reserved_instance.web_server_capacity.payment_option
}
}
The instance_count
parameter defines how many instances this reservation covers, while payment_option
determines the upfront cost structure. "PartialUpfront" typically offers the best balance between upfront costs and hourly savings. The platform_details
must match your actual EC2 instances - Linux/UNIX reservations won't apply to Windows instances.
Reserved Instances automatically apply to running instances that match the specified criteria within the same AWS account and region. The reservation becomes active immediately after purchase and begins providing billing benefits for any matching instances. This automatic application means you don't need to explicitly attach reservations to specific instances - AWS handles the optimization automatically.
Multi-Zone Reserved Instance Strategy
For applications requiring high availability across multiple zones, you can purchase zone-flexible Reserved Instances that provide coverage across an entire region.
# Region-flexible Reserved Instance for database tier
resource "aws_ec2_reserved_instance" "database_regional_capacity" {
instance_count = 6
instance_type = "r5.xlarge"
# No availability_zone specified for regional flexibility
duration = 94608000 # 3 years in seconds
payment_option = "AllUpfront"
platform_details = "Linux/UNIX"
# Enable tenancy specification for dedicated instances if needed
tenancy = "default"
tags = {
Name = "database-regional-reserved-capacity"
Environment = "production"
Application = "database-tier"
CostCenter = "infrastructure"
FlexibilityType = "regional"
CommitmentTerm = "3-year"
PurchaseDate = formatdate("YYYY-MM-DD", timestamp())
}
}
# Data source to verify existing database instances
data "aws_instances" "database_instances" {
instance_tags = {
Application = "database-tier"
Environment = "production"
}
filter {
name = "instance-type"
values = ["r5.xlarge"]
}
filter {
name = "instance-state-name"
values = ["running"]
}
}
# Local value to calculate reservation utilization
locals {
running_database_instances = length(data.aws_instances.database_instances.ids)
reserved_instance_coverage = aws_ec2_reserved_instance.database_regional_capacity.instance_count
utilization_percentage = (local.running_database_instances / local.reserved_instance_coverage) * 100
}
# CloudWatch alarm for reservation utilization monitoring
resource "aws_cloudwatch_metric_alarm" "reservation_utilization" {
alarm_name = "database-reservation-underutilized"
comparison_operator = "LessThanThreshold"
evaluation_periods = "2"
metric_name = "ReservedInstanceUtilization"
namespace = "AWS/EC2"
period = "3600"
statistic = "Average"
threshold = "80"
alarm_description = "Database Reserved Instance utilization below 80%"
alarm_actions = [aws_sns_topic.cost_optimization.arn]
dimensions = {
InstanceType = "r5.xlarge"
}
tags = {
Purpose = "cost-optimization"
Service = "reserved-instances"
}
}
Regional Reserved Instances provide flexibility to move capacity between Availability Zones without losing the reservation benefit. This approach works well for applications using Auto Scaling Groups that might scale across multiple zones based on demand patterns.
The three-year commitment with "AllUpfront" payment typically provides the maximum discount but requires careful capacity planning. The utilization monitoring helps ensure you're getting value from the reservation investment and can trigger alerts when utilization drops below acceptable thresholds.
Reserved Instances in this configuration automatically apply to any running r5.xlarge instances in the region, regardless of which Availability Zone they're in. This flexibility becomes valuable for applications that migrate between zones for maintenance or fault tolerance purposes, such as RDS instances that might failover between zones or ECS services that redistribute tasks across the region.
Best practices for Reserved EC2 Instances
A thoughtful Reserved Instance strategy requires balancing cost optimization with operational flexibility. Organizations often struggle with the commitment aspect of reservations, but the most successful implementations treat Reserved Instances as a portfolio management exercise rather than individual purchase decisions.
Implement a Tiered Reservation Strategy
Why it matters: Different workloads have varying levels of predictability and criticality. A one-size-fits-all approach to Reserved Instances leaves money on the table or creates unnecessary risk exposure.
Implementation: Structure your reservations across three tiers based on workload characteristics. For your most predictable, always-on workloads like databases and domain controllers, commit to 3-year All Upfront reservations for maximum savings. For seasonal or cyclical workloads, use 1-year Partial Upfront reservations that provide flexibility with solid cost benefits. For development and testing environments, consider Convertible reservations that allow instance type changes as requirements evolve.
# Monitor utilization patterns before purchasing
aws cloudwatch get-metric-statistics \\
--namespace AWS/EC2 \\
--metric-name CPUUtilization \\
--dimensions Name=InstanceId,Value=i-1234567890abcdef0 \\
--start-time 2024-01-01T00:00:00Z \\
--end-time 2024-03-31T23:59:59Z \\
--period 3600 \\
--statistics Average,Maximum
Start with conservative purchases covering 60-70% of your baseline capacity, then gradually increase coverage as usage patterns stabilize. This approach prevents over-commitment while capturing the majority of available savings.
Leverage Size Flexibility for Maximum Utilization
Why it matters: Instance size flexibility automatically applies Reserved Instance discounts to different instance sizes within the same family, preventing waste from unused reservations when scaling up or down.
Implementation: Purchase Reserved Instances for the smallest instance size in each family you use. The discount automatically applies to larger instances in the same family, with the discount hours consumed proportionally. For example, a reserved r5.large provides 2 hours of discount for an r5.xlarge or 4 hours for an r5.2xlarge.
# Example of size-flexible reservation strategy
resource "aws_reserved_instance" "compute_optimized" {
instance_type = "c5.large" # Base size for flexibility
availability_zone = "us-west-2a"
duration = "31536000" # 1 year
instance_count = 10
offering_type = "Partial Upfront"
tags = {
Name = "compute-baseline-reservation"
Environment = "production"
Team = "infrastructure"
Purpose = "size-flexible-baseline"
}
}
Focus on purchasing reservations for instance families where you have consistent usage patterns. Avoid mixing different families in your reservation strategy since size flexibility doesn't cross family boundaries.
Implement Automated Monitoring and Alerting
Why it matters: Reserved Instance utilization can drift over time as workloads change, applications are deprecated, or infrastructure is refactored. Without active monitoring, you risk paying for unused reservations while running on-demand instances elsewhere.
Implementation: Set up comprehensive monitoring that tracks both reservation utilization and coverage. Create alerts when utilization drops below 80% for any reservation, indicating potential waste. Monitor coverage metrics to identify opportunities for additional reservations when on-demand usage consistently exceeds your reserved capacity.
# Create CloudWatch alarm for low RI utilization
aws cloudwatch put-metric-alarm \\
--alarm-name "RI-Utilization-Low" \\
--alarm-description "Alert when Reserved Instance utilization drops below 80%" \\
--metric-name "ReservedInstanceUtilization" \\
--namespace "AWS/EC2" \\
--statistic "Average" \\
--period 86400 \\
--threshold 80 \\
--comparison-operator "LessThanThreshold" \\
--evaluation-periods 2 \\
--alarm-actions "arn:aws:sns:us-west-2:123456789012:ri-alerts"
Establish monthly reviews of your Reserved Instance portfolio, analyzing utilization trends and identifying optimization opportunities. This proactive approach prevents the accumulation of unused reservations and ensures you're maximizing your investment.
Use Convertible Reservations for Evolving Workloads
Why it matters: Technology requirements change faster than reservation terms. Convertible reservations provide insurance against obsolescence while still offering significant cost savings compared to on-demand pricing.
Implementation: For workloads where you expect changes in instance types, operating systems, or tenancy requirements, choose Convertible reservations even though they offer slightly lower discounts than Standard reservations. The flexibility to exchange reservations for different configurations often outweighs the reduced discount percentage.
resource "aws_reserved_instance" "flexible_workload" {
instance_type = "m5.xlarge"
availability_zone = "us-west-2b"
duration = "94608000" # 3 years
instance_count = 5
offering_type = "Partial Upfront"
reserved_instances_offering_id = "conversion-eligible-offering"
tags = {
Name = "convertible-reservation"
Workload = "web-application"
ConversionFlag = "eligible"
ReviewDate = "2024-12-31"
}
}
Plan conversion reviews quarterly, especially during major application updates or infrastructure modernization projects. The ability to exchange reservations maintains cost optimization even as your technical requirements evolve.
Optimize Payment Options Based on Cash Flow
Why it matters: The three payment options (All Upfront, Partial Upfront, No Upfront) offer different discount levels and cash flow impacts. Aligning payment strategy with your organization's financial constraints maximizes both cost savings and operational flexibility.
Implementation: For organizations with strong cash positions, All Upfront payments provide maximum savings and eliminate ongoing monthly charges. Companies with capital constraints or those wanting to preserve cash flow should consider Partial Upfront options, which still offer substantial savings while spreading costs over the reservation term.
# Compare pricing options before purchase
aws ec2 describe-reserved-instances-offerings \\
--filters Name=instance-type,Values=m5.large \\
--filters Name=duration,Values=31536000 \\
--query 'ReservedInstancesOfferings[].{Type:OfferingType,Upfront:FixedPrice,Monthly:RecurringCharges[0].Amount,Total:calculate_total}'
Factor in your organization's cost of capital when evaluating payment options. If your investment return rate exceeds the additional discount from upfront payments, the No Upfront option might provide better financial outcomes despite higher total costs.
Implement Cross-Account Reservation Sharing
Why it matters: In multi-account environments, Reserved Instance benefits automatically apply across linked accounts in AWS Organizations, but optimization requires coordination between teams and workloads.
Implementation: Centralize Reserved Instance purchasing in a dedicated billing account while maintaining visibility into usage patterns across all accounts. This approach allows for better portfolio management and prevents duplicate purchases across teams.
# Configure organization-wide RI sharing
resource "aws_organizations_account" "shared_billing" {
name = "shared-billing-account"
email = "billing@company.com"
iam_user_access_to_billing = "ALLOW"
tags = {
Purpose = "centralized-ri-management"
Team = "finops"
}
}
# Reserved Instance with cross-account sharing
resource "aws_reserved_instance" "cross_account" {
instance_type = "r5.large"
platform = "Linux/UNIX"
duration = "31536000"
instance_count = 20
offering_type = "Partial Upfront"
tags = {
SharedAcross = "all-production-accounts"
Manager = "finops-team"
}
}
Establish clear governance around Reserved Instance purchases, including approval workflows and usage monitoring across accounts. This prevents shadow IT purchasing while maintaining the benefits of centralized optimization.
Integration Ecosystem
Reserved EC2 Instances operate within a complex web of AWS services that work together to optimize both cost and performance. The billing and capacity management aspects of Reserved Instances touch nearly every compute-related service in your AWS environment.
At the time of writing there are 25+ AWS services that integrate with Reserved EC2 Instances in some capacity. These integrations range from direct capacity allocation through EC2 instances to cost allocation tracking through AWS Cost Explorer and detailed monitoring through CloudWatch alarms.
Compute Service Integration: Reserved Instances directly apply to standard EC2 instances but also integrate with Auto Scaling Groups for dynamic capacity management. When your Auto Scaling Group launches instances that match your Reserved Instance specifications, the cost benefits automatically apply. This integration extends to ECS clusters and EKS clusters that run on EC2 instances, allowing containerized workloads to benefit from Reserved Instance pricing.
Storage and Networking Integration: Reserved Instances work seamlessly with EBS volumes and network interfaces attached to your reserved capacity. The cost benefits extend to the entire instance ecosystem, including associated security groups and load balancers that distribute traffic to your reserved instances.
Monitoring and Management Integration: AWS Cost Explorer provides detailed Reserved Instance utilization reports, while CloudWatch metrics track instance performance to help validate that your reservations match actual usage patterns. This data feeds into AWS Trusted Advisor recommendations for optimization opportunities.
Use Cases
Enterprise Application Hosting
Reserved Instances excel for hosting business-critical applications that require predictable performance and costs. A financial services company running core banking applications on EC2 instances can reserve capacity for their production workloads, ensuring both cost predictability and capacity availability during peak transaction periods. The EC2 instances benefit from Reserved Instance pricing while maintaining the performance consistency required for regulatory compliance. This use case typically results in 50-70% cost savings compared to on-demand pricing while providing the capacity assurance needed for mission-critical workloads.
Development and Staging Environment Optimization
Development teams often maintain consistent environments for testing and staging purposes. By purchasing Reserved Instances for these long-running development environments, organizations can significantly reduce their development costs while maintaining dedicated capacity. The predictable nature of development workloads makes them ideal candidates for Reserved Instance optimization, particularly when combined with Auto Scaling Groups that can scale within the reserved capacity limits.
Batch Processing and Analytics Workloads
Organizations running regular batch processing jobs, data analytics workloads, or machine learning training can benefit from Reserved Instances when these workloads have predictable scheduling patterns. A media company processing video content daily can reserve capacity for their processing clusters, ensuring both cost efficiency and guaranteed compute availability during peak processing windows. This approach works particularly well with ECS clusters running containerized batch jobs.
Limitations
Capacity Flexibility Constraints
Reserved Instances lock you into specific instance types, regions, and availability zones, which can limit your ability to adapt to changing requirements. If your application requirements change or new instance types become available that better suit your workload, you may find yourself committed to less optimal capacity for the duration of your reservation term. This inflexibility can be particularly challenging for rapidly evolving applications or organizations that frequently optimize their infrastructure.
Upfront Financial Commitment
The most significant limitation of Reserved Instances is the financial commitment required, particularly for All Upfront payment options. Organizations must accurately forecast their capacity needs for 1-3 years in advance, which can be challenging for growing businesses or those with fluctuating workloads. Incorrect capacity planning can result in either underutilized reservations or insufficient reserved capacity, both of which reduce the financial benefits.
Limited Instance Modification Options
While AWS provides some flexibility to modify Reserved Instances, the options are constrained. You can modify instance size within the same instance family, change availability zones within the same region, or convert between EC2-VPC and EC2-Classic platforms. However, you cannot change instance families, regions, or operating systems. This limitation requires careful planning and accurate forecasting of your long-term infrastructure needs.
Conclusions
Reserved EC2 Instances represent a sophisticated cost optimization tool that requires careful planning and strategic implementation. They support substantial cost savings for predictable workloads while providing capacity assurance for business-critical applications. For organizations with stable, long-running workloads, Reserved Instances offer the perfect balance of cost efficiency and performance predictability.
The integration ecosystem spans across compute, storage, networking, and monitoring services, creating a comprehensive cost optimization framework. However, you will most likely integrate your own custom applications with Reserved Instances as well. Managing Reserved Instance modifications and optimizations through Terraform requires careful consideration of the dependencies and potential impact on running workloads.
When implementing Reserved Instance strategies through infrastructure as code, understanding the complex relationships between reservations, actual instance usage, and cost allocation becomes critical. Tools like Overmind can help identify these relationships and assess the risk of changes to your Reserved Instance portfolio, ensuring that cost optimization efforts don't inadvertently impact application performance or availability.