PFollow | 1.0 发布
PFollow 从年后回京一直琢磨到今天,几乎每天都思考怎么样让用户最小成本的使用它,又不陷入它,还能给到独特的体验,中途也尝试过不少有趣的产品想法,删删改改,反复折腾,沉淀了一些思考,与你分享!
关于 PFollow 的一些背景介绍就不再次介绍了,如果感兴趣的话可以翻阅这篇文章,这次我将重点介绍当前版本的 PFollow 我是如何思考如何实践的。
AI 辅助
先说重点。首先如果没有现在的一些 AI Coding Copilot 我是不会这么快这么密集的把之前未完成的产品都给打磨出来,正是因为有着这些 Copilot 我才能给如鱼得水般、不知疲倦般发布了一个又一个的 app。在之前的博客中我也有说到,如果按照“古典开发流程”来看,除非是想得非常清晰非常明确,否则像我这种反复尝试反复删改,一定要看到实机效果才能感受的人来说,花费的时间会非常多,在这个时代做一名开发者非常幸福,可以无缝衔接成为一名产品经理。是的,我认为在这个时代下,从开发者转变为产品,会比产品转变为开发者更容易更简单,同时也更顺滑。
过去的三四个月时间里,大量和 AI 配合写代码的过程,正如大家所说的那样,它真的很傻。但凡你要做一些与常规思路不同的东西,它真的就像傻子一样不知所云,写出了非常屎的逻辑。而且极大概率会破坏掉你工程的健壮性,需要非常仔细的阅读理解 AI 生成的代码,去思考它为什么这么写,会不会有引入新的坑等等。尤其是在生产环境中,我抓包它好几次瞎改,已经快 PTSD 了…但不管怎么说,因为有了 AI 辅助编程的可能,实打实的让自己提效了 20% 以上,对于个人项目来说提效至少 70%。包括 PFollow 在内,我几乎不怎么写代码,我只负责组织工程架构、设计基础数据结构,至于如何实现某个功能,甚至性能优化等看似非常复杂,需要深刻理解逻辑的场景,都已经完全交给 AI 去完成,释放掉了我大量的时间去做别的事情。
这应该是我最后一次在博客中去宣传、去推动大家使用 AI 工具吧,后续就默认都要使用,直接进入下一个开发世代了。
思考
先做完
我认为做产品,特别是个人开发者产品,完成比完美更重要,如果还是像我一样也是业余时间开发,这点需要尤其注意。因为我们本身就不是全职,很难进行长时间的深度思考,能够有时间去思考业余之外的事情就非常难得了,更别说要长时间思考。因此,每当我自己冒出一个新的想法,工作后的我是先让它沉淀一段时间,如果过一段时间后因为别的事情再让我想起了它,那么就大刀阔斧的开干。但现在的我则不是这样,之前“沉淀一段时间再干”的模式下大概率会跌入工作中去完成一个又一个的需求,根本没时间去开干,所以我调整了自己策略。写代码这件事对于我来说虽然不是天赋,但我很享受,觉得自己能够做好这件事,并且对产品也有自己看法,有必要让自己继续下去,而不是刻意的绕开它。
这就引出 PFollow 这一版,我的诉求也很简单,需要让自己以最快的速度去完成并发布它,让小伙伴都可以用起来,逐步去打磨成我心目中的样子。砍掉了非常多的想法非常多的附加点,甚至是我曾经认为 PFollow 这个产品的立身之本——“记录”,都砍掉了,主要原因是没想好怎么存储记录下的这些数据。数据一旦产生,就要考虑备份和导出,还要考虑安全和隐私,这些事情都不适合现在的 PFllow 甚至现在的我去完成,地基不稳,也没有时间。所以,我放弃掉了“记录”这一大的模块,就连之前熬夜做的“密语”功能在 1.0 版本中也被剔除掉了,密语功能是当初想着初步取代记录这一大的功能,顺便想玩点社交。但仔细想了几天后发现,就目前的状态来说,接不住这波通过社交而来的增长,很有可能还费力不讨好,让原本感兴趣密语功能而来的用户不知所措的删除 app。
关于 1.0 版本中的照片浏览功能,直到今天早上睡醒后我还在尝试在不停的加功能,想给聚合在一起的大批量标签点加一个大头针弹出功能。这个 feature 其实是非常符合用户使用地图类产品习惯的,看到地图上的标签点总是会有一些直觉上的反应想要去这里点一点,那里戳一戳。但做了一半还是删掉了这个功能,原因是没有想好下一步唤起这个大头针后想要让用户去干嘛。如果某个区域里只有一个标签点还能理解,用户就是想看这个标签点到底是什么照片,但如果是大批量的聚合点,大概率用户是无法精确选择到某个标签点弹出大头针的,会越用越烦躁。如果真的想要看某个标签点的照片具体是什么,目前只要不断的放大再放大,只剩下这一个标签时在下面的照片浏览面板就可以看到,因此思来想去,还是删掉了这个功能。
至于照片的展示,如果你比较细心的话会发现,如果你每次都固定在一个区域看自己的标签点看自己的照片,这些照片不管重启多少次 app 都不会有任何变化。这个表现的原因是目前 PFollow 基本上都是无序的,用户并不感知像使用系统相册 app 那样严格的按照时间顺序来浏览照片,那么地理位置信息的标签点是无序的,如果每次展示的照片也都是无序的,这个 app 用起来一定很痛苦,用户会失去“抓手”。这个道理其实很容易理解,就拿微信来说,同一段时间会有 N 多个群聊甚至朋友会给你发消息,这些消息都是并行无序的,但微信用了“强时间线”的方式给用户排了序,这样不管你任何时候打开微信,都可以顺着“消息发送时间”这个顺序来介入这个 app。
可以拿淘宝再举一个例子,打开淘宝首页,其实我们是很懵的,因为淘宝首页展示的商品本身是无序的,至少我自己不会去刷淘宝首页,所以你会发现淘宝首页通过默认定位到“推荐” tab 来给用户以类似“猜你喜欢”的维度来排序商品列表。如果是搜索的话,此时就变得有序了,搜索列表展示的商品是与你的关键词相关性最高的商品,用户也可以按照“好评度”甚至是“价格”维度使其有序。
因此在 PFollow 的浏览功能中,虽然我也设计了“最近”、“一年内”、“更早”和“全部”四个维度来拉取照片数据,这确实是一个排序,但最终展示出来在地图上的标签点是无序的,用户不知道哪一个标签点是今天拍的哪一个标签点是昨天拍的。虽然看一段时间内去过的地方,预期就是无序的,需要多增加一个“安全气囊”,兜住用户“无序输入”下的“有序输出”,让用户清晰的认知到有序,所以呢,通过浏览面板来固化照片的时间顺序来排序就自然而然的出现了。
除了排序本身,照片浏览这件事依旧是很克制。最开始用 AI 生成的 UI 框架是 CollectionView 的纵向浏览,一眼看过去好像还挺好,但用了几天后总是觉得这种浏览照片的方式在和地图上浏览标签点的方式“在打架”。不光是眼睛很累,操作这个 app 的时也有点累,因为用户的注意力总是在做多层筛选和切换。通过地图上筛选完区域后,想看下这个区域有什么照片,还是不能专注在照片本身(太多了),用户的一直在上下切换。再加上我到现在都还没有想好如何把照片和标签点关联起来,只是简单的做了一个点击标签点后直接打开对应照片详情页的功能来承接用户在地图上的点击行为。现在能稍微保证“从上到下”是通畅的,但还是丢失掉了照片到标签点“从下到上”的流程,需要再仔细想想这一环。
性能优化
标签点展示的性能优化是个非常有意思的事情。如果我们简单粗暴的把相册中的几万张照片读出来后渲染到地图上,立马肉眼可见的掉帧,并且滑动一下地图,还要一两秒后才有反应。因此如何降低大批量标签点瞬间上屏展示带来的主线程卡死和滑动卡顿,是 PFollow 这个产品最需要解决的问题之一。
我们都知道通过经纬度可以精准的定位到在这个星球上的任何一个位置(先不考虑海拔),换句话说是我们可以通过经纬度来切割需要渲染的位置,而不是全部渲染,目前地图渲染的方式参考了这个思路,也称为“瓦片地图”。简单来说,这种方案的地图加载是一个区域一个区域加载显示,将地图按照缩放等级制作成各个等级的瓦片,根据用户缩放情况显示不同等级的地图图片。
显示标签点也可以参考这个方案,我们需要先建立好一个四叉树,这个数据结构和“方向”这个概念天然吻合。把一块地图区域分为左上右上左下和右下四块子区域,通过简单的随机 + 限流逻辑,把不同区域里的标签点归位,每次地图缩放等级发生变化时,就自顶向下的重建这颗四叉树。因为我们已经限流了每个区域最对 300 个标签点(可配置),因此当重建四叉树时,根节点可以平摊标签数量给对应子节点,最后再加上聚合算法,当标签点从大地坐标系转化为 UI 坐标系时,两点间的距离过近,我们则聚合为一个标签点,又进一步的降低了需要上屏的标签点数量。这样,PFollow 在选择展示“全部”标签点时就打开了丝滑的操作!
可能你会觉得奇怪,我明明已经选择了展示“全部”标签点,为什么地图上展示的却不是全部的标签点呢?这个问题虽然有些性能考虑在内,但实际上思考最多还是产品上的考虑。假设展示全部的标签点没有性能问题,缩放等级最小时,很可能海南岛上这一个地方我有两三千张照片,一眼看过去密密麻麻的一片,是很难精准找到自己想看的那张照片,绝大多数情况下需要放大到手指可以相对精准的点击到这个标签点时才能选中。既然如此,不如降低上屏的标签点数量。
商业化
今年是一定要给自己的 app 加上商业化的,而且不是那种简单的“买断制”。我认为买断制其实就是偷懒,对用户偷懒对自己也偷懒,凭啥我还没用过你的产品就要我付费,去便利店买瓶水我都能摸到看到才结账。因此,如何设计好一个不让用户反感的付费流程是更重要的事情,这一件事也是我之前从未想过的,完全的盲区。观察过 visionOS 上的 Sceno 和 iOS 上 ByePhotos 两款产品的付费策略。Sceno 主打的是“空间回忆”,借助地图本身自带街景数据让用户在 Vision Pro 中一键回去,按照片浏览次数付费,有 20 次的免费使用。ByePhotos 是清理照片的工具,主要是帮助用户节省 iCloud 空间,自动识别出多张雷同照片,提供快捷方便的删除/保留照片操作,共有 999 次免费操作次数。我用了一天,直接在限免次数中清理掉了所有雷同照片,省了差不多 10 个 G,但还有限免次数没用完,因为整体体验下来太好用了,私信了开发者表达赞美。我觉得这两款产品都很好的解决了以往免费用户转付费用户难的问题。
1.0 版本的 PFollow 只保留了非常简单的照片浏览功能,先把核心的照片浏览功能做好,先给用户打下一个“至少可以用来看照片”的初步印象,后续再沿着“看照片”的思路去新增多种看照片的方式,或快速编辑照片的收费功能也罢,最后衍生出对照片进行记录,对生活对当下进行“记录”这件事才来得顺畅一些。大概给自己拍了包括这次 1.0 在内 3 次免费功能更新,发布 3 次版本更新后,第 4 次就要上一个收费功能,顺势打开自己的商业化之路,要不然今年的目标就完不成了。刚好趁此机会去做一些真正值得让用户付费的事情,也反过来 push 自己不要玩票,好好对待自己做的东西。至于 PFollow 可能的商业化场景在哪我到现在都没想好,因为这个产品立项之初我就没打算商业化,所以现在反过来去想怎么赚钱,实在是难,只能寄希望于将来不久的自己能够灵光一闪。
搞钱确实是一个让人可以快速成长的事情,同时也是一件复利的事情,但还是那句老话,我们是很难或者几乎不可能赚到自己认知之外的钱。我的认知就在这了,我不喜欢也不愿意通过类似炒股之类的纯金融游戏去生钱,我始终认为或多或少你得做点实事,通过这点实事来换取应得的报酬,通过投机取巧的方式,虽然自己爽了,但对这个社会对这个社会对这个时代没有用处。有点偏激,但从小观察家里生意的运作方式,看着万丈高楼平地起,多多少少会有些影响。
团队
我是打算把 PFollow 搞大,让更多的小伙伴来一起写,正是因为打算通过这个产品开始搞钱,初步尝试看下自己的思路能不能过赚到钱,先不说赚多少,只求能用正规的方式赚到钱即可。之前通过写教程赚了一波小钱,但我认为这种钱不可持续,而且自己很累,最主要的原因是无法让自己复利。写教程这事其实爽的是读者而不是作者,作者只有痛苦,因为作者一直在输出,他还要每年的迭代适配新的 API,所以给多少钱都不足以抹平这个心理落差。
而做产品,通过产品的可持续商业化之路是完全可以填补这个心理落差的。用户使用我做的产品来解决了他的问题,他因此而付费购买这个解决问题的工具,我获得了收入,继续完善或者开启下一个产品,这个商业化闭环很容易就达到了。但这里面的大前提就是一定要做能够解决问题的工具,但现实情况就是有些开发者(包括我自己)做出来的产品连他自己的问题都解决得不好,怎么能要求去解决别人的问题呢?因此,我的开发思路一直都是不管做什么产品,都优先以解决自己的问题来判断是否值得继续维护和推广。虽然每个人遇到的问题不一样,但选择你自己感兴趣的问题去解决即可,不用求多,但要下钻。
所以捏,搞一个小团队,人不用太多,大家开开心心的做产品,卖服务,不用把大公司内的那一套流程引入,就以小团队的方式去发展去发布去成长,也不需要赚太多钱,去梦想成为多伟大的公司。如果非要我选,我宁可要伟大的产品而不是伟大的公司。
总结
这就是我关于 PFollow 1.0 版本这个开发周期内的所思所想,比较碎,也没有太多细节可以透露,主要是才 1.0 嘛,很多想法没有得到验证,说得再多没有事实都是纸老虎,如果你感兴趣的话,欢迎一起搞事情。
目前我也在观察也在 push 几位小伙伴,之所以没有这么快把他们带入,主要是不确定目前我所想的这些事情能够带来多大的收益。我是绝对不允许把别人原本每个月有固定的一份不错的收入,因为加入你的团队,和你一起搞事情后,不但没钱还要自己搭钱进来,这是一件非常费力不讨好的事情。如果一件事需要投入巨大的成本,才能换来微不足道,甚至是有点自嗨的结果,那不如放弃这件事,造福你我他。
这是我今年推出的第一款 iOS 产品,今年还有一款 visionOS 的产品在思考,敬请期待!对了,今天下午刚提交 app store 审核,这么简单的 app 应该不至于卡审hhhh。审核通过后就可以直接搜索 PFollow 进行下载了,目前只有 TestFlight 测试链接,欢迎加入测试!