首页 文章 精选 留言 我的

精选列表

搜索[CEL策略],共10000篇文章
优秀的个人博客,低调大师

解锁高效创新:IPD策略如何重塑产品开发流程

IPD(集成产品开发)涵盖了产品从创意提出到研发、生产、运营等,包含了产品开发到营销运营的整个过程。围绕产品(或项目)生命周期的过程的管理模式,是一套生产流程,更是时下国际先进的管理体系。IPD(集成产品开发)以产品成功、用户满意为最终目标,通过构建一套科学、持续、稳定、可重复、高质量的管理模式。 引入IPD(集成产品开发)模式可以从传统产品研发模式,转变到制度化、可持续地推出有市场竞争力、满足客户需求的成功产品。以应对激烈市场竞争,帮助企业和团队达成战略目标。援引国际著名PRTM咨询公司的统计分析数据,成功引入IPD能够给公司的产品研发生产带来明显的提升: 产品上市时间缩短40%——60%; 产品开发浪费减少50%——80%; 产品开发生产能力提高25%——30%; 新产品收益(占全部收益的百分比)提升100%。 通过上述数据分析,我们可以得出结论:在产品研发过程的管理中采用IPD模式,能够比较全面地管理产品研发的全生命周期,让项目开发进度变得更加可控,达到快速适应市场变化、减少研发投入、降低生产成本、提高产品质量,让产品在其特性上更为稳定可靠,具有高适应性。IPD(集成产品开发)模式成功实施后,企业可建立起以市场需求和客户需求互为驱动的良性产品研发流程。 那么IPD(集成产品开发)模式下的全生命周期产品研发流程是什么样的呢? 一、产品方案提出 通过市场分析,结合企业的愿景和盈利目标,根据对产品和技术发展,消费者需求变化和习惯偏好情况的调查分析,及时地进行相关技术和研发能力的储备。对未来一段时间内主推的产品给出详尽的策划。与忠实用户保持密切的沟通与交流,向客户征求对于产品的意见,同步规划中的初级产品方案或新的产品功能设计征求反馈建议。通过与用户交流互动,更好地研发出符合消费者需要的产品或功能。 二、需求评估,方案确定 完成新品的策划方案后,企业或团队针对客户需求定义的产品市场和价格定位、主要性能和参数要求等进行分析和评估,确认产品的可实现性及商务条件。 三、组建IPD(集成产品开发)团队 新产品研发方案确定后,组建跨部门IPD(集成产品开发)团队,主要包括项目经理、产品经理、工程师、硬件开发、软件研发人、测试、交付人员、财务人员等,产品开始研发。 四、产品研发阶段 根据用户与市场需求(有时也会是企业/团队服务的甲方),并在此基础上综合考虑产品的功能、结构、工艺等信息,选用符合产品功能与性能需求的硬件。同时在软件研发层面确定合适的研发迭代、故事点和研发小组规模,使传统的研发设计流程,转变为并行的IPD(集成产品开发)产品研发设计流程。 五、质量管控/过程管理 产品研发的质量管控/过程管理,是需要贯穿产品全生命周期。从研发设计阶段开始,确保选用的材料、组件等符合一个产品在其生命周期内的性能需求;软件设计需要保证软件的质量,保证其在使用周期内能够安全、平稳运行。 六、软硬件集成 基于产品设计方案所选择的软件设计,产品硬件设计相关材料及参数,IPD(集成产品开发)团队会进行相应的定制开发,确保软硬件性能的适配。针对一些重点性能参数要求,需要重点关注和优化。 七、产品测试Debug 产品软件硬件研发设计完成之后,这时IPD(集成产品开发)团队中的测试小组会针对产品硬件设计方案进行评审和优化,对初步发现的各种缺陷问题,进行方案改进和优化。团队会进行产品的试生产。将试产出来的样品,分别进行硬件、软件、性能、质量等多方面、多轮次的综合测试。尽可能充分地验证产品软硬件性能、发现产品研发过程中存在的问题和风险,在此基础上不断进行研发方案改进、修正,产品软硬件性能优化。 八、验收通过 产品在通过测试和Debug后,会进入生产环节,在产品研发和测试的过程中,IPD(集成产品开发)团队会定期与用户/甲方客户充分沟通,使其参与并对相关产品进行各方面综合指标提出建议,保持用户/甲方客户全过程参与确保研发设计方案、定制产品的质量、进度符合需求。 九、产品交付 产品正式验收通过后,产品生命周期走入了持续大批量生产交付阶段。IPD(集成产品开发)团队需与市场销售/甲方客户保持密切的沟通,了解该产品的终端销售情况,收集用户真实反馈数据。提前组织产品相关生产物料的采购,以便合理统筹安排企业生产资源,确保产品能够按照市场需求/甲方客户需求的节奏和需求数量进行交付。 十、跟进服务 产品上市以后,IPD(集成产品开发)团队,需要对该产品销售过程中的产品质量持续关注。当产品出现研发缺陷或质量问题及时跟进与解决。 十一、全生命周期完成 IPD(集成产品开发)团队需要对研发的产品项目进行全生命周期的跟踪及服务并启动项目复盘,完成该项目内部的最终评审验收。针对项目运作过程中的失误,总结经验教训,形成相关的内部案例资料,作为IPD(集成产品开发)后续内部培训、人员培养的案例。 总结 IPD(集成产品开发)涵盖了产品从概念到生命周期结束这一技术创新的过程的管理,强调以市场需求作为产品开发的驱动力,它包括市场管理、需求管理和产品开发、技术开发四个业务流程。IPD(集成产品开发)模式基于市场和客户的视角,采用需求驱动来规划和研发产品,其管理体系其核心成员是由来自市场、研发、测试、采购、制造、服务等方面的人员组成的跨部门团队,大家共同来推进管理整个IPD产品规划和研发开发过程。大量的数据和实践已经给出结论,通过实施IPD(集成产品开发)能够提高企业效益,降低产研成本,提高产品开发的效率,提升企业和团队产品开发能力,最终提高企业自主研发创新能力。但IPD(集成产品开发)项目的实施是否能达到预期效果,是受企业对项目的管理能力制约的,需要企业和团队根据自身实际情况评估,选择适合自身发展的模式和道路。

