一、背景
在加入K公司的第三周,接到第三个需求,系统某模块要增加批量新增的功能,而且是很急的那种,刚来公司不久的我,接到这种无前因后果的需求时,一脸蒙B。
虽然在以往负责的项目中处理过批量新增的需求,这次我仍决定摒弃过往,待“批量新增”如初见时,对它进行一翻调研,借助以下几个问题,来回答为什么需要做批量新增:
- 它是什么,有什么价值?
- 没有它的日子是怎么过的?
- 为什么是它?为什么要它?
- 未来它存在的必要性?
- 现在不要它,会不会有什么问题?
二、什么是批量新增?
农民在收割的稻子的时候,都是一把一把用镰刀割掉,后来科技发展随着收割机的出现,进一步提高了农民的劳作效率,降低劳力成本的同时也避免了因收割不及时造成的损失。
生活中类似的批量操作场景比比皆是,在社会发展与进步的过程中,效率是人类不懈的追求。
在产品设计中,无论是3C硬件产品/C端产品/B端业务系统,抛开业务本身的差异,系统功能的设计本质上都是围绕增、删、改、查、显、算、传、异而展开。
为了提高业务信息维护的效率、准确性和产品的易用性,衍生出例如淘宝购物车的批量删除商品、ctrl+A、WORD的批量替换、一键清空、一键已读、列表的批量选择、快递单号的批量查询等等对数据的批量操作。
1. 批量新增的概念
批量新增,是新增场景下的一个分支场景,相对于单项新增而言,批量新增是为了提高系统信息维护的效率、准确性和产品的易用性,针对重复有规律的数据的批量操作。
2. 批量新增做法
常见的批量新增的做法有以下两种:
(1)批量导入(如图2)
产品设计时为用户在系统中设计一个批量导入的功能入口,并提供一个信息填写模板,模板需要为excel的文件格式,常用的有.xlsx、.cvs两种格式,提供的模板需要约定好模板中的字段与数据库字段的对应关系以及每列内容的输入格式(例如:图1中,模板中手机号字段,可以限制只能输入数字)。
用户事先按照模板的要求填写数据,并保存在某个文件模板里面,然后将填写好的模板导入到系统中,系统按规则对导入的数据进行校验,完成信息的批量插入。
图1
图2
(2)批量表单(如图3)
产品设计中在用户界面为用户提供一个填写信息的表单,用户按表单的指引填写信息,如果需要录入多条类似信息,用户可以选择点击【新增】按钮,新增一行输入框,如此用户在前端界面完成信息的录入并提交,系统按规则对提交的数据进行校验,后台批量接收并保存。
批量表单是导入功能的升级版,过程中必须由用户手动填写数据并点击【提交】之后才能上传数据,在方便用户操作的同时,进一步降低操作的错误率。同时批量表单可以很好地兼顾到单项新增的场景。
一般情况下承载批量表单的形式有弹窗和页面两种,具体采用哪种形式可以根据具体用户的场景来决定,设计过程中考虑给用户提供更多便捷性,表单初始状态是可以是多行。
图3
在初步了解了什么是批量新增和主要的两种实现方式之后,在产品方案设计的过程中,具体采用什么样方式实现,可以从以下几点去考虑:
3. 具体实现方式
(1)紧急程度
无论是批量导入或是批量表单,都会涉及到前端开发+后端开发。两者后端的开发工作量相近,两者前端实现的难度都不大。
在实现批量表单的过程中会涉及到页面开发、交互、前端校验及反馈、前后端联调、页面调试等工作,所以相对于批量导入的前端工作而言,批量表单的前端工作量是翻倍的。所以在需求比较紧急的情况下,可以优先考虑批量导入的方式满足需求。
(2)数据量级
一般情况下用户在使用批量导入的excel模板,excel表格不含表头,默认可视的行数有40行,批量表单一般使用弹窗或页面的方式呈现,在不翻页的情况下可视的行数据有限。
另外,在填写的数据过程中,在excel中填写数据是在电脑本地进行,数据量相同的前提下,体验要优于批量表单。
因而在设计的过程中,可以通过分析系统数据和用户调研的方式,分析用户每次操作的数据量,如果数据量偏大建议采用批量导入的方案。
(3)容错能力
excel模板虽然可以实现简单输入内容和输入规则的约定,但最终的数据合法是在用户导入模板之后进行,对于不合法的数据反馈是相对滞后的,用户填写完数据即可以导入。
这个过程看似效率很高,但如果填写的数据质量不高导致校验不通过,定位异常数据并修改数据再导入的过程反而会影响效率。
批量表单以前端页面或弹窗的方式提供给用户,用户在填写数据的过程中,可以通过前端丰富的校验手段实现及时有效的校验与反馈,前端+后端校验的方式,让批量表单具有更高的容错性,保证了提交前的数据的质量,从而可以更好的满足用户对效率的追求。
所以在资源允许的情况下,我们在方案设计中可以给容错能力多一点空间,采用批量表单的方案。
图4
4. 批量新增环节
在批量新增的过程,大致会经过收集准备数据、填写/导入数据、校验数据、中断/终断插入数据、插入数据5个动作,如图4所示流程,在设计的过程中需要分别对以上环节的细节问题做充分的考虑:
(1)收集准备数据
收集与准备:在产生新增数据需求之前,用户必定会有一个数据的收集与准备的过程,收集来的数据有可能是书面形式或电子文档形式的(txt、excel、word等),在完成了数据的收集工作之后,用户在将数据录入系统前,需要根据表单和excel的要求对数据做些整理。
例如:员工信息可能含有,姓名、手机、性别、生日、邮箱、岗位、籍贯……等字段,但系统表单只要求填写姓名、手机、性别、岗位字段。
(2)填写/导入数据
批量表单:用户收集准备好数据后,会在系统表单中进行录入,这种批量填写数据的过程是繁琐且耗时的,所以在表单的设计过程中需要充分考虑的交互的友好性。
批量导入
用户按照excel模板填写好数据后,在系统中点击【导入】→【选择文件】→【确认】,这个过程在用户交互界面看起来很简单,但系统读取excel文件,将数据传送到服务端,服务端要用数据导入程序,逐行读取数据,根据定义的检查逻辑检查数据是否合法,并将数据写入到指定的表。
在这个过程中有很多种复杂的情况需要处理,如果感兴趣可以去csdn.net看看相关的博文。
(3、4)校验数据&中断/终断插入数据
合法校验
用户在提交或导入数据之后,系统需要校验输入框、表格的数据填写是否符合规则,是否符合唯一性的要求,校验的方式包括逐条遍历校验、循环遍历校验。
异常处理
在校验数据过程中,如出现数据不合法,需要及时提示用户并给出异常处理方案。
如果采用批量表单方案,出现异常时可以在用户界面及时给出反馈(例如:告知用户某条数据是否插入成功,如果没有插入成功,显示失败的原因)。
如果采用批量导入方案,出现异常时要考虑是中断错误信息插入,还是终断全部信息插入,在完成数据插入动作后,将插入失败的原因写入到源文件的对应行,方便用户修正数据。
(5)插入数据
新增方式
在数据通过校验之后,系统执行插入数据的动作,这里的插入根据需求不同,存在覆盖和新增两种情况,覆盖指的是以现有数据覆盖对应关系的原数据,新增则是在现有数据上插入新的数据。
系统性能
在批量插入数据的时候,需要考虑系统性能的瓶颈值在哪,业务的期望值在哪,在两者之间寻一个平衡。
系统日志
在异常排除和支持扩展业务目标时,系统日志数据分析通常是重要的手段。所以在对数据进行新增操作时应该记录相应的日志,例如:【XXXXXXXXX】【用户】【时间】【新增】【成功/失败】。
三、我们为什么做批量新增?
在接到需求的第2天,带着事先整理好的思路与用户进行了1个小左时右的面对面沟通,在实际市场开发与业务运营过程中,市场人员是按省、市、区的维度去开发市场,每次市场新开发一个片区,就需要在系统中以片区的维度在系统中维护数据。
所以每次维护新数据必然会有多条业务信息需要维护到系统中,大概每个月会进行3次左右的信息维护,每次少则需要15分钟的时间,多则需要上小时的时间。
目前业务覆盖到5个省,在2020年业务计划覆盖到10个省,业务量在原有基础至少增加一倍。
基于以上与用户沟通的信息,我又对系统历史数据进行了简单调研,针对于该业务的系统模块在2019年9月底上线,从10月截止到1月,系统共有12天的信息维护记录,其中有2天的信息维护记录是分别对A省和B省补充了一条数据,共维护2XX条数据,平均每天信息维护的数据量在18条以上,其中信息维护数据量最少的一天共耗时约17分钟,其中一天同省市维护的信息量多达93条耗时超过3小时,系统数据记录进一步验证了业务方的说法。
基于以上信息来看,可以判断批量新增的需求是合理的,根据业务发展的计划,现在这个阶段去实现批量新增是有必要的,且在该业务信息的维护过程中,主要使用的应该是批量新增,而单项新增更多是使用在对某个片区进行少量补充的场景。
功能上线后,从用户那得到反馈,业务信息维护的效率相比以前提升了20%,同时在沟通中挖掘到该功能还有优化空间,可以进一步提升效率。