How to Build Software That Has Low Vendor Lock-In

How to Build Software With Low Vendor Lock-In

Vendor lock-in refers to a situation where the cost of switching to a different vendor (or an in-house solution) is so high that the customer is essentially stuck with the original vendor (Source).

The problem of vendor lock-in increases if:

  • Integration with a service requires several touchpoints (deep integration), and there is no industry-wide standardized API for those touchpoints.
  • The service owns critical app data.

This is a problem not only for customers but also for companies offering software (especially startups): For customers, they run the risk of being stuck with a vendor even if their service quality declines, they change their product focus, they increase their pricing, or worst case, they run out of business. As a result, startups have the problem of gaining potential customers’ trust, and therefore, have to design their software to minimize these risks. This results in lots of additional engineering costs, and sometimes, lost revenue.

Control of Data

This issue can be solved by providing a self-hosted version of your product which will store all the data in your customer’s database. Most apps use a SQL database, so supporting MySQL and PostgreSQL would be enough (until your product becomes fairly popular).

There are issues with this approach though:

  • Your product’s architecture cannot contain several microservices. Ideally, just one docker image that connects to your user’s database, or one framework library working with a popular ORM library of that framework.
  • If you also want to provide a managed service version of your product, then maintaining that and a self-hosted version is an added engineering cost.
  • There can be issues with monetizing a self-hosted version. Even if it requires a license key to use, it can always be “hacked” to not require one.
  • Running an additional service is added work for your customers, and several potential users may not even have the infrastructure skills required to set up a new microservice.

To mitigate some of these issues, here are two ideas:

  • Allow users to get started quickly by using your managed service version, and give them an option to migrate the data from your databases into their database. This gives users the peace of mind that they can be in control if needed. The best part about this approach is that once they start to use the managed service version, they may never actually bother with migrating to a self-hosted one anyway.
  • Allow users to use your managed service version which can connect to their database. This removes the hassle of them doing additional infrastructure work and also gives them the control they want. This can also be an option exclusive to your most expensive pricing tier.

Control of Code [1]

This section caters to two aspects:

  • Customizability of code and features as per business requirements.
  • Runnability of the product independently to the vendor.

One way to solve these issues is to make your product open source. However, this has major implications for your product’s business model. If that is not possible, you could consider a “source available”[2] model which converts to being open source in case your business shuts down. You could even charge users extra to provide them with a license that allows them to modify the source code. Finally, depending on how your managed service offering runs, you could allow users to modify the source code of your product, and the modified version can be hosted by you.

Other than direct source code modifications, you should design your product to have enough hooks and switches so as to meet any sort of business customization requirements. You should also aim to provide an API-only interface to all your features/dashboards. That way, even if you do not provide a feature that a user wants, it may be possible for them to build that out “on top” of your product.

Focus on Migration

Most companies focus on making it easy to migrate into their product. To minimize vendor lock-in, you should also focus on making it easy to migrate away from your product.

At first, this may seem counterintuitive from a business perspective, the chances that a production customer will actually migrate out of your product is very low (assuming that your product and service meet their expectations). You are better off optimizing for this as it gives an impression of customer prioritization and focus, which in turn will increase the probability of getting newer customers.

Conclusion

To summarize, the problem of vendor lock-in can be minimized by:

  • Allowing users to use their own database via a self-hosted version of your product.
  • Allowing them to carry out complex customizations with and without modifying the code you provide.
  • Allowing users to move from using your managed service version to a self-hosted version of your product.
  • Allowing your managed service version to connect to a user’s database.
  • Making migration into and away from your product as easy as possible.

If you liked this blog, you may also like other blogs from us:

Written by the folks at SuperTokens — hope you enjoyed!

Footnote:

[1]: I am not a lawyer. Please consult one before implementing/seriously considering the ideas pointed out in this section.

[2]: The source code is viewable, but under a proprietary license — limiting the distribution and modification of the code, and usually requiring a license key to run.

文章来源于互联网:How to Build Software That Has Low Vendor Lock-In

发布者:小站,转转请注明出处:http://blog.gzcity.top/4151.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022年4月28日 21:41
下一篇 2022年5月1日 18:13

相关推荐

  • Java操作SFTP工具类,文件上传下载删除,获取列表目录

    Java操作SFTP工具类,文件上传下载删除,获取列表目录 需要依赖的Maven包 <!– SFTP –> <dependency> <groupId>com.jcraft</groupId> <artifactId>jsch</artifactId> <version>…

    2022年6月1日
    827770
  • Java压缩zip文件存在文件或者目录乱码问题,压缩过滤乱码文件

    平时工作中有时候遇到要压缩的文件里面存在乱码,但是又不能一时半会儿能解决的。目前给临时的方案,在压缩的时候把乱码过滤掉,如果不过滤。通过Java来压缩或者解压的适合可能存在问题。 代码如下: package cn.utils; import java.io.File; import java.io.FileInputStream; import java.i…

    2022年7月14日
    6.3K14690
  • Java中StringBuilder的常用方法

    在程序开发过程中,我们常常碰到字符串连接的情况,方便和直接的方式是通过"+"符号来实现,但是这种方式达到目的的效率比较低,且每执行一次都会创建一个String对象,即耗时,又浪费空间。使用StringBuilder类就可以避免这种问题的发生,下面就Stringbuilder的使用做个简要的总结: 一、创建Stringbuilder对象St…

    Java 2022年7月5日
    546530
  • Android版本 (1.0~12.0) 与API Level (SDK版本1~32) 对应表

    什么是 API 级别? API 级别是一个对 Android 平台版本提供的框架 API 修订版进行唯一标识的整数值。 Android 平台提供了一种框架 API,应用可利用它与底层 Android 系统进行交互。 该框架 API 由以下部分组成: 一组核心软件包和类 一组用于声明清单文件的 XML 元素和属性 一组用于声明和访问资源的 XML 元素和属性 …

    Java 2023年6月1日
    17.5K24940
  • API Design With Java 8

    This article is featured in the new DZone Guide to Modern Java, Volume II. Get your free copy for more insightful articles, industry statistics, and more. Anyone that writes Java c…

    Java 2022年5月1日
    6.9K19920

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

评论列表(2,798条)