---
description: "Learn what a Strategy is in Medusa. A strategy is an isolated piece of business logic that can be overridden and customized."
---

import DocCard from '@theme/DocCard';
import Icons from '@theme/Icon';

# Strategy

In this document, you’ll learn what a Strategy is in Medusa.

## Introduction

A strategy is an isolated piece of business logic that can be overridden and customized. It’s a TypeScript or JavaScript class that doesn’t have to follow a specific definition, but performs only a single functionality.

For example, in the core `@medusajs/medusa` package, strategies are used to implement functionalities like cart completion and product import.

These strategy classes are then resolved in API Routes, services, or wherever needed using dependency injection and used to perform their designated functionality.

For example, the `CartCompletionStrategy` is resolved in the Complete Cart API Route that is defined in the core `@medusajs/medusa` package. It’s then used to complete the cart and place the order:

```ts
export default async (req, res) => {
	// ...
	const completionStrat: AbstractCartCompletionStrategy = 
    req.scope.resolve(
      "cartCompletionStrategy"
    )

  const { 
    response_code, 
    response_body, 
  } = await completionStrat.complete(
    id,
    idempotencyKey,
    req.request_context
  )

  res.status(response_code).json(response_body)
}
```

When a strategy is overridden, dependency injection then resolves the strategy (in the code example above, `CartCompletionStrategy`) to the custom strategy that the developer created. Then, the method (in the code example above, `complete`) of the custom strategy will be executed instead of the one defined in the core package.

## Custom Development

Developers can override strategies defined in the core to customize their functionality within their Medusa backend codebase or within a plugin.

<DocCard item={{
  type: 'link',
  href: '/development/strategies/override-strategy',
  label: 'Backend: Override a Strategy',
  customProps: {
    icon: Icons['academic-cap-solid'],
    description: 'Learn how to override a strategy.',
  }
}} />
