1、管理心态
大赢家思路
我个人认为这是职业生涯中最重要的心态之一,每个人都希望自己能成功。但无论是个人创业或谋职打工,总是先有公司的成功,才有自己的发展。这样说显得很明白,可实际上往往不容易做到,站在自己利益角度看待公司是无可厚非的,但太过了则很容易心态失衡,进而东奔西走、折腾自己。IT行业中,多数人的黄金职业生涯有限,如果总是对现状不满,看着别人怎么好,那么就很有可能失去自己身边的绝好机会。大家都踏实做好自己的事情,都把蛋糕往大里做,没理由竹篮打水的,企业的成功必然和个人成功双赢。
团队和个人
团队建设是管理中老生常谈的话题了,我也一样要重点检视这个环节。我对此的看法是先有个人、才有团队(希望不会曲解“以人为本”),具体表现为:
IT员工在一个岗位上所求无非包括成就感、保持前沿、个人利益以及工作氛围,因此团队建设的目标如果能和个人目标贴合,事情往往容易推动。
首先,做好MISC这样有铸就辉煌的产品以谋求成就感和个人利益是每个人的目标,也是团队目标的根本,也正是前面说的大赢家思路。其次,团队应当能够提供每个人进步的机会。我们做的是应用型产品,为了给运营商、SP客户提供更好的服务,繁琐的工作往往不少,这种状况下许多人会感觉自己缺乏提高。而借助团队式学习、培训,这种感觉是可以消除的。IT技术对多数人而言,应知比应会更重要,团队式学习恰好适合。第三,和谐愉快的部门环境对个人的感觉是很重要的,这方面的部门建设,对管理者而言重要的是公正地看待每个人,对个人而言则是先修身再做事,如果眼前只有自己的目标,那么目标自然能够达到,也能越来越大。
职业心态
“和尚撞钟”形象地代表了职业心态,对我从事管理工作很有借鉴。一方面,这口钟代表了明确的目标,能坚持去撞本身就很执着。另一方面,围绕着钟(目标),工作也容易抓住重点,杂念和头绪自然较少。
“就事不就人”代表了另一种职业心态,对于团队建设尤其重要。工作中的不同观点、争执是非常普遍的,百家争鸣才有利于繁荣。在技术工作中,没有级别、资历、面子,只有分析、比较和择优。管理者看待员工也是如此,如果工作始终是首位的,自然容易公正。
不完美主义
这实际是一种看待问题的态度,对创业型公司益多于弊。在公司快速成长的过程中,出现各种问题在所难免,消极的抱怨无济于事。在多数情况下,如果真的等到没有问题出现,恐怕连锅都揭不开了。所以,以良好的心态正视问题、积极对待、逐步改进,这样才可能步步为营。CMM、管理体制改革、绩效考核等也并不是要求公司的管理水平一步到位。不过这种心态并不适合于对技术的追求,任何软件产品的成功都源于精雕细刻。
例如:软件开发管理中,一方面,我们需要不断制定各种流程约束随意的开发行为,另一方面,对应每个发展阶段的流程应当是简单、清晰、实用的,把握的尺度在于:以当前的管理水平、参与者习惯是否能够较容易地接受。毕竟,习惯在很大程度上影响了管理方法的可操作性。
2、工作方法
主动的沟通
从CMCC到ASPire,产品到开发、管理层到员工,几乎每个人都意识到需要沟通。对于开发部门而言尤其重要,很多问题也就出在这方面。主动性是促进沟通的最佳方法,公司也一直在致力于创建这种文化氛围。不过,不少方面也不尽如人意。首先,技术层面的沟通还缺乏积累,虽然现在不至于是“口授需求+代码”,但至少来个顾问或新员工,看设计方案还不如读代码来得快,着急的是还要在本来注释就少的代码中分析作者的意图。其次,彼此的理解在许多时候不容易做到,问题出现后,责任更多象出炉山芋一般。
时间-质量-资源的平衡
创业型软件企业经常会在这三个点上失衡,形成负反馈:市场压力大、时间催得紧,人员、设备资源不充分,接着就是软件质量不过关,进而恶性循环。客观地分析,对我们而言,进入良性循环并不容易,所以当前的管理会尽量追求这三个因素的平衡。
首先,从资源角度,无非是量和质的问题。一味增加数量投入对于创业公司而言并非上策,一般人海战术过后往往是无事可做,何况很多事情并非简单增加资源就能顺利推动的。所以,质就变得非常关键:开发环境需要提高并行度和效率,科学的分配可以提高人员的利用效率,良好的培训与积累则容易从根本上提高技术素质。
其次,提高软件的质量是个复杂的过程,很多环节、多个部门必须紧密配合与协调,对软件开发而言,需求、设计和编码的质量是重点,相关需要不少流程和工作方法配合,但不管是什么样的质量体系,无非是:前期的工作保证质量(例如一份有指导意义的设计文档)、后期的工作监督质量(例如复审和测试)。与时间、资源相比,这点基本不能让步,因为质量欠佳的东西会耗费极多的资源和时间的。
时间的平衡策略相对清晰些,即抓住:里程碑时间点和任务优先级,进度计划只要不违背这两点,其它的都可以调整。
目标和过程的结合
目标化和过程化的管理是两种典型的做法,前者突出工作的效果,后者则有助于持续发展。事实上,在管理过程中这两方面往往是结合起来的,正如矩阵管理中项目和部门的关系。按照这种理解,项目就是目标化的管理,为了达到既定目标,做法可以很灵活多样,因此,潜在的副作用就经常存在,如开发中为了解决某个问题做的权宜解决方案,因为进度原因而不得不在一些环节上省略等等。部门的管理则更多地从过程方面进行补充,并不断完善过程本身。许多时候,过程是促使一些管理方法得到落实的具体手段,例如:依据编程规范的代码复审、版本的提交管理等等。
当然,无论具体管理中是目标或过程化的,最终,能在有限的时间内拿出高质量的软件产品始终是我们的目标,一切的过程还是围绕这点。
审视与改进
我们在工作中经常进行任务或问题的盘点,这实际上是一种审视,这个过程应当反复进行,无论技术或管理都是如此。
在管理方面,老总们经常会提示我们几点:规划、指挥、组织、控制,对我们的审视工作也可以适用:是否对本周工作有所计划、人员是否安排到位、怎么推动大家在一起的协同工作、推进过程中出现了什么问题、有哪些因素可能导致什么风险、等等。正如我们对运行软件系统的例行检查,对管理工作也是如此。
管理工作中最苦恼的是:问题层出不穷,习惯难以矫正。激进的思路是改革,可能见效快,但风险也大,毕竟软件企业不是车间流水线;稳妥的思路是改进,即针对审视中发现的最关键问题切入,按照最实用的做法解决问题,小问题肯定不断,但大的方面是进步的。中层管理的做法和编程序是很类似的:解决一个问题对周围模块/环节的影响当然是越小越好,步步为营、积少成多。
细致而精确
中层管理中的决策有些类似编渔网,只有充分致密了,各种隐含的问题才能提早暴露出来,例如:资源冲突、技术风险、方法矛盾等。卓望虽然是创业型公司,但管理上的起点确实比较高,例如:量化的绩效考核、各种成本核算等等,大家的目标都是追求量化和精确,这对中层管理提出了很大的挑战,如果每个环节不细致深入,工作很难做。
各种素材、数据的积累是细化工作的基础,我们目前的阶段是:想要什么数据明确,但数据来源过于分散、不真实,过于繁琐。项目方面一般还好,但到了部门就有些混乱了。如果没有真正实效性的知识管理工具,没有其它相关过程的完善,管理不容易精确起来。
3、技术致胜
来自于开发,深感技术配合管理的重要性,没有技术的进步,就象用超级计算机指挥人手工插秧。定位在高水准公司,我们的管理水平也应当是技术致胜,因此这里把一些技术观点也拿出来讨论一下:
工具
包括管理工具和业务工具,前者使管理更加方便准确,后者则是部门管理工作的重点之一。在工作落实中,这两个方面有些共同之处:一是对模型的抽象,这种模型可以是工作流、组件化服务器,也可以是测试流程、版本增量定义等。模型才是工具的本质,一个再好的工具,如果不符合我们的管理过程需要或业务要求,也起不到实际作用。当然,我们可以借鉴先进工具中的思想改进自身管理。二是拿来主义,顾问公司、工具厂商、Internet等都是我们外围的资源,既然卓望立足于高起点的管理,那么这些方面就不需要完全做辛苦的探索。
不过,现状并不乐观。例如对于业务工具的利用,在当前MISC系统中还很局限,技术手段单一,存在相当多的重复开发,缺乏对可重用资源的定义和积累等等。这些对于MISC系统的快速占领市场、产品体系延伸、减少开发和维护的资源消耗都是不利的。
应变的技术体系
MISC是应用型平台,因此应变能力是技术体系的重要要求。从部门角度看,集中考虑是很有必要的,因为这往往和版本分支管理、保证对客户的服务质量密切相关。
我们的现状是:系统中到处是小开关,没有统一的考虑,而且开关多了,可能的潜在冲突也不容易发现。
对此问题,我们的分析方法是:在现在业务模型的基础上,考虑将来一段时间可能的发展,或者加强问题,在扩展后的业务模型中抽象出核心的业务元素/对象,并在定义接口时采取OO的分析方法使之通用化。类似于美学的设计,往往越是简单的模型通用性和扩展性越好。当然,具体过程仍然是复杂、艰苦的。
开发吞吐量
稍微分析一下开发者的时间表,往往能发现相当多的时间花在:因为需求改变而返工、大量重复的编码、程序调试、版本反复提交、测试排错、系统部署等看似正常的软件活动中,不过这些“正常”活动常常经不起推敲,例如:部署中发现有问题,找不到任何文档中有说明,于是揣测了很久,还是无解,不得不问到当事的开发者。这并不正常,更说明不了技术的先进性,只是浪费每个人的时间。
有的是技术问题,而多数不是。对我们而言,如果能减少、甚至消除一些本不该出现的技术“误差”,几条枪真的就能做些大事了。
持续的技术改造
正如产品的不断优化,对技术始终应当有雕琢的心态,而缺陷不仅是已经出现、表面上的,还需要从分析、想象中有所预见。
通过集体的反省与完善,不难归纳:开发中面临的困难、临时性的权宜方案、系统可能存在的瓶颈、代码中的坏味道、顾问给我们提出的建议等等,审视后提前做出的改进比系统出问题后再穷于应付肯定主动许多。
技术保证服务质量
MISC体系为最终用户、各种外围子系统、运营商以及SP等对象提供数据、业务接口和用户界面类型的服务。提升技术水平带来的必然是高质量、灵活多样的服务。以往的工作中在业务接口方面已形成了多样化的模式,例如:基于Socket的高速消息通道、基于CORBA的远程对象调用接口、基于HTTP/XML的企业间Web服务接口等。只要我们在数据、服务、界面等方面对外提供更优质的软件服务,业务的拓展会更加容易、迅速。
研究投入
公司建立的开发部门架构是以技能划分的,因此对部门而言,对所属领域的技术应当有深刻而专业的认识。为了能更好地适应公司将来的产品发展,提前的研究很有必要。例如:高性能数据对象层、移动终端适配技术等。与科学研究、架构研究不同的是,开发部门的研究更多针对一些系统实施中的关键技术,或者一些可能采用的国际先进技术。