* }8 |% k" B2 y; S/ |* { M: M. K4 y; x/ y( s; I6 s( b S, x
* h4 g. e( A- \ S3 A此外,诸如“分页查询的适用场景”、“存储过程的引入原则”、“事务控制的指导意见”、“安全通讯的备选方案”之类的指导意见库也需要不断的完善和丰富。 ' H+ ?- p8 w( x ( A0 t* h: n* q! ?+ }4 y8 _/ v" y# w6 h! P
+ r/ [" M8 p$ E( K$ Z+ r% j) h3 v
问题四:平台选用迭代的方式开发,模块的优先级应如何定义? . p3 c4 L' |6 d- }( QABC平台的用户是业务部门,基于ABC平台开发的应用系统才会面对真正的终端用户,为了“在达成最终用户要求的基础上降低个人工作强度”,实施工程师必然会综合考虑最终用户的“应用级”需求,传递到平台研发这里,形成了平台开发要求。这里我没有使用“需求”,因为用户提出的永远都是要求,需求是由项目组相关人员分析获得的(个人观点),提交用户确认的需求分析报告中已经包含了功能优先级的定义。 $ G- @5 y, t' E$ T2 U% C' R- o" M' ]- I4 U7 Q
由于着眼点的不同,开发团队和用户理想中的功能模块优先级很难获得统一。用户采用“哪个先上线带给我的好处最多”来判断,而开发团队则用“如何安排次序最能节约研发成本”来评判,最终的选择结果一般是二者相互妥协的折中。 1 \1 ~; n' x! ] |7 c8 R/ z( Z4 @7 b( _4 T
对于ABC平台的研发,我觉得可以尝试考虑“最小可用版本包含什么功能”、“再扩大一下范围呢”、“先不做aa,直接做bb,能否满足可用要求”这几个问题来定义模块优先级。显而易见,业务部门眼里的“最小可用版本”应该不会包括系统服务总线,这就是冲突,需要讨论,需要权衡。 . s1 L5 f. X9 G9 r" v; m+ d, Z) L* G7 m3 R$ n' F
本节关键词:权衡。' x" K" L+ q3 A3 ~
7 A% S& w4 \! @; H9 k u0 z) M% [; y! B 3 ^! j! A- m$ M问题五:针对平台模块,可否抽象出统一的作业指导说明书?2 _8 p! d% I. J5 m0 k! G# O
作为具备多年实践经验的软件工程师,我们都熟悉软件工程中定义的开发方法和开发流程,然而直接用作平台模块的作业指导却显得过于遥远,虽然我们理应遵循软件工程的各项原则,但我觉得依然需要一个可行性较强的作业指导说明书作为补充,或称之为操作指南。 4 q/ d3 T1 }0 `$ m, _: g# f# [9 ~% w$ i. T* o4 u
我尝试着为这个操作指南罗列了如下条目(当然,若真的施行,还是需要研发团队集体的力量): ( T- z3 k$ F. A! |& j5 [/ o( s; k1 Y; P& j: {3 ~
1) 模块需设置“产品经理”之类的岗位角色,对整体功能和研发路线负责; & Z+ R8 k. X1 y/ J- s2 H ' o: W+ m4 u2 M2) 产品经理主导需求调研和分析过程,是需求规格说明书的责任人;" Y& R! u% c! v5 q+ C
: ?1 Z$ q/ H# c4 m2 N+ t6 a
3) 模块的技术架构遵循统一的平台标准; % y- H- L- U9 D- n8 @3 s4 t: W: f& l- ^0 V7 v- M) s
4) 模块首先确定其功能定位和设计目标; $ c% d' C' E( _/ t" { _$ b, u5 p; X. S5) 模块第二步要明确的是关联系统和交互接口; : g6 F$ m' ~% t V0 S0 z H8 t8 C/ D8 k4 f8 [) Z1 `6) 将模块需求分类,为非通用需求设置辅助工具单独设计; ! n4 P6 O; @5 {* \2 z2 \# j* I. o+ P: g) R, r5 d$ s. j
7) 模块内部功能细分形成逻辑独立的子模块,按实际需要提供剥离支持;1 d$ S# M/ W7 y- K" @) y* n
* M) z. s9 s* `, c
8) 外部接口的定义和伪装实现优先于内部设计; 5 |2 N E) w1 D% E! `2 [ 0 v+ W, `" R# `4 ?( f P本节关键词:指南。 : k+ N( o+ h0 f h9 S- m! W6 I ( e0 G3 c+ f2 [$ N4 W3 r4 l5 r0 y7 B: e$ m5 w
2 P9 }9 N1 ^3 T) V: D7 `
问题六:平台模块可否委托研发?如何施行?. \) M3 W7 k$ C4 E
对于不能直接产出利润的平台研发,公司的资源总是紧张的,人手总是不足的,除了补充人员之外,我们可否选择委托研发呢?这里我没有使用“外包”,因为委托研发除了外包,还有“交由业务部门自行设计开发”的一层意思,而且我个人认为编码实现外包是可以的,而系统设计最好在公司内部实现,至于具体模块的产品经理(Product Owner)必须是内部人员。* G. ^. U L( ]0 P) i: ~
* f# S; `7 _; Z% r' _7 U, n
委托研发的核心思想是研发任务“分流”,而工作“分出去”的重点在于如何“收回来”,这就需要制定一套评价体系(就是问题三的输出结果)用作任务回收时的验收标准,向业务部门分派任务时申明验收标准(他们无须理解水渠的规划,只需保证挖的坑符合特定要求即可)并附带作业指导说明书(诸如“如何挖坑更省力”、“论铁铲和䦆头在挖坑工作中的效用”之类的东西),只要业务部门遵循这些规范进行开发,最终就可以顺利地纳入ABC平台达到“水到渠成”的效果。 + E6 \, [! Z- D' K9 c; E9 t5 H9 b6 p8 ^- Y0 u
本节关键词:分流。 & i# z6 `5 l9 F8 H% Q# D- S1 {& g+ ^' o% W& h1 r! K, L0 R: F
0 L2 j) t. z. p' k/ C' e Z+ h% C; i. R* A! R
问题七:ABC平台研发的产出是什么?除了平台本身还应该有什么? ) N+ G2 U7 j. [+ B g5 \+ b# X虽然我们当前的主要任务是研发一个切实可用的优秀平台,但本着效用最大化的原则,还应当考虑一下平台研发的附带产出。对于这个问题,我首先想到的是“锻炼队伍”,后来又归纳出了“求渔”一词。 + [8 B, Q# o1 \2 L: c& s& q' A! m( ^6 E, m3 M. k
话说“授人以鱼不如授人以渔”,这是从赠予方的角度解读的,假设我们是接受方呢?于是想到了“求渔”一词,然后ABC平台在我眼里就成了一条鱼,如果通过这次捕鱼(不挖坑修渠,改结网捕鱼了)的经历进行有意识地总结,提升到渔的境界岂不更好?我们总结一套适合公司现状的行之有效的系统开发规范,新成员加入时首先参加流程培训,而后即可以最快的速度融入团队开发,虽然这些已经超出了ABC平台的范畴,但我还是觉得非常有必要分析讨论一下。 . B" Y f/ C( l: d% r$ v; {4 G' }& l z- ^' `- O
本节关键词:求渔。0 A+ m* [4 y) V0 R
8 \- }) P) D/ l n4 A; C/ T' [1 O. E
$ d7 {5 M! c: \2 c2 S& t