Match CI/CD resource allocation to actual job requirements rather than using oversized configurations globally. Create specialized executors and resource classes for different job types to optimize cost and performance.

This practice prevents unnecessary resource waste when jobs with different computational needs share the same executor configuration. Instead of applying large resource classes universally, analyze each job’s actual requirements and provision accordingly.

Implementation approach:

Example:

executors:
  docker-amd64:
    docker:
      - image: bastiandoetsch209/cli-build:20240214-145818
    working_directory: /mnt/ramdisk/snyk
    resource_class: large
    
  docker-amd64-xl:  # Only for resource-intensive jobs
    docker:
      - image: bastiandoetsch209/cli-build:20240214-145818
    working_directory: /mnt/ramdisk/snyk
    resource_class: xlarge

  noop:
    docker:
      - image: cimg/base:current
    resource_class: small  # Minimal resources for no-op jobs

jobs:
  acceptance-test:
    executor: docker-amd64-xl  # Use xlarge only where needed
    
  simple-validation:
    executor: noop  # Use small resources for lightweight tasks

This approach reduces infrastructure costs while maintaining performance where it matters most, and prevents the common anti-pattern of over-provisioning resources across all pipeline jobs.