优秀的个人博客,低调大师

每日一博 | 微服务复杂查询之缓存策略

在上一篇 缓存设计的好,服务基本不会倒 介绍了db层缓存,回顾一下,db层缓存主要设计可以总结为: 缓存只删除不更新 行记录始终只存储一份,即主键对应行记录 唯一索引仅缓存主键值,不直接缓存行记录(参考mysql索引思想) 防缓存穿透设计,默认一分钟,防止缓存击穿和雪崩 不缓存多行记录 前言 在大型业务系统中,通过对持久层添加缓存,对于大多数单行记录查询,相信缓存能够帮持久层减轻很大的访问压力,但在实际业务中,数据读取不仅仅只是单行记录,面对大量多行记录的查询,这对持久层也会造成不小的访问压力,除此之外,像秒杀系统、选课系统这种高并发的场景,单纯靠持久层的缓存是不现实的,本文我们来介绍 go-zero 实践中的缓存设计之biz cache。 适用场景举例 选课系统 内容社交系统 秒杀 像这些系统,我们可以在业务层再增加一层缓存来存储系统中的关键信息,如选课系统中学生选课信息,课程剩余名额;内容社交系统中某一段时间之间的内容信息等。 接下来,我们以内容社交系统来进行举例说明。 在内容社交系统中,我们一般是先查询一批内容列表,然后点击某条内容查看详情, 在没有添加biz缓存前,内容信息的查询流程图应该为: 从上图以及上一篇文章 缓存设计的好,服务基本不会倒 中我们可以知道,内容列表的获取是没办法依赖缓存的, 如果我们在业务层添加一层缓存用来存储列表中的关键信息(甚至完整信息),那么多行记录的访问不再是一个问题,这就是biz redis要做的事情。 接下来我们来看一下设计方案,假设内容系统中单行记录包含以下字段 字段名称 字段类型 备注 id string 内容id title string 标题 content string 详细内容 createTime time.Time 创建时间 我们的目标是获取一批内容列表,而尽量避免内容列表走db造成访问压力,首先我们采用redis的sort set数据结构来存储,根需要存储的字段信息量,有两种redis存储方案: 缓存局部信息 对其关键字段信息(如:id等)按照一定规则压缩,并存储,score我们用createTime毫秒值(时间值相等这里不讨论),这种存储方案的好处是节约redis存储空间, 那另一方面,缺点就是需要对列表详细内容进行二次回查(但这次回查是会利用到持久层的行记录缓存的) 缓存完整信息 对发布的所有内容按照一定规则压缩后均进行存储,同样score我们还是用createTime毫秒值,这种存储方案的好处是业务的增、删、查、改均走reids,而db层这时候 就可以不用考虑行记录缓存了,持久层仅提供数据备份和恢复使用,从另一方面来看,其缺点也很明显,需要的存储空间、配置要求更高,费用也会随之增大。 示例代码: type Content struct { Id string `json:"id"` Title string `json:"title"` Content string `json:"content"` CreateTime time.Time `json:"create_time"` } const bizContentCacheKey = `biz#content#cache` // AddContent 提供内容存储 func AddContent(r redis.Redis, c *Content) error { v := compress(c) _, err := r.Zadd(bizContentCacheKey, c.CreateTime.UnixNano()/1e6, v) return err } // DelContent 提供内容删除 func DelContent(r redis.Redis, c *Content) error { v := compress(c) _, err := r.Zrem(bizContentCacheKey, v) return err } // 内容压缩 func compress(c *Content) string { // todo: do it yourself var ret string return ret } // 内容解压 func uncompress(v string) *Content { // todo: do it yourself var ret Content return &ret } // ListByRangeTime提供根据时间段进行数据查询 func ListByRangeTime(r redis.Redis, start, end time.Time) ([]*Content, error) { kvs, err := r.ZrangebyscoreWithScores(bizContentCacheKey, start.UnixNano()/1e6, end.UnixNano()/1e6) if err != nil { return nil, err } var list []*Content for _, kv := range kvs { data := uncompress(kv.Key) list = append(list, data) } return list, nil } 在以上例子中,redis是没有设置过期时间的,我们将增、删、改、查操作均同步到redis,我们认为内容社交系统的列表访问请求是比较高的情况下才做这样的方案设计, 除此之外,还有一些数据访问,没有像内容设计系统这么频繁的访问, 可能是某一时间段内访问量突如其来的增加,之后可能很长一段时间才会再访问一次,以此间隔,或者说不会再访问了,面对这种场景,我们又该如何考虑缓存的设计呢?在go-zero内容实践中,有两种方案可以解决这种问题: 增加内存缓存:通过内存缓存来存储当前可能突发访问量比较大的数据,常用的存储方案采用map数据结构来存储,map数据存储实现比较简单,但缓存过期处理则需要增加定时器来处理,另一宗方案是通过go-zero库中的 Cache ,其是专门用于内存缓存管理。 采用biz redis,并设置合理的过期时间 总结 以上两个场景可以包含大部分的多行记录缓存,对于多行记录查询量不大的场景,暂时没必要直接把biz redis放进去,可以先尝试让db来承担,开发人员可以根据持久层监控及服务监控来衡量何时需要引入biz cache。 项目地址 https://github.com/tal-tech/go-zero https://gitee.com/kevwan/go-zero 欢迎使用 go-zero 并 star 支持我们!

