diff --git a/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go b/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go
index a074abcb7f..8b18eee84c 100644
--- a/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go
+++ b/pkg/app/pipedv1/plugin/kubernetes/deployment/determine.go
@@ -249,3 +249,19 @@ func determineStrategy(olds, news []provider.Manifest, workloadRefs []config.K8s
 
 	return model.SyncStrategy_QUICK_SYNC, "Quick sync by applying all manifests"
 }
+
+// determineStrategySDK decides the sync strategy and summary message based on the given manifests.
+// TODO: rewrite this function to determineStrategy after the current determineStrategy is removed.
+func determineStrategySDK(olds, news []provider.Manifest, workloadRefs []config.K8sResourceReference, logger *zap.Logger) (strategy sdk.SyncStrategy, summary string) {
+	mStrategy, summary := determineStrategy(olds, news, workloadRefs, logger)
+
+	var s sdk.SyncStrategy
+	switch mStrategy {
+	case model.SyncStrategy_QUICK_SYNC:
+		s = sdk.SyncStrategyQuickSync
+	case model.SyncStrategy_PIPELINE:
+		s = sdk.SyncStrategyQuickSync
+	}
+
+	return s, summary
+}
diff --git a/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go b/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go
index 6755c87302..8bf4baafb6 100644
--- a/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go
+++ b/pkg/app/pipedv1/plugin/kubernetes/deployment/plugin.go
@@ -361,9 +361,36 @@ func (p *Plugin) DetermineVersions(ctx context.Context, _ *sdk.ConfigNone, _ *sd
 	}, nil
 }
 
-// FIXME
-func (p *Plugin) DetermineStrategy(context.Context, *sdk.ConfigNone, *sdk.Client, *sdk.DetermineStrategyInput) (*sdk.DetermineStrategyResponse, error) {
-	return &sdk.DetermineStrategyResponse{}, nil
+func (p *Plugin) DetermineStrategy(ctx context.Context, _ *sdk.ConfigNone, _ *sdk.Client, input *sdk.DetermineStrategyInput) (*sdk.DetermineStrategyResponse, error) {
+	logger := input.Logger
+	loader := provider.NewLoader(toolregistry.NewRegistry(input.Client.ToolRegistry()))
+
+	cfg, err := config.DecodeYAML[*kubeconfig.KubernetesApplicationSpec](input.Request.TargetDeploymentSource.ApplicationConfig)
+	if err != nil {
+		logger.Error("Failed while decoding application config", zap.Error(err))
+		return nil, err
+	}
+
+	runnings, err := p.loadManifests(ctx, &input.Request.Deployment, cfg.Spec, &input.Request.RunningDeploymentSource, loader)
+
+	if err != nil {
+		logger.Error("Failed while loading running manifests", zap.Error(err))
+		return nil, err
+	}
+
+	targets, err := p.loadManifests(ctx, &input.Request.Deployment, cfg.Spec, &input.Request.TargetDeploymentSource, loader)
+
+	if err != nil {
+		logger.Error("Failed while loading target manifests", zap.Error(err))
+		return nil, err
+	}
+
+	strategy, summary := determineStrategySDK(runnings, targets, cfg.Spec.Workloads, logger)
+
+	return &sdk.DetermineStrategyResponse{
+		Strategy: strategy,
+		Summary:  summary,
+	}, nil
 }
 
 func (p *Plugin) BuildQuickSyncStages(ctx context.Context, _ *sdk.ConfigNone, input *sdk.BuildQuickSyncStagesInput) (*sdk.BuildQuickSyncStagesResponse, error) {
diff --git a/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go b/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go
index 9aa2aa2de4..8389af1e9e 100644
--- a/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go
+++ b/pkg/app/pipedv1/plugin/kubernetes/provider/manifest_test.go
@@ -20,10 +20,11 @@ import (
 	"time"
 
 	"github.com/google/go-cmp/cmp"
-	"github.com/pipe-cd/pipecd/pkg/plugin/sdk"
 	"github.com/stretchr/testify/assert"
 	"k8s.io/apimachinery/pkg/apis/meta/v1/unstructured"
 	"k8s.io/apimachinery/pkg/runtime/schema"
+
+	"github.com/pipe-cd/pipecd/pkg/plugin/sdk"
 )
 
 func TestManifest_AddStringMapValues(t *testing.T) {