一些个人思考

关于产品过度设计的一点思考

一、什么是过度设计
“度”本义是计量长短,后由此引申出“程度”、“限度”的意思;“过度设计”是指设计的功能超出了需求范围。
那么如何衡量一个设计是恰到好处的呢?恰到好处,并不是给用户的东西越多越好,而是在合适的时候为用户提供合适的功能,满足用户的需求。

设计本就是一个取舍的过程,无论是过度设计还是设计不足的问题,都是取舍的结果:

  1. 如果不预先设计,随着时间越久,更改成本越大
  2. 如果预先设计,会增加当前程序的复杂度
    这种取舍没有放之四海皆准的标准,需要根据不同项目不同人员做选择。
  3. 可隔离的实现不做优化设计,当性能需要时再进行优化,需要单元测试支持。
  4. 如何为扩展性预留设计?
    这 是个很纠结的问题,这里面其实有两个概念:扩展和设计。设计是为了扩展,但是设计不能完全解决扩展问题,如果非要用设计解决所有的扩展问题,那基本上就会 造成过度设计。其实很多大型项目,到了一定阶段,就是基本上重写架构了。这时候,相比可扩展的复杂设计,倒不如简单的设计,但是因为设计简单,所以代码更 易懂,更容易被重写。之前看到过一句话:有一种设计,很复杂,不会有明显的问题;有一种设计,很简单,明显不会有问题。我们应该选择后者。

相同的方案,在 A 场景可能是适当的设计,在 B 场景可能属于设计不足或过度设计——这完全取决于所处的场景、需求、以及你可以调用的资源;比如用户中台设计,当公司刚起步、资源有限、业务系统单一时,是不需要做中台设计的;而当业务系统变多,公用业务可以下沉,用户中台此时可以起到降本增效的作用。

二、为什么会出现过度设计
设计在取舍的过程中本身就是一个取舍的过程,是一个哲学问题,在产品0到1的设计过程中,过于的追求完美,设计之初就想面面俱到。
产品经理对于自己的产品,都会有一个美好的愿景,但所谓“心中有蓝图,手中有残缺”——产品的成长,是需要时间和机会的,随着市场、政策、目标用户需求等变化,产品也会不断地更新迭代。
起步阶段,抓住用户,先满足其核心使用场景的需求,再逐渐丰富产品功能和用户体验,相比耗费资源搭建一个大而全的框架更为重要。
希望功能具有可复用性
每个项目可支配的资源都是有限的,产品经理永远觉得开发、测试人力不够用,产品设计过程中也会考虑投入产出比;但因为吝惜人力成本,而“过度设计”,反而会造成资源的浪费。
没有流量的情况下,产品经理过度关注风险
产品设计过程中,注意风险把控是好事,但风险需要分等级,风险把控需要分阶段;前期产品拉新阶段,过度把控风险可能会将兴致勃勃的用户拒之门外,之后再想提高他们的活跃度,难度就增加了好几倍。
需求来自“专家”用户反馈、领导需求、产品经理猜想,用户在使用过程中根本不需要或者现阶段不需要。要知道,对于用户而言,操作越简单,使用成本越低。

三、过度设计带来的影响
产品的需求本身就不是来自于用户,还一定程度上增加了用户使用的负担,和用户的入门成本。繁杂的操作、花哨的功能,并不会得到用户的青睐,反而会给用户带来困扰
过度的设计,复杂的产品,功能都需要产品经理、UI、UE、开发、测试多方资源的投入,占用现有资源的投入,影响其他更有价值的功能开发。
没有跟紧业务节奏,业务方失去激情。一个功能的“过度设计”会导致该功能上线周期变长;尤其在业务拓展阶段,如果不能跟紧业务节奏,等业务方失去激情、信任与支持,产品也就失去了拓展的好时机,之后的合作会变得难上加难。
过度的设计在耗费了大量人力物力的时间上线之后,得到与之相反的评价(负反馈),打击了UI,UE,开发的信心,消耗了老板的耐心。加之上线之后复杂的产品带来了很多未知的bug,消耗着大家的激情。

