December 9th, 2022
by adam holwerdAI
Vercel, formerly known as Zeit, is a popular platform for deploying and hosting web applications and static websites. One of the standout features of Vercel is its ability to easily promote deployments to production with just one click.
Using Vercel for deploying and managing configurations
This is a great way to manage your configurations, especially if you have an API with multiple environments (such as development, staging, and production). By using Vercel to deploy your configuration project, you can quickly and easily promote your changes to production without having to worry about manually updating configuration files.
To use this feature, you'll first need to create a project on Vercel and connect it to your version control system (such as Git). Then, you can push your configuration files to the project and deploy them to a development environment.
Once you've made changes to your configuration and want to promote them to production, simply click the "Promote" button in the Vercel dashboard. This will automatically update your production environment with the latest configuration files, so you don't have to worry about manually deploying the changes.
Promote specific deployments to production with just one click
Another benefit of using Vercel to manage your configurations is that it provides a history of all your deployments, so you can easily roll back to a previous version if needed. This is especially useful if you need to troubleshoot an issue or if you want to see how your configuration has changed over time.
Using Vercel to deploy and manage your configurations is a quick and easy way to ensure that your API is always up-to-date and running smoothly. With just one click, you can promote your changes to production and have confidence that your API will continue to function as expected.
Why build a dashboard of deployed configurations? Vercel is already that dashboard
Building a dashboard of deployed configurations would be one way to manage your API environments and ensure that you always have the ability to roll back to a previous version if needed - but with Vercel, this isn't even needed! The dashboard they provide already allows you to do this, provided your deployments are tagged properly. This way you can see at a glance the status of your various environments and quickly promote or roll back configurations as needed.
Easily manage featured deployments of the same app
Maybe you have different versions of the same app being used by different customer populations. One has this logo, one has an MVP feature-set, one has God mode enabled, etc... Assigning domains or subdomains to a particular deployment with a specific configuration. This allows you to offer customized versions of your app to each customer, while using the same codebase and infrastructure.
Make sense? To use one more exmaple, say you have a customer who wants a custom color scheme for their app. Using this approach, you could create a new deployment with the custom color scheme and assign a unique domain or subdomain to it, such as "customer1.yourdomain.com". Then, you could provide your customer with the domain or subdomain so they can access their customized version of the app.
This approach has several benefits. It allows you to easily manage multiple versions of your app without having to maintain separate codebases or infrastructure for each customer. Second, it makes it easy for customers to access their customized version of the app, as they simply need to use the assigned domain or subdomain. And third, it allows you to easily update and maintain the app for all customers, as you only need to make changes to the codebase and deploy them once.
Managing dependencies between projects
To implement this approach, you'll need a platform for deploying and hosting your app, such as Vercel. You'll also need a domain or subdomain management system, such as Google Domains, to assign unique domains or subdomains to each customer's deployment. Then, you can use the platform's APIs to create and manage your deployments and assign domains or subdomains to them as needed.
Overall, using domains or subdomains to offer customized versions of your app is a flexible and scalable way to manage multiple versions of your app for different customers. It allows you to maintain a single codebase and infrastructure, while still providing a personalized experience for each customer.
Advantage: Feature flag deployments
In addition to using tagged deployments to offer different versions of your app to customers, you can also use them in conjunction with the concept of feature flags.
Feature flags, also known as feature toggles, are a technique used in software development to enable or disable a particular feature in an app. This allows you to launch new features without disrupting the existing app, as you can release the feature to a small group of users and gradually roll it out to the rest of the user base.
To use feature flags with tagged deployments, you can create a new deployment for the feature and assign a unique tag to it. Then, you can use the feature flag to control whether the feature is enabled or disabled for that deployment. This allows you to test the feature with a small group of users, while still maintaining a stable version of the app for the rest of your users.
Once you're ready to launch the feature to the rest of your users, you can promote the tagged deployment to production and enable the feature flag for all users. This will ensure that the feature is available to everyone, while still allowing you to easily roll back to the previous version if needed.
Overall, using feature flags with tagged deployments is a powerful way to manage new features and ensure that your app stays stable and reliable. It allows you to test new features with a small group of users before releasing them to the rest of your user base, and it gives you the flexibility to roll back to a previous version if needed.
Challenge: Keeping the versions of your projects compatible
One challenge of using tagged deployments and feature flags is that you need to carefully track the versions of each project to ensure compatibility. This is especially important if you're intermingling projects, such as using a configuration sidecar to a central app, as each project will have its own version number.
If the version of the app and the version of the configuration are not compatible, it can cause issues with your app, such as unexpected behavior or even downtime. Therefore, it's important to carefully track the versions of each project and ensure that they are compatible before promoting a deployment to production.
One way to manage this challenge is to use a system for managing dependencies between projects. This could be as simple as maintaining a spreadsheet or document that lists the versions of each project and their compatibility with one another. Then, before promoting a deployment to production, you can consult the dependency management system to ensure that the app and configuration versions are compatible.
Another approach is to use a tool that automatically manages dependencies between projects. For example, Vercel has a feature called "Aliases" that allows you to specify a relationship between two deployments, such as a development environment and a production environment. Then, when you promote the development deployment to production, Vercel automatically updates the production deployment with the latest version of the app and configuration.
Overall, managing dependencies between projects is a critical aspect of using tagged deployments and feature flags. By carefully tracking the versions of each project and ensuring compatibility before promoting a deployment to production, you can avoid issues and ensure that your app remains stable and reliable.
The potential risks of using a third-party platform
One potential risk of using a third-party platform like Vercel to manage your configurations and deployments is that the platform's policies and features could change over time. For example, Vercel could decide to limit the number of historical deployments you can see in a project, or it could change its pricing structure in a way that makes it less affordable for your organization.
These changes could have a significant impact on your ability to manage your configurations and deployments, and could potentially even lead to downtime or other issues for your app. Therefore, it's important to carefully consider the potential risks of using a third-party platform and weigh them against the benefits before making a decision.
One way to mitigate this risk is to choose a platform that has a track record of stability and reliability. Vercel, for example, has been in business for many years and has a large user base, which suggests that it is likely to continue to support its current features and policies for the foreseeable future.
Another approach is to have a plan in place for dealing with potential changes to the platform's policies or features. For example, you could develop a contingency plan for migrating your configurations and deployments to a different platform if needed, or you could periodically review your use of the platform to ensure that it continues to meet your needs.
Overall, while there is always a risk that a third-party platform could change its policies or features in a way that affects your app, careful planning and monitoring can help mitigate that risk and ensure that your configurations and deployments remain stable and reliable.
Why Vercel is a good choice for small teams or limited budgets.
Overall, using a platform like Vercel to manage your configurations and deployments can be a good idea if your team is small or your budget doesn't allow for the construction and maintenance of a full DevOps or Site Reliability team. With Vercel, you can quickly and easily deploy and manage your configurations, and you can promote deployments to production with just one click.
Additionally, Vercel provides a history of your deployments, so you can easily roll back to a previous version if needed. This is especially useful if you need to troubleshoot an issue or if you want to see how your configuration has changed over time.
Of course, there are potential risks to using a third-party platform like Vercel, such as the potential for changes to the platform's policies or features. However, with careful planning and monitoring, you can mitigate these risks and ensure that your configurations and deployments remain stable and reliable.
Overall, using Vercel to manage your configurations and deployments can be a great option for small teams or those with limited budgets. It provides a quick and easy way to deploy and manage your configurations, and it allows you to easily promote deployments to production and roll back to previous versions if needed.
That's the blog post. If you have any questions or comments, please feel free to contact me at adamholwerda.com or on Twitter at @adamholwerda. I'm always happy to hear from readers and discuss the topics I've written about.
Additionally, I'm excited to announce that I'm planning #shortstoryweek for the ides of March. This will be a week-long event where I'll be sharing short stories on my website and on social media. I hope you'll join me for #shortstoryweek and share your own stories as well.
Thanks again for reading the post, I hope to hear from you soon.
-- adam (I invoked AI to assist in the writing of this post)