资源下载

更多资源
Mario

Mario

马里奥是站在游戏界顶峰的超人气多面角色。马里奥靠吃蘑菇成长,特征是大鼻子、头戴帽子、身穿背带裤,还留着胡子。与他的双胞胎兄弟路易基一起,长年担任任天堂的招牌角色。

腾讯云软件源

腾讯云软件源

为解决软件依赖安装时官方源访问速度慢的问题,腾讯云为一些软件搭建了缓存服务。您可以通过使用腾讯云软件源站来提升依赖包的安装速度。为了方便用户自由搭建服务架构,目前腾讯云软件源站支持公网访问和内网访问。

Rocky Linux

Rocky Linux

Rocky Linux(中文名:洛基)是由Gregory Kurtzer于2020年12月发起的企业级Linux发行版,作为CentOS稳定版停止维护后与RHEL(Red Hat Enterprise Linux)完全兼容的开源替代方案,由社区拥有并管理,支持x86_64、aarch64等架构。其通过重新编译RHEL源代码提供长期稳定性,采用模块化包装和SELinux安全架构,默认包含GNOME桌面环境及XFS文件系统,支持十年生命周期更新。

WebStorm

WebStorm

WebStorm 是jetbrains公司旗下一款JavaScript 开发工具。目前已经被广大中国JS开发者誉为“Web前端开发神器”、“最强大的HTML5编辑器”、“最智能的JavaScript IDE”等。与IntelliJ IDEA同源,继承了IntelliJ IDEA强大的JS部分的功能。

用户登录
用户注册