DEV Community

Cover image for Solved: Raised prices on existing customers. Lost 4%. Here’s the email that kept the other 96%.
Darian Vance
Darian Vance

Posted on • Originally published at wp.me

Solved: Raised prices on existing customers. Lost 4%. Here’s the email that kept the other 96%.

🚀 Executive Summary

TL;DR: IT changes often face user resistance, similar to price increases, due to perceived effort or complexity. The solution involves strategic communication emphasizing value, implementing phased rollouts with grace periods, and providing comprehensive support and mitigation tools to ensure successful adoption and minimize ‘churn’.

🎯 Key Takeaways

  • Implement proactive, value-driven communication (e.g., for CI/CD platform migration) to clearly articulate the ‘why’ and ‘what’s in it for them’ beyond technical changelogs, focusing on benefits like enhanced performance or security.
  • Utilize phased rollouts and grace periods (e.g., for database migration with FEATURE\_FLAG\_NEW\_DB environment variables) to allow gradual adaptation, mitigate disruption, and incorporate feedback before a full cutover.
  • Provide comprehensive support and mitigation strategies (e.g., for Kubernetes cluster upgrades with pre-upgrade validation scripts) including dedicated channels, rich documentation, training, and clear rollback plans to empower users and minimize pain points.

Effectively managing significant IT changes, from infrastructure migrations to policy updates, requires strategic communication to retain user trust and minimize operational friction. Learn how to adapt “price increase” communication tactics to maintain stakeholder buy-in and ensure smooth transitions in your technical environment.

The “Price Increase” Problem in IT: Symptoms of Change Resistance

In the world of IT and DevOps, we frequently implement changes that, while beneficial in the long run, can feel like a “price increase” to our users and stakeholders. This isn’t always about monetary cost; it could be an increase in effort, learning curve, complexity, or a reduction in perceived convenience. Just like a business raising prices, introducing mandatory upgrades, deprecating legacy APIs, or shifting to new platforms can lead to resistance, frustration, and even “churn” – users abandoning your tools, processes, or even your internal services.

Recognizing these symptoms early is crucial:

  • Increased Helpdesk Volume: A spike in tickets or support requests immediately following a change announcement or rollout, often indicating confusion, frustration, or unexpected breakage.
  • Reduced Adoption Rates: Low engagement with new tools, features, or platforms despite their clear advantages, suggesting users are unwilling or unable to make the switch.
  • Negative Feedback & Morale: Direct complaints, internal forum rants, or general grumbling about “yet another change,” signaling a breakdown in trust or perceived value.
  • Shadow IT & Workarounds: Teams or individuals reverting to older, unsupported methods, or developing their own solutions outside approved channels, bypassing your intended changes.
  • Project Delays: Resistance or unexpected issues from changes leading to missed deadlines for dependent projects that rely on the updated systems.

The goal, much like keeping 96% of customers after a price hike, is to manage these transitions proactively and empathetically, demonstrating value and providing clear pathways forward. Let’s explore three strategies.

Solution 1: Proactive, Value-Driven Communication

Just as a successful price increase email justifies the new cost with enhanced value, your IT change communications must clearly articulate the “why” and “what’s in it for them.” This goes beyond a technical changelog; it’s about framing the change as an investment that will pay dividends in security, performance, stability, or future innovation.

Strategy Highlights:

  • Transparency: Clearly state what is changing, when, and what the immediate impact will be.
  • Justification: Explain the strategic, security, or performance reasons behind the change. Connect it to broader company goals.
  • Benefit-Oriented: Translate technical improvements into tangible benefits for the user (e.g., “faster deployments,” “more stable environments,” “reduced security risks,” “new capabilities”).
  • Call to Action/Next Steps: Provide clear instructions on what users need to do, if anything, and where to find more information or support.
  • Empathy: Acknowledge that change can be disruptive and express commitment to supporting users through the transition.

Real-World Example: Migrating to a New CI/CD Platform

Suppose your organization is migrating from an aging Jenkins instance to a modern, cloud-native CI/CD platform like GitLab CI or GitHub Actions, requiring teams to update their pipeline configurations.

Communication Example (Internal Email/Wiki Post):

Subject: Important: Upgrading Our CI/CD for Faster, More Reliable Builds!

Dear Engineering Team,

We're excited to announce a significant upgrade to our Continuous Integration/Continuous Delivery (CI/CD) infrastructure! Effective [Date], we will be transitioning all new and existing projects to [New CI/CD Platform, e.g., GitLab CI].

Why the Change?
Our current Jenkins setup has served us well, but as our codebase and team grow, it's facing scalability, maintenance, and security challenges. This "price" in terms of operational overhead and slower build times is no longer sustainable.

The move to [New CI/CD Platform] is a strategic investment that will bring substantial benefits to everyone:

* Enhanced Performance: Experience build times up to 30% faster thanks to modern runners and optimized architecture.
* Improved Reliability: Say goodbye to flaky builds! The new platform offers greater stability and easier troubleshooting.
* Built-in Security: Integrated security scanning and compliance checks directly within your pipelines.
* Developer Experience: Tightly integrated with our Git repositories, offering a seamless and intuitive YAML-based configuration.
* Scalability: Future-proof infrastructure capable of handling our growth without bottlenecks.

What This Means For You:
All new projects will be onboarded directly onto [New CI/CD Platform]. For existing projects, we've established a migration period until [End Date of Grace Period]. During this time, both Jenkins and [New CI/CD Platform] will run in parallel.

Next Steps:

* Review our comprehensive migration guide: [Link to internal wiki/documentation]
* Attend one of our upcoming training sessions: [Link to training schedule]
* Join the #ci-cd-migration Slack channel for real-time support and Q&A.

We understand that change requires adaptation, and we're committed to making this transition as smooth as possible. Our DevOps team will be actively available to assist with migration, answer questions, and provide hands-on support.

Thank you for your cooperation as we build a more efficient and secure future together!

Best regards,
The DevOps Team
Enter fullscreen mode Exit fullscreen mode

Solution 2: Phased Rollouts and Grace Periods

For many IT changes, an abrupt cutover is too disruptive. A phased rollout allows users to adapt gradually, provides time for feedback incorporation, and mitigates the risk of a widespread outage or mass user dissatisfaction. This is akin to offering different “subscription tiers” during a price increase, allowing users to choose their transition path or timeline.

Strategy Highlights:

  • Pilot Programs: Introduce the change to a small, willing group first to iron out kinks and gather initial feedback.
  • Canary Deployments/Feature Flags: Gradually expose the new system or feature to a subset of users, monitoring performance and stability before a full rollout.
  • Opt-in/Opt-out Periods: Allow users to voluntarily switch to the new system, or provide a grace period where the old system remains available (e.g., deprecation policies).
  • Clear Timelines: Communicate a definitive schedule for phases, deprecation, and final cutover.

Real-World Example: Database Migration with a Deprecation Policy

Consider migrating from an on-premises PostgreSQL database to a managed cloud database service (e.g., AWS RDS PostgreSQL) for improved scalability and resilience. This often involves changes to connection strings, authentication, and potentially minor SQL dialect differences.

Configuration Example (Feature Flag Logic / Deprecation):

Instead of a hard cutover, you might use feature flags in your application code or environment variables to control which database connection is used, allowing teams to test against the new database before a full switch.

Application Code Snippet (Conceptual Feature Flag for DB connection):

// In a configuration file or environment variable handler
const useNewDatabase = process.env.FEATURE_FLAG_NEW_DB === 'true';

let dbConfig;
if (useNewDatabase) {
  dbConfig = {
    host: process.env.RDS_DB_HOST,
    port: process.env.RDS_DB_PORT,
    user: process.env.RDS_DB_USER,
    password: process.env.RDS_DB_PASSWORD,
    database: process.env.RDS_DB_NAME,
  };
} else {
  dbConfig = {
    host: process.env.ONPREM_DB_HOST,
    port: process.env.ONPREM_DB_PORT,
    user: process.env.ONPREM_DB_USER,
    password: process.env.ONPREM_DB_PASSWORD,
    database: process.env.ONPREM_DB_NAME,
  };
}

// Use dbConfig to initialize your database connection
const dbConnection = new Database(dbConfig);
Enter fullscreen mode Exit fullscreen mode

Deprecation Policy Communication:

In conjunction with feature flags, a clear deprecation policy message ensures users know the timeline for the old system’s retirement:

Subject: [ACTION REQUIRED] Phased Migration to Managed Cloud Database - On-Prem DB Deprecation

Team,

This is a follow-up to our previous announcement regarding the migration to our new Managed Cloud Database (AWS RDS PostgreSQL). We are now entering Phase 2 of the migration plan.

What's Happening:
As of [Date - 3 months out], new applications and services will ONLY be permitted to connect to the AWS RDS PostgreSQL instance.
The existing On-Premises PostgreSQL database will officially enter its deprecation period. Support for the on-premises database will cease on [Final Deprecation Date - 6 months out]. After this date, the on-premises database will be shut down.

Your Action:

* If your application is still using the on-premises database, please prioritize its migration to AWS RDS PostgreSQL.
* Refer to the migration guide for detailed steps, connection strings, and potential code adjustments: [Link to Migration Guide]
* Leverage the `FEATURE_FLAG_NEW_DB` environment variable in your deployments to safely test and transition your applications.

We strongly encourage you to complete your migration well before the final deprecation date to avoid service interruptions. The DevOps team is available for assistance in the #database-migration Slack channel.

Thank you,
The DevOps Team
Enter fullscreen mode Exit fullscreen mode

Solution 3: Comprehensive Support and Mitigation Strategies

