各位听众大家好欢迎来到最新一期的步车者说然后今天我们其实是一期串台节目我们很高兴请到了代码之外的 Randy 然后来和我们一起聊一个非常有意思的话题就是独立开发是做 APP 好还是做 SaaS 比较好
Randy 要不先跟大家打个招呼哈喽大家好我是 Randy 代码之外的主播之一我是一个前端开发者现在在自己做一些自己的小东西欢迎欢迎我觉得我们听众应该对你也比较熟悉吧毕竟我们的听众群应该还是挺重合的对
然后我们另外一位主播是 Adam 也跟大家打个招呼吧哈喽大家好我是 Adam 对之前做过猪白然后因为这期在聊这个 APP 和 SaaS 其实我本身也有尝试做过 MacOS 上的 APP 开发对
对我们为什么会聊这些其实起因就是我记得 Randy 在推特上我记得你当时是说你觉得还是做 APP 比较好对吧对对对对因为你当时我记得是你发了一个推内容大概是说做 SaaS 比较好应该是这样的对对对是我先说做 SaaS 比较好对然后我回了一句说我觉得还是做 APP 好
对 然后我们就说这个话题挺有意思的可以聊一下因为我们正好几个的背景也不太一样就有的人做过 SaaS 有的人做过 App 然后像 Adam 就是之前做 SaaS 然后现在在做 App 所以我觉得可以大家交流一下不同的观点那么就在此之前我觉得为了给听众们提供一些背景我觉得我们可以介绍一下自己之前开发或者正在开发的一些产品
对然后我觉得我可以先来就是可能听众有的也比较熟悉的就是我最近开发了一款 Mac 上的软件叫做 ClickNow 它是一款 Mac 的 AI 搜索软件就是你可以在任何 App 里面去滑词或者滑一个段落
然后你可以通过一键的搜索去让 AI 给你提供准确的信息比如说如果你滑的是一个词那么 ClickNow 会给你这个词的解释并且这个数据是联网的然后如果你滑的是一段话那么它可以给你总结或者说给你一个翻译换句话说其实它也是比较像另外一些传统的就是全局滑词软件了但是它不光是一个翻译它还有一个就是联网 AI 搜索的功能
然后这样的好处就是说你可以不用在不同的 APP 时间切换就可以很方便的完成一些简单的任务
然后它比较有特色的地方就是说它不需要 API Key 对我觉得这个对中国用户可能是相对比较友好一些对然后我还加了一些自己比较需要的小功能就是比如说你划一段时间的字符串然后我可以给你显示一个当前的日历然后并且可以一键把这个日期添加到 Google 或者 Apple 的日历里面对因为我之前自己非常需要这个功能
对然后这个是一个 Mac 的 app 我其实是没有开发过 SaaS 的然后我知道 Randy 是做过一些 SaaS 对吧你要不要给听众们介绍一下我大概在 19 年的时候做过一个评论的插件系统可以这么说就是 Disqus 如果大家知道的话 Disqus 是这个领域最出名的
能嵌入到你的博客或者任何的网页里面的一个评论插件然后我当时做了一个跟 Disqus 差不多的东西就是它的 alternative 它是开源的然后我当时发到 Hacknews 上面反响还挺大的直到现在虽然我不怎么维护了但是还是有一定的用户这个应该算是我 SaaS 方面的一个尝试吧
叫 cast this 对对对叫 cast this 那就是 discuss 反过来觉得明明还有意思对 SaaS 的话我就是做过这种尝试其实之后还会做一些比较零星的一些 SaaS 但是用户不是那么的多像之前我做过一个 ask hackerslikegm 应该用过吧
就是一个基于 LLM 可以让你搜索一些东西然后搜索的内容是提取 Hack News 上面的评论和贴子然后给 LLM 总结出来的一些回答这样子其实这个更像是一个 RAG 对吧对对对我的 SaaS 的话就是这些
你要不要介绍一下你做的浏览器插件呢浏览器插件的话应该属于 App 这一类的吧如果要把它分类成 App 还是 SaaS 的话浏览器插件还真比较难界定对 这个我们可以之后再聊但你可以先说一下我心目中我会把它归类为 App 这一类然后这也是之前我做的一个浏览器插件叫 NodePal
它是用于把微信读书的笔记同步到各个笔记软件像 NotionLogsic 各种各样的笔记平台的一个浏览器插件这个插件是我刚辞职不久唯一有收入的一个软件对
另外我最近做的是 EPUBKit 就是帮用户把一些网页收集起来然后导出成一个 EPUB 电子书格式的一个软件这个就是真正的软件了这不是浏览机插件也不是 web 它真正的是一个本地的 Electron 写的一个 app
那它就是可以在 Linux Mac 或者 Windows 都可以用对现在我维护的是 Mac 跟 WindowsLinux 的话我暂时没有分发 OK 了解 Randy 也是做了相当多的东西我觉得你的经验应该是我们这几个人中最丰富的只能做比较多的尝试吧好的 Adam 你想再稍微简单介绍一下吗
我就不了对 我觉得我还挺好奇刚才 Randy 又聊的那个 APP 怎么界定的问题我觉得好像很有意思对 就是在我们现在这种生态或者说这种现状下就是到底怎么算 APP 呀对 就是 Electron 是 APP 对 然后 LeggGM 提到的它的那个 ClickNow 也是 APP 对 然后这个时候如果有一个浏览器插件的出现就好像会给大家造成一些
疑惑或者说就很难真正的去界定清楚为什么你觉得插件是 App 呢怎么说就如果只是分两类一类是 Web 一个是 App 的话那我觉得除了 Web 之外那都是 App 了而且插件的分发的形态跟现在我们手机 App 也很像因为它有一个中心化的一个 App StoreChrome Web Store 那我就觉得这种形态我觉得会更像 App 这种形式
对我觉得可以回过头来讨论一下就是我们怎么去界定有没有一些比较明确的标准就是说我觉得 SaaS 的标准是比较明确的就是你一个网站就你总得有个网站所以就是 SaaS 那是不是说不是 SaaS 的东西我们都可以算作 APP 呢我觉得应该是吧
我有一个暴露就是也许所有东西都是 APP 只是形态和收费模式的不同因为我刚想到一个例子就是 Figma 算什么对就是它其实说白了它是一个基于浏览器技术的但是其实现在也很难鉴定说它是基于浏览器技术但是它是全程依赖网络的就是甚至如果你用它的网页版和你用它打包出来的客户端是一模一样的体验
对那这个时候就很难说了就是你说它肯定是个 SaaS 对因为它是按月订阅对然后呢输你的订阅费然后你订阅了之后呢你就可以使用它的服务但是它也的的确确是我应用里装了这么一个 APP 叫做 Figma 嗯嗯嗯
那我觉得是凡是需要用户主动到浏览器输入网址才能用的那我觉得它就是 webapp 就是 SaaS 是这样的我觉得是这样的那从这个定义来看的话如果你把一个 SaaS 比如说打包成一个 Electron 那它就是可以变成了一个 app 对吧其实它的界限也相对比较模糊了现在感觉对而且我觉得纠结这个应该意义也不是很大对
是对但我觉得换句话说其实我们看到一个东西还是能比较就虽然很难给一个明确定义但还是可以比较清晰的判断出 OK 这是一个 APP 或者说这是一个 SaaS 对吧至少对于大部分东西这样对
对然后我们的下面的讨论可能也是会基于这种比较传统的一些比较刻板印象里的 SaaS 和 App 对来进行的 OK 然后我们的讨论就是会主要分为两个大的方面一个是开发然后另外一个就是推广和销售因为你从独立开发者的角度其实它的大的阶段也就是这两个就是你做一个产品然后你把它卖出去对
然后我觉得开发我们第一想首先讨论肯定是开发效率对吧这块的话其实我个人认为我觉得大家可能也会比较赞同就是说 SaaS 它的开发效率肯定相对是更高的首先它的资料比较多然后它的模板比较容易复用然后现在有很多这种最佳实践甚至包括那种什么一键建站一键建一个 SaaS 一键建一个 Landing Page 这种框架都非常的多
然后 App 的话我和 Adam 的共同感觉就是至少是对于 Apple 这个平台来讲它的文档特别不全然后很多东西都是你需要自己在一个黑箱里摸索是完全在文档里找不到的然后官方还说这些文档里都没有然后你要去看 WWDC 的视频来学习一个东西怎么用我觉得这个就非常的扯淡对这是我的看法不知道两位有没有什么赞同或者想补充的东西
单看开发效率的话我也觉得按照我的经验来看可能 SaaS 确实要比做一个 APP 要更快一些
我不知道是因为我熟悉度的问题还是什么反正我自己的经验是这样子的就是开发 SaaS 因为 SaaS 就刚刚 Legsum 也说了很多可以附用的东西已经有很多人做出来可以直接用了包括说像数据库用什么 ORM 都有很丰富的选择给你去用还有你的 AuthAuth 这个叫健全这一块也有很多人
也有很成熟的就是像 node 如果用 node 的话 python 我不知道用 node 的话什么 next auth 还有 auth0 或者第三方的 sasauthsas 还有什么 clerk
就这些东西都已经基本上没有太大的学习成本而且很快就可以接入就如果你要做一个有用户系统有付费接入甚至那些付费接入像 stripe 那种也很容易接入所以你要做一个完整的有用户系统有付费系统的一个 webapp 其实是非常简单的反过来像 app 因为我之前也有尝试写过
Apple 生态的这些东西我其实入门了很多次每次放弃都是因为刚刚 LikeJM 说的就是这个文档就是真的非常奇怪我甚至不知道怎么去学但是最近 GBT 出来之后我反而觉得这个事情好像很大程度上被解决了就是以前我可能要收什么 Stack Overflow 然后自己去看 WWDC 那些 session
甚至有时候我直接把一个软件的截图发给 GPT 问他如果我要用 Swift UI 去写应该用什么样的组件他直接就给我然后我只要按照他给我的提示我自己去再搜一下就可以学到很多东西甚至他也会有一些像很多人说要用一些莫名其妙的 API 我们他是没有写在文档上有时候 GPT 也会告诉我你应该用这个 API 好
我觉得其实会有一定的改善但是目前来看按照我的经验 SaaS 还是比我写 App 要更快一点对我很同意你说的像现在这些 AI 的工具确实帮助很大对一些鸡脚嘎啦的东西你根本在文档里找不到它就直接告诉你怎么用对
我觉得这块主要可以分成两块一个是官方对于或者说从标准层面对于你开发的支持你像这种 APP 平台开发它一般都依赖于某个大公司比如说你即使是开发 Chrome Extension 那也要看 Google 提供这些文档
开发苹果的你就要看 Apple 提供的文档所以它这些东西是相当于你依赖于某一个这种大公司它的一套系统包括开发的工具链那 Web 的话其实它就是有一套标准因为你 Web 这些东西是有一个这种像 W3C 的委员会它在演进而且最关键的是我觉得大家都是用这同一套标准你不论是说你是用 Next.js 或者 Jungle 或者 Ruby on Rails 对吧它其实最后渲染成它都是 HTML 加 JS 加 CSS
然后它的传输也都是 HTTP 或者 WebSocket 因为大家都是用这一套标准的东西所以你比如说我做了一个库或者做了一个模块我很容易去接入进来我觉得这点在 APP 上其实你是做不到的你比如说我有一个东西我就是给苹果平台写的我如果想开发一个 Linux 的 APP 我根本就用不上了会有这样的问题但现在快平台技术也挺成熟了像 Flutter React Native 也能一定程度上解决这个问题
对但你不觉得就是 app 它都是很割裂的吗比如说你如果要投入 flutter 生态那就是 all in flutter 对吧然后其他的东西你实际上是完全用不上比如说你就假设我有一个 web 写的一个组件我想放进我的一个 flutter app 那可能就是比较困难也许能用 webview 我不知道但就是比较困难然后如果你用 react native 那你 flutter 的一个组件你也用不了就是对因为它没有一套这样的标准是
我比较赞同刚才 Randy 提到的说 GPT 对多安开发的这个提升对我会觉得因为我也有尝试去做这个 Mac OS 上的这个 Swift 开发嘛对会觉得说有没有 GPT 好像真的是两套开发生态就是如果你不使用 GPT 还是单纯依靠 Stack Overflow 苹果的开发者文档以及苹果的开发者论坛就真的是举步维艰的感觉就是
对就是他的文档组织的就是很零散对然后你要找的东西呢你可能要跨好几个文档对确实是一个比较痛苦的体验还有一个点就是我想简单分享一下我会觉得就是因为我们三个其实目前的经验应该还不涉及到说是一个很大的团队然后大家各自有分工
这个时候我就会觉得 SaaS 类型或者 WebApp 类型还有一个在开发效率上的提升我不知道算不算开发效率但是如果我想做一个稍微有些设计感的图形界面这个时候在 WebApp 这边是有很多可选项的就不论是 Telwyn 或者是 ShitCN 或者是我可以去看一些别人的这些样式来怎么写
对然后在这个 Native App 这边就真的很麻烦嗯
这个麻烦在于比如说我尝试过我把我所有的我已经安装的 APP 我去打开我看他们各自的这些界面就首先是网上没有什么这种设计的资源或者是框架或者库能让你快速的使用其次是我想看一看我电脑上我常用的这些 APP 有没有什么做的设计比较好的我会发现设计比较好的都是 Electron
这类 APP 就是如果它是一个原生的 APP 的话就真的那个界面就很有时代感就感觉和现在的就是 Mac OS 的系统设计其实还是挺格格不入的嗯
就是我之前 ClickNow 的界面也被人喷很丑他们有的人的说法是叫不像原声他们的原话是然后后来他们就说你可以去参考一下 Apple 的那个因为 Apple 它也有一个那种重机你的 touchpad 弹出一个那种茶词的那种工具他就说你可以参考一下那个界面我就发现这个确实可以它这个设计不错然后我就参考了它重写了一下现在我觉得那个就
长得很不错所以其实我觉得如果你没有什么第三方的参考那就参考一下原生的东西就比较好对
这也是为什么之前我尝试做 iOS 或者 MacOS 就 Apple 生态的东西我都直接用 SwiftUI 然后参考官方的这个 UI 怎么写设计规范是吧我记得是这样对它有一套那个如果脱离了 SwiftUI 官方给的这些组件的话确实我也会遇到一个问题就是它不像写 Web 一样有很多 UI 库给你去用
比如说我们写后台系统我们直接用 Andesign 是吧或者写自己的 app 我们直接用这个 ShadeCN 但是在 iOS 就没有这些东西或者跨平台的话像 Flutter 可能有一些 Google 的那个 material design 这个倒是可以用一用但是其实它不能 cover 到你所有的需求所以你还是得有一定的设计的经验
是的而且我觉得你刚才提到一个点就是你有没有发现 APP 端它的 breaking change 特别多
你比如说我就举个例子 Swift UI 每个大版本之间它的差别很大然后有很多 breaking change 包括你 Swift 语言本身它有一些特性你可能只在高版本的 Swift 里有然后低版本是没有的包括 Flutter 这些就更不用说它每个大版本都可能有很多 breaking change 但是在 Web 上相对来说我感觉这种就很轻微就是基本没有
可以这样认为吗对 web 的话可能就只有浏览器的比较 break and change 发生的时候才会有出现这种问题但是概率还是比较小我记得可能上一次在浏览器的 break and change 影响比较广的应该就是那个 cookies 的机制的改变吧我不知道你们有没有了解这个事情
你说第三方 cookie deprecate 对因为有很多 webapp 其实是依靠这一个特性来做实现的一些功能包括像国内很多像我当时还在阿里阿里的那个时候有很多系统都用了这个特性然后我们会专门根据这个 break and change 去做很多这样的 bug fix 但是确实很少浏览器确实很少这种情况
对行那我觉得我们也可以顺势聊到下一个话题就是跨平台像众所周知你开发一个 SaaS 的话其实跨平台这个问题它就天然解决了然后
然后像 APP 的话刚才我们也提到就是有很多这种比如说操作系统很特定的 API 然后有很多东西是大公司维护的框架所以跨平台它可能不是那么容易解决嗯但现在就是比较好的一点就是有一些这种像 React Native 这种 GB Web 技术的框架它可能就是解决了这个问题嗯
但总的来说我们肯定还是觉得 SaaS 的跨平台是更容易的但是这样有另外一个问题其实我刚想到就是 SaaS 是不是天然就排除了移动端的我觉得你见过有人在移动端用 SaaS 吗我好像没有你们用过 PWA 这一类的吗就是所谓的渐进式 web 应用我自己倒是 progressive web 我们做开发当然知道有这个东西但是其实我作为用户我很少用到
但是在桌面浏览器这个 Chrome 的或者说 Chrome base 的这些浏览器其实我会蛮常用这个 PWA 的因为如果你这个网站是支持 PWA 的话它可以把你这个东西添加到你的 applications 这个文件夹里面所以如果这个网站是支持 PWA 它就会封装成一个很类似 native app 的一个形态你可以通过你的 launcher 去启动它然后它有一个独立的一个窗口
对这个我也用的特别多但手机上面很少这个我在手机上的体验是我主要手机上我刚刚看了一下有两个东西一个是 AreaNG 是我控制家里的下载器的一个 webapp 对然后它给我在手机上的体验我觉得还蛮好的就包括它可以左滑右滑就是用起来比较像原生的这种感觉了对
它是 PWA 的吗对它是 PWA 的但是我把它添加到我的这个 iOS 的主屏幕对桌面主屏幕然后它有一个自己的图标 icon 对然后我点进去之后它是没有浏览器的什么地址栏呀就是整个浏览器界面都是不存在的它就是一个单页的应用嗯
对然后体验还挺好的我之前有简单的去查过一些资料啊权限啊之类的就是这个就比较尴尬就是如果你做的是一个这种 PWA 的话那可能你只能拿到一小部分苹果的这个权限它也有一部分系统的 API 是可以供你调用的但是大部分的可能都不行就什么推送呀然后还有一些和支付相关的都是不行的嗯
对所以其实我们可能也不能简单的说 SaaS 跨平台更好对吧它是跨桌面平台非常牛逼但是移动端就基本没有或者很受限对因为在手机上打开浏览器输入网址进入然后登录这还挺长的相比于桌面的对确实为什么 PWA 大家用的没有更多或者就是更流行呢
我觉得 PWA 跟小程序的面临的问题是一样的你说微信小程序吗还是对各种各样的小程序是一样的就是他们带给用户的心智就完全不一样所以决定了他们会不会被广泛的去使用
这个我感觉之后聊到这个推广销售的这一 part 我们可以更深入地去聊这个行那我再问 Adam 一个问题就是你那个 PWA App 它是可以从 App Store 安装吗还是说它是怎么安装的不是就是我用浏览器首先访问这个网页然后我在浏览器的选项里就会有一个添加到主屏幕的这么一个选项 OK 理解然后它不存在安装这个过程就相当于是直接加到了桌面上
对 但是因为这个 APP 它本身它有做一些离线情况下的适配所以说其实和你的网络也不是特别的相关就假设你没有网络你还是可以切换这个 APP 的各个 type 然后看到各种信息当然我这个场景因为它是在控制我家里的下载器所以说一定要是有网络的才能达成我的使用情况但是没有网络的情况下我也能看到上一次使用的数据
是 理解所以我觉得跨平台这块可以说 APP 和 SaaS 没有一个明显的谁优谁劣了他们都有自己的优势和问题其实我之前一直很看好 FlutterFlutter 不是号称能跨所有平台吗就是 Mac Linux Windows 然后 Android iOS 并且还有 Web 但后来我搜了一下他们说那个 Web 端的支持特别惨废就基本等于不能用
所以它更多的还是一个这种 APP 端的跨平台框架换句话说目前还没有一个真正能跨 web 加所有 native 平台的这样一个开发框架对不知道未来会不会有这块确实是我感觉跨平台要做好还是需要很多投入尤其大公司的投入
我有一个小问题因为我没有做过 Electron 对但我有一个小问题就是如果跨平台就是肯定各个平台它能给到的 API 是不一样的对就是这种特异化的情况一般要怎么做呀就是用一些类似于红的去选择不同的 API 吗或者是要自己去针对不同的平台去开发这个实现啊
就我经验也不太多像 Electron 这种的话每一个语言本身都有它自己的 standard stdstandard library 就比如说 file system 无论你是用 Python 还是 Go 还是 Rust 它肯定会有一个 file system 的 API 然后它是直接扩这个 file system 的 API 而不是说你要去研究 Mac 或者 Windows 的这个 file system 应该怎么用就对于你来说你使用的是这个语言本身给你提供的 standard library
了解就是它帮我封装各种系统要用对因为本身你怎么用 node 你就是怎么用 electron 嗯所以你不需要去管系统那一层因为系统的这一层它已经在语言的 standard library 给你做好了因为它本身 electron 背后就是一个 node 的 run time 嘛
但是我觉得不全是吧有一些操作系统的这种功能就比如说读屏幕和那个 accessibility 这种这种的话就需要你自己去处理了比如说你写一个 Apple script 也好比如说你自己写一段 swift 然后编译到二进制然后用 node 去 call 这个二进制文件听起来好复杂了解
也就是说如果我真的要跨平台但是要用一些没被封装的那我可能就要等 Windows 知道它有哪些 API 也要等 MacOS 然后我自己来把它封装出来是这个解决方案比较知名的比较典型的一个 APP 叫做 Screen Studio 是一个 Mac 上面的录屏软件
这个真的很牛逼对好用它这个软件本身是做的就是你用它录一个屏之后它直接给你生成一个很酷炫的这种它跟随你的指针去放大什么什么帮你自动的做好这种效果的一个 appMacOS 的 app 他们没有 Windows 版本但是他们的这个 app 是用 Electron 写的但是呢他们录屏的这一块是 Swift 写的
所以它的 UI 用的是 Electron 就是它录屏的这个 editor 本身是用 Electron 的以及这些什么 tobar 还有什么跟 UI 相关的都是 Electron 写的但是录屏的这些功能都是纯 Swift 写的
明白明白可能就是他需要用比较多的操作系统底层的这种 API 他就用 Swift 会更方便一点对对因为我之前也有想尝试写过这一类的东西然后我当时的体验就是比如说 Mac OS 它录屏有一套逻辑那我在 Windows 上面应该怎么实现呢我就要去查那个他们叫做 Win32 的 API 然后 Node 是可以通过一些方法去调用 Windows 的这些 Win32 的 API 的
所以你甚至可以写 C sharp 或者写 C++先用 C++写一段 core Win32 API 的一个代码然后把用这个 node.gyp 去把这个 C++代码编译成 node 可以去调用的代码这也是一个方式明白是好 这
行那我们下面聊一下开发设备吧就是 SaaS 和 App 的开发设备然后我觉得 SaaS 应该不是没有什么要求就你甚至拿一个上世纪的电脑只要你有文本编辑器你就可以开发 SaaS 甚至你都不需要文本编辑器只要有浏览器就好对嗯
App 的话应该还是有一些要求的就是首先是性能上吧可能你编译这种 native 的 App 对你电脑的性能要求比较高然后尤其是如果你开发 Apple 平台的 App 的话那你或许是必须要有一个 Mac 的对是的
说起来很多用户说为什么 ClickNow 没有 Windows 版本然后我就说因为我没有 Windows 所以我又不想拿一个虚拟机去开发感觉好难受没有考虑买一台 PC 吗我有一台打游戏的那种 PC 但是那种我也不可能用它来做开发为什么呢我就是这样的那就是开着相当于脸过去是吧就是把它当一个远程桌面远程桌面可以你试过远程桌面吗
家里那台没有 Mac 的 Remote Desktop 就是微软自己出的 Remote Desktop 这个 App 它在 Mac 上面的那个体验还非常不错所以你会连到你的从 Mac 上连到你的 Windows 上去开发是这样吗我在微软的时候基本是这么做的 OK 因为微软配的电脑就是 Windows 的一个 Workstation 反正微软在 Mac 上面开发的这个 Remote Desktop 这个软件如果你在局域网下面这个体验是非常好的
就跟你双系统没什么区别就跟你虚拟机没什么区别有一点点延迟吧你除非看视频会感觉到有延迟不然的话你写代码什么的开发什么不会有任何的延迟 InterestingOK 对但至少我觉得你可能还是得有一台就是实体的设备对吧就是我不知道在虚拟机里开发 Windows 的体验到底怎么样虚拟机我也接受不了在 Mac 上面跑 Windows 的虚拟机其实成本也不低吧
对啊你的芯片是什么呀你的芯片是 ARM 的吗对 ARM 的我的是 ARM 的那个 Parallel Desktop 其实还行应该是挺流畅的它应该要几百刀吧对那个挺贵的对就这个价钱其实你已经能买一台 NUC 了对这个 NUC 你还能用几年然后那个 PD 的话你可能每年都要付费嗯是所以这块的话 SaaS 肯定是完胜的
然后还有最后一块就是开发这边的一个话题就是维护对这个不知道大家有什么看法我觉得 APP 的维护要比 SaaS 的维护要简单很多
因为如果你是做一个软件的话因为之前我听过一个理论叫做 finished application 就是如果你写一个软件的话如果这个软件是满足用户的需求的话那你做出来这个 app 你只要满足了这个需求那你即使永远不去更新它也没问题
但是如果你是 SaaS 的话那好像就不一样你还要去不断的去运维就是服务器上面的运维你必须去做这些升级什么的但是软件的话你只要装上去它是一个很 stable 的状态
这个其实我有一点不同的看法对可能来源于我们对就是一个做 SaaS 比较多一个做 App 比较多因为 App 这边的确像你说的就是在最理想情况下那一个软件装上它应该是不会有任何就是它能 work 就是能 work 对吧嗯
但我实际发现的情况是首先操作系统升级它会带来一些不可预测的 breaking change 就是你不知道它会怎么 break 但它有可能 break 但这个其实还好它概率相对低我遇到更常见的一种情况是说用户他在他的电脑上装了很多其他的 app 然后他其他 app 在某种特定情况下会和你的 app 有冲突
但是由于用户装的软件是各种各样的就是你根本不知道它会怎么冲突我就举个最最显而易见的例子就是大家可能用 Mac 都知道 PopClip 对吧 PopClip 它也是一个滑瓷弹出一个东西的这样一个软件 ClickNaut 也是这样的那如果你弹出这两个东西它重叠了怎么办啊
那我是不是就有个点不到了对吧对所以我其实是为了能够让 ClickNow 跟 PopClip 完美适配我花了非常多时间去怎么放置它的图标的位置让它不重叠然后怎么样控制它弹出的顺序让它们不会有冲突包括我去研究了 PopClip 它自己控制它的一些 API
相当于我修改一下它里面的一些参数让它和 ClickNow 能够不冲突对这只是一个例子它还有很多其他的比如说跟其他一些 APP 冲突的情况所以这种我觉得它是一个其实没有那么简单对
而且还有一点就是 Native App 我们就说即使 Native App 它很多也是有服务器的所以其实你有服务器的话那你这块的成本维护成本和 SaaS 就没有什么区别也是
你说起这个让我想起我们古典互联网的时候发生过的事情就是有些人他开发了一个应用然后被 360 给杀掉了杀掉了某些文件就会发生这样的事情就是不知道你的用户的电脑运行了什么其他的软件导致你的这个软件不可用是的
对因为你浏览器你再怎么说它也是一个我们说可控的系统对吧虽然有移动端有桌面端然后有不同的浏览器但是一方面是现代浏览器大家基本上都是 chrome medium 对吧都是内核都是一样的所以这个问题其实越来越不是一个问题然后另一方面是因为它是一个可控的环境所以你
我不会说用户他装其他软件然后影响了我这个网站的工作基本上是不会但有些 Chrome 插件可能会大部分网站是不会对我就遇到过 Chrome 插件影响的情况对换句话说你这个环境里互相交互的东西越多它可能维护成本就也越高是这样的而且
就是端可能还存在一个问题就是操作系统也在不断的变化就是对用户来说他可能觉得是系统升级了对然后可能系统升级导致一些系统 API 产生变化以及他刚才 Lak 就让我们提到的各种 APP 也会有影响
还有一个我想到我不知道你们用不用 PopClip 还是收回 PopClip 它之前是在 Mac 的 App Store 上面的所以之前用户装都是去 App Store 然后用官方来安装但它从最近的某一个版本开始它从 App Store 下架了它变成了用户必须去它的官网下载一个 DMG 然后手动安装
然后他说为什么呢他写了一篇很长的文章来解释但大体来说就是 App Store 对于你上面分发的 App 它的功能有一些限制如果你用了某些的系统 API 他就会觉得你这个是相当于不符合他分发的标准他就不让你上 App Store 那么他原来为什么能上呢他曾经的某一个 Apple macOS 版本是没有这个限制的
曾经的某一次 App Store 是没有这个限制所以它在早期成功上架了那它之后它就说 OK 我每次只是做一个小的更新我没有新使用这个 API 所以 Apple 也一直默许它说你可以继续用但是就是从最近他们的审核突然变严格了说你用了这个 API 我就不让你上了所以它没有办法它就只能把它从官方的 App Store 下架然后让用户受毒安装所以有这种情况对
还是挺严格的我有一个小问题就是那它之前用 App Store 安装的这些用户它能够收到通知吗因为之前它可能就依赖 App Store 自动去更新了或手动点更新对那它有没有内置一个哪怕是最简单的通知或者提示告诉用户说
接下来你要去那边升级我不清楚我怀疑应该是没法自动更新的因为你两套更新机制是完全不同的自动更新肯定是不行的他有没有办法提示一下用户不然的话这些用户他可能就以为特别是 PopClip 这种软件形式这个用户就以为最近没有什么更新他们一般应该会发邮件的对发邮件一般是发邮件对我看到他论坛里写了一篇文章可能也发了邮件好
所以对这块还是有很多很奇怪的情况但维护服务器这个说到维护服务器我不知道像 Randy 你做这种 SaaS 或者 Chrome 插件它的服务器维护成本你觉得大吗或者你平时会花多少时间维护大概如果是纯软件没有 backend 的话就没有这个成本像 AskHackers 或者说 Castis 这种
成本怎么说呢之前我在 Verso 上面去部署的这个 Castis 我每个月要付 20 刀不然的话因为它已经超过了那个 Quota 了所以我只能把它升级到那个 Pro
但是最近的话我在那个 Hazner 就一个 VPS 的厂商买了一台可能每个月 GOO 的一个 2C 4G 的一台机器然后我把之前在 Verso 上面部署的东西放在这上面然后我每个月就省了非常多的钱然后可能现在服务器的成本也就是每个月可能五刀以内的这个规模吧嗯嗯
我之前删过一次我的用户数据库我也做过这样的事情我是直接把我在 DigitalOcean 上面的一台机器直接给删掉了我也有那 DigitalOcean 啥都没了 DigitalOcean 后来我就开了 DigitalOcean 那个它有一个备份过来并且
对然后我还用了一个那个叫就是反正是一个备份数据库就是实时备份数据库那种他就备份到一个他的那种服务里面对感觉备份还是挺重要就是自己管理服务器有些必须要做的事情像 Adam 我觉得你当时做主板应该是这块的成本挺大的吧毕竟你是一个纯 SaaS
我觉得这块成本大概还有一个因素是我要怎么谨慎的描述它呢就是如果你要做一个国内的服务你就只能托管在各种合规的国内的云潮商上那它的成本同样的性能其实是要比国外首先是你可选项比较少其次是那你的成本其实我觉得还是有一些的
包括你安装各种包的一些花的时间成本的这个肯定啊就是你的这种依赖你是直接拉不回来的你怎么办对然后又有一些服务就是你可能真的是只能做国外的服务对你比如说你要调 mail 杠这种发邮件的服务对然后那你怎么再把两边的网络环境给打通
对你如果还想让你部署在国内然后还需要让国外的用户也能访问到要怎么做对然后这个访问不到吗可能会有一些速度啊回源上的一些需要去优化的东西
对再以及我印象中比较深的是我们当时做那个推特卡片做了很久就是听起来这其实是一个不需要做的东西你只需要加一些 tag 它就能自动搞但是推特爬虫呢对但是推特的他们自己的 open graph 服务访问国内的时候又会出现我不确定他们用的是什么 DNS 解析服务器又读不到你的 DNS 解析对就是
会有一些很神奇的东西我看那个 Qbox 你们知道吗 QboxQboxC-U-B-O-X 跑 GS 的那个吗不不不我知道那个就 Really Later 的他们是国内的一个团队然后他们的做法是他们分开部署了两套一套是海外的一套是国内的对就是他们有国际版相当于是就是完全隔离的两套东西其实这样真的会简单很多嗯
我听说 Cloudflare 它的 worker 在国内是可以访问的就只要你绑一个自己的域名我没有试过我觉得也许是可以的对因为我有一次测过是可以的但是我不太确定它有多可靠
可能是一个选项但我觉得如果真的决定要做面向国内的市场的话还是所有的网络资源都放在国内会比较稳定一点比较靠谱一点只是说真的这个手续还挺复杂的但是这个牵扯到另外一个问题就是如果你在国内有一个营业执照其实这些事情倒是比较好办很多
比如说像备案对吧光备案你可能有一个营业执照去备案的话可能会稍微要简单一些然后还有一些像国内的一些 SaaS 如果你要用国内的 SaaS 比如说你要发信息发印证码发信息你找网易的这种平台
你个人是不可能通过他的验证的就如果你要使用这种服务的话你个人身份是不可能用的你一定要有一个营业执照无论你是个体户还是公司有限职业公司还是什么的你必须是非个人你才能用这种发信息的接口就如果你在国内的话所以你应该是有申请的吧
对因为我在国内也有一个公司实体嘛不然的话我完全没办法做事情啊像小程序也是小程序你个人好像是没有办法通过备案的嘛还是怎么之类的我记得是然后接入支付也是
对吧我觉得这也算是支付必须要由企业实体对我觉得这也算是维护成本开发成本维护成本这一块我们应该列上支付而且这里面还有一个我不知道算不算门槛但肯定是成本就是即使你有实体在国内它也是走审批机制的它不像说国外的云服务我开通一下或者我顶多就是予以支付一下我就可以开始测试使用了
对在国内很多都是就比如说 Randy 提到的短信的例子如果你决定要自己主动发验证那就意味着你有公司实体去注册然后去新建一个短信模板等审核通过然后你才能够真的去发这个东西就中间会隔一段时间支付权限也是你上传你的各种经营资料等审核等完审核之后才有这个权限然后你再去调试测试就是这个节奏其实还挺难把握的
所以我之前也发过一个推大概内容就是说其实在国内做软件其实不太怕别人抄你因为光是这种什么资质啊什么门槛你只要通过了这就是你的壁垒了真的没有几个人可以没有几个人可以这么轻易的在国内复制你一套这样的东西就怕腾讯抄你
我和 Adam 之前也聊支付的话题我们之前忘记把它列到开发的话题里了但其实这也是很重要的一环我当时说的是如果我想做一个这种付费的 newsletter 然后面向国内用户那我用什么平台想了一圈发现好像没有什么很好的选择因为 Adam 跟我说国内就没有任何一个很好的这种支付手段能支持循环扣费就没有
对因为循环扣费它对企业的资质要求会更严格它需要你去联系商务填表然后你要提交说你目前的支付数据就是你一天能有多少单然后它审核通过之后你才能有这个权限去拿到就是这种订阅比如说微信因为国内的主要支付就是微信和支付宝吧
对你才有这种权限所以说你会看到说那种能循环订阅的基本上都是最常见的是各种视频平台的会员他们能合作拿到其他的小公司其实是很难的以及说比如说真的有公司申请到他还要再去申请一个合规的支付牌照因为他要把这个钱再转给你对吧嗯
对涉及到一个所谓的什么三清四清这种金融相关的对其实是需要很大的合规成本是这个就真的很复杂对所以我看到现在更多人是就是用像 LemonSqueezy 或者 Pedal 这种平台因为他也支持支付宝然后 LemonSqueezy 支持微信就像于绕开国内这套支付系统那这样会有什么问题吗
我有个小疑问因为可能是我是我们三个人中没有使用过或尝试过 Lemon Squeeze 或者是 Striple 的人那我有一个问题就是如果我是一个中华人民共和国公民对我有办法去开通收款吗可以
就是以个人的资质然后我需要预先准备什么东西吗个人的身份不行是可以的个人可以的个人真可以如果你是美国人你长期在美国可以不是那个 Lemon Squeezy 和 Pedal 是可以用中国身份开通 Lemon Squeezy 是可以 Stripe 不行 Stripe 不行哦
那就相于是我只需要绑定我国内的银行账户是可以完成收款的国内的银行账户不行 Lemon's Crazy 我记得最起码是要有一个香港的香港卡香港卡我不知道现在还行不行因为我之前试的一张汇丰的香港卡也不行所以很奇怪这个我也说不准反正很莫名其妙
它是这样的它主要有两块第一块是你注册这个平台然后注册这个平台像不论是 LemonSqueezy 还是 Paddle 一般来讲你用国内的身份然后说明一下你做的这个 APP 或者 SaaS 是干什么的然后就 OK 了它一般审核不会卡你这块是相对容易的然后另外一块它叫做 Payout 也就是说你收了一些钱之后首先这个钱它是本来是放在平台里的那平台要怎么把这个钱转给你呢
这个时候就需要像阮理说的一些合适的银行卡这块其实对于国内的开发者来讲往往是比较难的就你可能会需要一个香港的卡或者怎么样 wise 或者 whatever 了解其实我们刚才不是有聊过维护成本的那个服务器的维护成本吗
对我还有一个挺好奇的问题就是刚才其实只聊了硬件支出 Randy 和 Lac9M 你们每个月花多少精力或者是多少人力在服务器的维护上因为这个还是一个耗时的东西对我可以说是我的想法我觉得这个很取决于你的用户量就是像我这种用户量可能在 100 人上下的 APP
其实维护成本是很低的就像我 setup 了一些自动化的监控就比如说服务器挂了给我发一封邮件然后自动备份数据库数据这样子就没有特别大的维护成本对但我也可以想象比如说如果你是有一个就几百万人用的 SaaS 平台对吧那你肯定有各种各样的问题这种规模应该不是我去处理的吧是我手下去处理的是的
Randy 呢就是因为我理解那个 EPUB 的转换是需要服务器参与的吗还是第一个版本是的第一个版本它是 SaaS 后来我就觉得就是因为这个维护成本非常高可能本来我不是专业做后端的因为它会遇到一些性能瓶颈问题比如说我可能需要做任务队列可能需要做多线程的处理
那这种我只是大概知道一个概念但是你让我真正的去做一个鲁邦性很高的一个这样的系统的话其实对我来说还是比较复杂的所以后来我就把它写成 Electron 用户本地去处理了它就不需要用服务器了
太好了因为如果用服务器确实听起来就很麻烦对很麻烦对因为 LAC9M 也做服务端开发应该知道就是可能搭建起来成本很低但是你想保证可用性这一类的东西又要上一堆东西是的我觉得能放在用户本地处理的就放在用户本地处理好了对这是最好的
我再问个小问题就是你们 APP 的发布然后代码的管理和追踪应该会对各个版本发布之前做相应的 tag 然后收集到用户反馈的时候会存在这种问题吗就是可能某一个 bug 是存在某个版本然后可能就要切代码然后去定位其实这个反而在我们之前做后端或者是 web 端的时候不太存在这个问题因为之前都是持续发布的嘛
对然后用的都是最新的版本就这种问题多吗或者说这种是一个比较普遍的问题吗我很少会遇到这种问题
我也很少就是因为我这边是有那个自动更新的就是如果我发了一个新版本用户那边会弹出一个框说你有个更新凡是正常人都会点下那个更新对吧所以我基本默认大家都是用新版本就我还没有遇到任何说用户遇到用的是老版本所以出了某个问题的情况了解这话应该其实还好对
但我觉得这个我想想如果是移动端的话换句话说就是如果是用户没有办法很及时更新的这样的一种情况就可能是会有问题对是就比如说尤其是安卓对吧安卓你可以下载 APK 安装然后用户可能 800 年都不更新一次
对就是我其实不太确定桌面端的行为因为我没有具体的数据但是你想以东端平台基本上很多公司会关注一个就是更新的跟进率比如说两周有多少人升级到了最新版本对可能会有一些人始终在某些一些较旧的版本停留比较长时间嗯
其实我觉得桌面端遇到的问题更多还是说不同的操作系统版本以及和其他的 APP 交互之间带来的问题我会需要跟用户确认说你现在用的操作系统是什么版本嗯