四、如何避免过度设计
1.小公司资源有效的情况下,适当学会借用资源,比如每个app需要的埋点。产品的从0-1上线之后三方的埋点能快速的接入业务中,而不是消耗人力物力,服务器成本去自己弄一套。三方的埋点对于分析用户存留,页面停留时长,用户喜欢的功能…还有一些界面按钮具体点击情况已完全足够,安全性也完全能有保障,在公司得到长足的发展之后,再尝试自己来接手这一套埋点的业务
2. 把握核心流程
抓住最核心的产品流程,进行快速试错,完美并不是我们的目标,剥离多余的功能,保证主流程可用。
有一个思考“不追求单一维度的极致,选择全面的可成长性”
我个人观点而言,把握核心流程能有一个60分的设计,再产品初期已经足够,当然不是永远要求它只能得60分,而留下的40分是它的成长空间,它可以继续变得更好,变的更完善,这样它可以拥有良好的可拓展性、拥有可发展的高复用性。
3.明确迭代目标,有的放失
再产品前期的设计之内尽量,尽量考虑的周全一点也做到把握核心流程,做一点边缘业务的取舍。到了产品的开发周期中,产品需求的微笑调整是在所难免的,但是大调整除了已经在市场上证明这本身就是一个错误的需求,用户不需要的需求,可以调整外,没有必要动不动就推翻自己的设计,再重新设计。反问一下,难道在设计之后的没有经过市场的验证难道就一定不好吗?就一定是用户需要的吗?

