世界上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步走的计划:

  1. 实现一个简单、高效的编辑器,并提供基本的写作统计功能,让人能专注于写作;
  2. 提功写作灵感激发功能,激发创作热情,让人爱上写作;
  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,实现了以下功能:

在开发过程中,遇到了大大小小的难题,相信做过开发的同学都知道程序员的十大谎言之首:“我这里是正常的啊”,开发中遇到的问题只是开始,处理生产环境及用户环境产生的问题,才是最耗费精力的。

这里列举一部分爬过的坑:

  1. 编辑器的开发;
  2. 基于jwt的校验;
  3. passport库的浏览器兼容性问题;
  4. 目录层级及其呈现方式;
  5. NodeBB论坛系统的单点登录;
  6. zen模式的设计考量;
  7. 移动端适配;
  8. 夜间模式的样式设计;
  9. markdown语法提示;
  10. 通过Let’s Encrypt获取ssl证书及配置。
  11. ……

限于篇幅,这里先分享编辑器的开发,其它话题有机会再单独展开。

为了避免重复造轮子,编辑器是基于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基本不会有任何的市场推广预算,但只要多花一点精力,一样可以取得不错的效果,一般来说可以考虑以下渠道:

  1. 产品社区;
  2. 产品目标用户群的社区;
  3. 相关技术社区;
  4. 自身的社交媒体圈。

writeathon选择了在producthunt(产品社区)、豆瓣小组( 产品目标用户群的社区)、v2ex(相关技术社区)和朋友公众号(自身的社交媒体圈)作为第一次推广尝试。

从结果来看,producthunt带来的效果是最多的,在上线的一周内获得了130多个赞,近千次的访问量。这个数据虽然算不上多高,但至少迈出了第一步。同时正由于其关注度很高,在上线前一定要做好充分的准备,不然会浪费曝光的机会。

豆瓣我选择了与写作相关的小组进行宣传,从效果来看关注量并不高,需要调整相关的用户社区宣传策略。

如果在产品目标用户群的社区推广并不理想,需要思考是否产品的定位出现了偏差,或者缺乏吸引目标用户的亮点。

v2ex虽然浏览量不少,但相关的讨论为0,在技术社区如果只是简单的宣传,而没有相应的干货,是很难产生互动的。

而朋友的公众号本身关注的人就不多,仅作为友情推广。

第一轮推广过后,应该根据各种渠道的关注度和用户的反馈,及时调整后续的推广策略,甚至产品的定位及迭代计划。

最后

一个side project,无论最终能否得到广泛的使用和任何,但把自己的想法从0到1实现,本身就是一个快乐而充实的过程,希望这篇文章能够给大家一点启发,谢谢。

本文由 @阿楚 原创发布于人人都是产品经理。未经许可,禁止转载

题图来自Unsplash,基于CC0协议

python tkinter 实现一个秒表 从0开始_Writeathon:从0开始实现的一个side project相关推荐

  1. python tkinter 实现简易秒表计时器

    import time import tkinterroot = tkinter.Tk() root.title('秒表计数器') root.geometry("400x200+300+20 ...

  2. python tkinter计算器实例_Python+tkinter使用80行代码实现一个计算器实例

    Python+tkinter使用80行代码实现一个计算器实例 本文主要探索的是使用Python+tkinter编程实现一个简单的计算器代码示例,具体如下. 闲话不说,直奔主题.建议大家跟着敲一遍代码, ...

  3. 用 python+tkinter+有道云API 写一个自用的背单词软件

    目录 导语 程序功能 需要用的工具 需要安装的python包 程序代码 功能类函数Functions 键盘响应 窗体设置 Sql连接 Gui程序打包 结语 参考文献 导语 最近在学英语,新单词需要反复 ...

  4. python+ tkinter做的一个项目辅助测试工具

    python+tkinter 写的一个项目测试工具 目的是能够自动按照模板向禅道系统 提交bug,自动打包日志并上传到禅道上 以及结合进 项目中一些其他的功能,提升测试效率 主要是记录下 tkinte ...

  5. python tkinter计算器实例_利用Tkinter(python3.6)实现一个简单计算器

    前言 上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起 ...

  6. python tkinter计算器实例_使用Python自带GUI tkinter编写一个期权价格计算器

    0 准备工作 首先,确认环境中有numpy.scipy.stats和tkinter三个功能包.前两个功能包可用于Python的数学计算,比如使用numpy来生成随机数用于Monte Carlo模拟,以 ...

  7. Python Tkinter实现一个听书神器

    Python Tkinter实现一个听书神器 前提条件 相关介绍 Tkinter 组件 实验环境 听书神器 实现步骤 代码实现 输出结果 前提条件 熟悉Python 熟悉Tkinter 熟悉Pytts ...

  8. python tkinter 计算器V1.0

    文章目录 前言 一.最终成果物 二.代码详解 1.基本框架 1.1 主窗口整体布局 1.2 显示板 1.3 按钮 2.内部逻辑 2.1 数字处理 2.2 计算处理 2.3 等号处理 总结 前言 pyt ...

  9. 使用python+Tkinter做一个自动关机的图形界面

    之前写了一个自动定时关机的软件,这次把它做成图形界面 https://blog.csdn.net/qq_33289175/article/details/87300783 凡是开发软件必须要走:原型- ...

  10. python实现一个秒表(可用于跑步比赛记录名次与时间)

    TOC 欢迎学习用python实现一个秒表 对于各种田径比赛,我们都需要利用一种计时器来对参赛者进行计时,也就是秒表,按一次则可以记录一个时间,同时不会影响自开始到结束整个过程的时间. 第三方库:ti ...

最新文章

  1. C# 获取图片的EXIF 信息
  2. 10w 行级别数据的 Excel 导入优化记录
  3. python基础(四)集合
  4. java获取真实ip工具类
  5. Linux 配置IP地址,子网,网关,DNS,linux远程, wget 下载工具
  6. 使用结构、数组、循环和DataGridView写的分数统计小程序
  7. 扎克伯格凌晨放大招,说几句话能造世界的那种
  8. IE6环境下遭遇winow.location.href=''的跳转bug
  9. mysql Integer Types (Exact Value) - INTEGER, INT, SMALLINT, TINYINT, MEDIUMINT, BIGINT
  10. 突破Android微信微博浏览器限制直接拉起应
  11. linux字符设备驱动的 ioctl 幻数
  12. 业务功能中包含邮件发送,怎么测试?
  13. rufus中gpt和mrb磁盘_计算机关于磁盘的大杂烩
  14. 数据分级分类实施指南_运营商行业数据安全治理实践
  15. mysql set substring_MySQL substring()函数
  16. 分支语句复习 java 9018
  17. 一看就会一做就废系列:说说 RECOVER UNTIL CANCEL
  18. Springboot项目结构浅析
  19. 交互式反汇编器专业版IDA Pro的一点介绍
  20. vue-cli+gitlab代码管理时,vue项目配置文件设置

热门文章

  1. 对于tnsping的连接超时的功能补充
  2. Struts和SpringMVC两种MVC框架比较
  3. js学习笔记1---使用方法
  4. 编译安装LAMP及分离式LAMP平台构建
  5. python运行完不能显示图_Python Pygame无法正确显示图像
  6. 3gpp协议_【5G学习笔记】3GPP 5G协议分类清单大全
  7. Map.keyset()
  8. 函数平移口诀_呆哥数学函数合集——函数的图形变换来啦【4】
  9. java juel表达式_activiti 自定义函数解析juel表达式
  10. python做数据分析的包_用Python做数据分析,Numpy,Pandas,matp