世界上99%的需求都已经有人想到了,但只有多想一步,才能转化为产品。 在国外,人们将各种业余时间打造的产品或项目称为"side project"。这些side project的灵感都来自于生活,一开始均为兴趣使然,有的逐渐走向商业,有的归于平静,但每个创造者都能从中获得快乐与满足。 作为互联网/IT从业者,会有更多机会接触新鲜事物,相信大家一定会有很多奇思妙想。这篇文章,就是关于一个side project-Writeathon从0到1的过程,同时,也会分享遇到的各种技术坑和产品开发经验,希望能够给各位参考,实现自己的side project。 产品构想,从0到1 Side project的初始需求,往往来源于自己或身边人。年初的时候,我计划写一个关于几年前到新西兰进行Working Holiday的系列文章。从最基本的word,到最专业的scivener,还有获得无数好评的ullyses,和后起之秀bear,typroa,byword等等,从上手难度,写作体验,使用便捷性,专业性等综合考虑,均难以让我趁手。 于是,作为一个技术出身的产品,对写作工具/平台做了一番研究。 世界上99%的需求都已经有人想到了,但只有多想一步,才能转化为产品。 上文提到的产品,均可以归为专业写作工具,核心是辅助写作者组织、输出内容。除此之外,还有写作社区,像国外的medium,国内的简书(这里不得不插一句,简书从一开始的高质量内容社区,到如今充斥着各类鸡汤营销软文,非常可惜),让作者分享、交流有深度的内容。 还有就是最近兴起的AI写作工具,通过AI对文章进行分析,以及相关素材的收集,甚至根据给定的主题和关键字自动创作内容。 最后,是比较少接触到的,我称之为创意写作工具,虽然也属于写作工具,但核心不在于写作,而在于写作灵感激发,例如:http://dailypage.co,http://twords.2lch.com,http://blankpage.io等。这些工具的写作功能往往比较简单甚至简陋,但专注于提供一系列激发灵感的服务,例如写作话题推送,写作进度分析等等。 回到最开始的需求,我是想找一个各方面达到平衡的产品。一个side project最开始只要满足自己或者最小的需求就足够了,而这样的需求究竟是大众的痛点还是痒点,则可以通过MVP方法交由用户和市场去验证。 MVP(Minimum Viable Product),最小可用产品,从产品的核心功能开始构建产品。 那么,如何从这些信息和需求中构思一个产品? 首先要确定的是产品定位,它决定了要做什么。对于专业写作工具,我认为现有的产品已经足够多且优秀,暂时没有更好的切入点。而写作社区,则对后期的运营能力有极高的要求。 AI写作是趋势,但有相当的技术门槛。创意写作工具目前比较缺少,是一个可行的切入点。所以初步的定位是融合了专业与创意写作工具的特点,一款能满足基本写作需求的,能够激发作者灵感与创作热情的产品。 同时,微信、微博、短视频等各种应用造成的碎片化时间,让人很难静下心去做一件事,这款产品的理念也是希望提供纯粹的写作体验,让人专注于写作。 writeathon的名称,来源于编程马拉松(hackathon),也寓意着写作就像马拉松。 然后,则是要考虑资源,它决定了能做什么。大部分side project开始往往都只有一个人,而且只能利用业余时间。这就决定了必须要从最核心的部分开始,对于writeathon来讲,作为一款写作工具的核心则是编辑器。所以现阶段,主要精力都应该放在如何实现一个简单而高效的编辑器上。 明确了定位和资源,剩下就是怎么做,也就是产品计划。对于大部分side project来说,一个完整而长远的计划并不是必须的,只要明确了核心诉求,其它部分都可以灵活安排。但出于产品的职业习惯,还是为writeathon安排了一个分3步走的计划: 实现一个简单、高效的编辑器,并提供基本的写作统计功能,让人能专注于写作; 提功写作灵感激发功能,激发创作热情,让人爱上写作; 通过AI等技术,提高写作效率与质量,让人写得更好。 产品技术选型,稳定与可扩展 除非你的side project涉及到前沿领域,否则应该选择稳定可扩展的技术框架,稳定是指产品的迭代无需过多考虑其变化,而可扩展是指相关的生态圈能够支持产品的扩展。 是产品为技术服务,还是反之,取决于产品的定位和用户的需求,以及产品的发展阶段。 writeathon首先满足的是自己的需求,对于中长篇的写作我还是习惯在传统电脑上完成,同时考虑到通用性,所以优先以web的方式展现。 在三大前端库react、vue和angular中,我选择了vue,其生态社区非常活跃,而且相关的文档也很完善,同时配合Nuxt实现SSR(这里其实对SSR没有强烈的需求,只是借side project作为试验)。 样式框架采用了bulma,与bootstrap相比,其column布局更为灵活,自定义也很方便。后端接口基于阿里团队推出的eggjs,虽然阿里的开源产品经常无疾而终,甚至被称为KPI产物,但不得不说eggjs从目前的发展来看还是很稳健的,非常适合小团队的快速开发。数据库选择了mongodb,配合mongoosejs作为ODM。而基础服务部分,选用的是阿里云。 整体技术框架如下: 产品开发,快速迭代 我们经常提到产品的快速迭代,但快速迭代并不是只求速度,还要把握好质量和速度之间的平衡,多久迭代一次,每次迭代多少内容。 writeathon由两个项目构成:writeathon-web和writeathon-api,截止至写这篇文章,断断续续2个月,writeathon-web经历了70次的迭代,writeathon-api也有30次。 目前的产品版本为1.0.2,实现了以下功能: 在开发过程中,遇到了大大小小的难题,相信做过开发的同学都知道程序员的十大谎言之首:"我这里是正常的啊",开发中遇到的问题只是开始,处理生产环境及用户环境产生的问题,才是最耗费精力的。 这里列举一部分爬过的坑: 编辑器的开发; 基于jwt的校验; passport库的浏览器兼容性问题; 目录层级及其呈现方式; NodeBB论坛系统的单点登录; zen模式的设计考量; 移动端适配; 夜间模式的样式设计; markdown语法提示; 通过Let’s Encrypt获取ssl证书及配置。 …… 限于篇幅,这里先分享编辑器的开发,其它话题有机会再单独展开。 为了避免重复造轮子,编辑器是基于codemirror来打造的。Codemirror的功能十分强大,github上的很多编辑器项目,都有它的身影,其丰富程度足以打造一个线上的IDE。编辑器主要用到了codemirror的markdown语法模式,自定义主题,自定义插件等特性,与vue结合成了一个名为zeneditor的组件,后续会考虑将其开源。 在格式支持上,得益于codemirror,除了基本的markdown格式,还支持github推出的GFM(Github Flavored Markdown),GFM扩展了表格、图片和复选列表等特性。在预览功能上,使用了marked这个库,并通过hightlight-js进行语法高亮。 同时,为zeneditor设计了zen主题及配套的夜间主题zen-dark,其中夜间主题的背景及字体颜色是反复优化得出的。zen主题还提供了zen模式支持,在该模式下编辑器的高度会固定为半屏,同时非当前编辑的段落会弱化视觉效果,类似于其它开源编辑器中的打字机模式。 此外,还专门开发了markdown语法提示插件,通过输入‘@’快捷插入markdown语法。为了提高效率,zeneditor的主要功能如新建、切换夜间模式、zen模式、保存、导出等均设置了键盘快捷键。 当前版本zeneditor呈现的效果,就像一张白纸,让用户最大程度地专注于写作,后续会在细节如字体、颜色、格式支持、zen模式2.0等持续优化。 产品上线&推广,选择合适的渠道 很多side project开发完后,没有进行任何推广,权当自娱自乐当然没有任何问题,但其实可以做适当的宣传,一来与大家分享成果,二来可以倾听来自用户的反馈,作为下次迭代的参考。 Side project基本不会有任何的市场推广预算,但只要多花一点精力,一样可以取得不错的效果,一般来说可以考虑以下渠道: 产品社区; 产品目标用户群的社区; 相关技术社区; 自身的社交媒体圈。 writeathon选择了在producthunt(产品社区)、豆瓣小组( 产品目标用户群的社区)、v2ex(相关技术社区)和朋友公众号(自身的社交媒体圈)作为第一次推广尝试。 从结果来看,producthunt带来的效果是最多的,在上线的一周内获得了130多个赞,近千次的访问量。这个数据虽然算不上多高,但至少迈出了第一步。同时正由于其关注度很高,在上线前一定要做好充分的准备,不然会浪费曝光的机会。 豆瓣我选择了与写作相关的小组进行宣传,从效果来看关注量并不高,需要调整相关的用户社区宣传策略。 如果在产品目标用户群的社区推广并不理想,需要思考是否产品的定位出现了偏差,或者缺乏吸引目标用户的亮点。 v2ex虽然浏览量不少,但相关的讨论为0,在技术社区如果只是简单的宣传,而没有相应的干货,是很难产生互动的。 而朋友的公众号本身关注的人就不多,仅作为友情推广。 第一轮推广过后,应该根据各种渠道的关注度和用户的反馈,及时调整后续的推广策略,甚至产品的定位及迭代计划。 最后 一个side project,无论最终能否得到广泛的使用和任何,但把自己的想法从0到1实现,本身就是一个快乐而充实的过程,希望这篇文章能够给大家一点启发,谢谢。