Even with excellent communication and phased rollouts, some users will encounter issues or require hands-on help. Providing robust support and mitigation strategies is like offering additional benefits or guarantees during a price increase – it sweetens the deal and reduces the perceived risk and burden on the customer.

Strategy Highlights:

  • Dedicated Support Channels: Establish specific channels (Slack, email, office hours) for questions related to the change.
  • Rich Documentation: Provide clear, up-to-date, and easy-to-find documentation, FAQs, and troubleshooting guides.
  • Training & Workshops: Offer hands-on sessions or webinars to walk users through the new system/process.
  • Migration Tools & Scripts: Develop and share utilities to automate parts of the transition process, reducing manual effort.
  • Rollback Plans: Clearly define and communicate what happens if something goes wrong and how users can revert or get back to a stable state.

Real-World Example: Kubernetes Cluster Upgrade

Upgrading a production Kubernetes cluster (e.g., from 1.25 to 1.27) can introduce breaking changes in APIs, deprecations, or new features that require application adjustments. Providing comprehensive support is vital.

Example Mitigation Strategy (Automated Testing with Pre-Upgrade Hooks):

To mitigate the risk of application breakage, provide guidance and tools for teams to test their deployments against the new Kubernetes API version *before* the actual cluster upgrade. This could involve spinning up a temporary cluster or a dedicated testing namespace with the target version.

Kubernetes Pre-Upgrade Validation Script (Conceptual):

#!/bin/bash

TARGET_K8S_VERSION="1.27"
NAMESPACE="your-app-namespace"

echo "--- Validating deployments for Kubernetes v${TARGET_K8S_VERSION} ---"

# Spin up a temporary K8s context (e.g., with kind or minikube)
# or target a test cluster already running the new version
# Example: kind create cluster --name k8s-test-v${TARGET_K8S_VERSION} --image kindest/node:v${TARGET_K8S_VERSION}

# Deploy a "canary" version of the app's manifests to the test context
# Or use `kubectl convert` to check for API deprecations

echo "Checking for deprecated APIs in current manifests..."
# This command is conceptual; actual tools like kubepug or kube-no-trouble are more robust
# Example using `kubectl convert` (might not catch all issues):
kubectl convert -f deployment.yaml --output-version apps/v1beta1 2>&1 | grep "deprecated" && echo "Found deprecated API usage!" || echo "No immediate deprecated APIs found."

echo "Deploying test application to new K8s version..."
kubectl apply -f deployment.yaml --context="k8s-test-v${TARGET_K8S_VERSION}" -n ${NAMESPACE}

# Perform smoke tests, API calls, etc.
echo "Running smoke tests..."
# curl http://your-test-app-service.your-domain.com/healthz

if [ $? -eq 0 ]; then
  echo "Validation successful for Kubernetes v${TARGET_K8S_VERSION}!"
else
  echo "Validation failed. Check logs for details."
fi

# Clean up temporary cluster if applicable
# Example: kind delete cluster --name k8s-test-v${TARGET_K8S_VERSION}
Enter fullscreen mode Exit fullscreen mode

Documentation & Support Resources:

  • API Version Matrix: A clear table showing which Kubernetes API versions map to which object kinds and what the replacement is (e.g., extensions/v1beta1 Deployment to apps/v1).
  • Upgrade Checklist: A step-by-step guide for teams to prepare their applications for the new cluster version.
  • Migration Playbook: Detailed instructions for the DevOps team on the upgrade process, including rollback procedures.
  • Dedicated Slack Channel: #k8s-upgrade-support for real-time questions.
  • Weekly Office Hours: Q&A sessions with Kubernetes experts from the DevOps team.

Comparison of Strategies

Each strategy has its strengths and is often best used in combination. Here’s a quick comparison:

Strategy Primary Goal Impact on User Experience Implementation Complexity Best For
1. Proactive, Value-Driven Communication Build understanding & justify change High clarity, reduced anxiety Low (focus on messaging, not tech) All changes, especially mandatory or significant ones.
2. Phased Rollouts & Grace Periods Reduce immediate disruption & allow adaptation Gradual, less overwhelming Medium to High (feature flags, parallel infra) Complex migrations, new platform adoption, API deprecations.
3. Comprehensive Support & Mitigation Empower users & minimize pain points High confidence, direct problem-solving Medium to High (tooling, docs, training) Any change with a steep learning curve or high risk of breakage.

Conclusion

The lessons from retaining 96% of customers after a price increase are profoundly relevant to DevOps and IT professionals. While we may not be raising monetary prices, we often introduce changes that demand adaptation, learning, and effort from our users. By applying strategic communication, phased rollouts, and robust support systems, we can navigate these “price increases” in our technical environments, foster trust, minimize friction, and ensure our changes are adopted successfully, ultimately driving better outcomes for the entire organization.


Darian Vance

👉 Read the original article on TechResolve.blog


Support my work

If this article helped you, you can buy me a coffee:

👉 https://buymeacoffee.com/darianvance

Top comments (0)