在一个产品的设计中,要做做里程碑式的递进,而不是散乱的修修补补。真实的设计开发中,你很少遇到把一个设计做的完完整整再开工,这是国内软开氛围的通病,我得承认趋利的存在是必然的,所以我们经常会面对做了软设,还得回头修补。
通常来说,修补还得评审,评审还得继续走一轮流程,避免埋下风险和隐患。
这时候如果没有良好的递进,你会感受到,雪花纷飞的邮件、消不掉红点的群消息、无数的@带来的消息提醒……
里程碑式,是我对于这种混乱状态的一种解决方案。
当一个设计问题被发现,最需要立即向团队成员公开透明的应该是两部分:1是待讨论问题是什么,2是讨论结果正式反馈的最晚时间。
然后才是会议组织、问题讨论、风险评估,把这三步就在正式反馈的最晚时间前倒推出来。
这也是透明度的良好保障,每个问题都是里程碑,每个问题都会被更好的跟进和推进。
这样才能让一个需求最终转化为良好的设计,并让设计良好的产生自己的效用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
一、理论方法 1. RNN RNN(Recurrent Neural Network)是一种能够处理序列数据的神经网络,对于图像分类任务,可以将图像的像素点按照行或列的顺序排列成一个序列,然后输入到 RNN 中进行处理。在 RNN 中,输入数据在每个时间步都会与前一时间步的隐藏状态进行运算,从而实现了对序列数据的处理。 2. CNN CNN(Convolutional Neural Network)是一种专门用于处理图像数据的神经网络,它通过卷积层、池化层和全连接层等模块对图像进行特征提取和分类。在图像分类任务中,CNN 通常采用多个卷积层和池化层来提取图像的特征,最后通过全连接层实现分类。 3. Transformer Transformer 是一种基于自注意力机制的神经网络,最初是用于自然语言处理任务的。在图像分类任务中,可以将图像的像素点看作是一个序列,然后输入到 Transformer 中进行处理。与 RNN 不同,Transformer 利用了自注意力机制,可以在不考虑序列顺序的情况下对序列数据进行处理,从而更好地捕捉序列中的信息。 二、实验实现和结果 1. RNN 在实验中,我们使用了一个简单的双向 LSTM 模型进行图像分类。模型的结构如下: ``` BiLSTM( (lstm): LSTM(32, 64, batch_first=True, bidirectional=True) (fc): Linear(in_features=128, out_features=10, bias=True) ) ``` 其中,lstm 层有 64 个隐藏单元,fc 层用于分类。 在训练过程中,我们使用了 Adam 优化器和交叉熵损失函数,学习率为 0.001,batch size 为 128,训练了 10 个 epoch。最终的测试集准确率为 52.08%。 2. CNN 在实验中,我们使用了一个简单的 CNN 模型进行图像分类。模型的结构如下: ``` CNN( (conv1): Conv2d(3, 32, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (conv2): Conv2d(32, 64, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (conv3): Conv2d(64, 128, kernel_size=(3, 3), stride=(1, 1), padding=(1, 1)) (pool): MaxPool2d(kernel_size=2, stride=2, padding=0, dilation=1, ceil_mode=False) (fc1): Linear(in_features=2048, out_features=512, bias=True) (fc2): Linear(in_features=512, out_features=10, bias=True) ) ``` 其中,conv 层和 pool 层用于提取图像的特征,fc 层用于分类。 在训练过程中,我们使用了 SGD 优化器和交叉熵损失函数,学习率为 0.01,momentum 为 0.9,batch size 为 128,训练了 10 个 epoch。最终的测试集准确率为 71.64%。 3. Transformer 在实验中,我们使用了一个简单的 Transformer 模型进行图像分类。模型的结构如下: ``` Transformer( (encoder): TransformerEncoder( (layers): ModuleList( (0): TransformerEncoderLayer( (self_attn): MultiheadAttention( (out_proj): Linear(in_features=32, out_features=32, bias=True) ) (linear1): Linear(in_features=32, out_features=64, bias=True) (dropout): Dropout(p=0.1, inplace=False) (linear2): Linear(in_features=64, out_features=32, bias=True) (norm1): LayerNorm((32,), eps=1e-05, elementwise_affine=True) (norm2): LayerNorm((32,), eps=1e-05, elementwise_affine=True) (dropout1): Dropout(p=0.1, inplace=False) (dropout2): Dropout(p=0.1, inplace=False) ) ) (norm): LayerNorm((32,), eps=1e-05, elementwise_affine=True) ) (fc): Linear(in_features=32, out_features=10, bias=True) ) ``` 其中,encoder 层使用了一个 TransformerEncoder,包括了多个 TransformerEncoderLayer,每个 TransformerEncoderLayer 包括了自注意力机制、全连接层和残差连接等模块,用于处理图像数据。fc 层用于分类。 在训练过程中,我们使用了 Adam 优化器和交叉熵损失函数,学习率为 0.001,batch size 为 128,训练了 10 个 epoch。最终的测试集准确率为 68.16%。 三、分析比较 1. RNN RNN 在处理图像分类任务时,需要将图像像素点按照行或列的顺序排列成一个序列,然后输入到 RNN 中进行处理。这种方法的缺点是无法捕捉图像中的空间信息,同时也容易出现梯度消失或梯度爆炸的问题。 2. CNN CNN 是一种专门用于处理图像数据的神经网络,它可以通过卷积层、池化层和全连接层等模块对图像进行特征提取和分类。CNN 可以捕捉图像中的空间信息,同时也能够避免梯度消失或梯度爆炸的问题。在实验中,我们使用的简单的 CNN 模型在 CIFAR-10 数据集上的分类准确率达到了 71.64%。 3. Transformer Transformer 是一种基于自注意力机制的神经网络,最初是用于自然语言处理任务的。在图像分类任务中,可以将图像的像素点看作是一个序列,然后输入到 Transformer 中进行处理。Transformer 可以在不考虑序列顺序的情况下对序列数据进行处理,从而更好地捕捉序列中的信息。在实验中,我们使用的简单的 Transformer 模型在 CIFAR-10 数据集上的分类准确率达到了 68.16%。 总体来说,CNN 是目前处理图像分类任务最常用的神经网络,它可以捕捉图像中的空间信息,并且具有较好的分类效果。RNN 在处理图像分类任务时存在一些问题,而 Transformer 在图像分类任务中的表现还有待进一步的改进。不同的神经网络模型适用于不同的任务,因此在选择模型时需要根据具体的任务需求进行选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值