软件咨询师工具箱

软件咨询师对于广大软件工程师来说是一个既向往又神秘的职业。

有人会问:“咨询师要写代码吗?”

A:“有可能的啊。”

有人问:“有不写代码的时候吗?”

A:“有啊,而且更多时候是这样的,软件咨询师既不写代码,也不设计测试用例。”

那软件咨询师干什么呢?他们在客户遇到问题时提供建议。

作为软件领域的专家,他们擅长利用个人丰富的领域知识,去解决软件开发、测试过程中的各种难题。除此之外,软件咨询师需要利用各种技能与工具帮助自己快速收集信息,分析、定位客户的问题所在。

本文尝试通过ThoughtWorks咨询师的一些实践,来总结一下软件咨询师常用到的工具。

工具从两个维度出发:

  • 技能工具
  • 物理工具

技能工具

MECE分析法

MECE是麦肯锡所提出的一种分析方法,是Mutually Exclusive,Collectively Exhaustive的缩写,通常翻译成“相互独立,完全穷尽”。简单的说,MECE提供了一种有效的分类方法,当我们获取了团队中的信息时,这些信息可能非常杂乱。

例如当团队中出现测试效率低下的问题,团队中不同的人会给出非常多,互相交织的,层次不同的问题,有人会说“自动化太少”,有人会说“测试时间太靠后”等等。通过MECE原则,我们可以将这个事实进行抽象,归纳成相互独立的领域,验证是否实现了完全穷尽,让我们对问题的调研更加全面。

Five Whys分析法

Five Whys,从字面理解非常简单,就是连续问5个“为什么”,同样是一种解决问题的分析方法,用于简单快速的找到问题的根源。

例如,

  1. “我现在头痛”–为什么?
  2. “我没休息好” — 为什么?
  3. “我写文章写的太晚了” –为什么?
  4. “我白天没有想好怎么写” — 为什么?
  5. “之前准备工作没有做好” –为什么?

“所以,我对写这篇文章所需要的时间估算出现偏差”。

通过这一系列连续的询问,我发现了导致我现在头痛的深层原因,其实是我对这篇文章的时间估算出现了问题,导致我熬夜加班写,最终没休息好。如果以后要避免类似的头痛,治本的方法是作好规划,减少熬夜。

当然,并不是说Five Whys一定就能找到问题的更深层次的根源,但是在咨询现场、时间宝贵的情况下,是一种相对快速有效的方法。

系统思考

“系统思考就是以整体的观点对复杂系统构成组件之间的连接进行研究。” ——《系统思考》

当我们找到了很多问题之后,需要判断哪些问题需要解决,以及做到怎样的程度时,系统思考会帮助我们从系统的角度出发,发现这些问题之间存在的相互关联与影响,帮助我们的客户作出决策。

例如,从测试的角度出发,我们希望产品的质量非常好,最好一直不出现问题,但是单纯通过测试达到改善质量的目的,可能将增加成本,进而导致产品价格上升,产品竞争力有可能下降等等。在咨询现场,咨询师们会经常遇到这样的问题,通过系统思考,帮我们找到当下最符合客户核心需求的方案。

系统思考在测试领域应用的实例:《运用系统思考,走上改善之路》

手绘

为什么有手绘呢?边讲边画比单纯的语言效果好。拥有好的手绘能力,在白板上绘出形象生动的图,可以极大的提升演讲的效果和趣味性,同时体现出专业的一面。

(图片来自ThoughtWorks Agile Consultant 王伟)

物理工具

常用的工具有Trello、 Xmind、PPT/Keynote,以及现场使用白板。

Trello: 主要作为项目管理工具,主要用途

  • To do list
  • 记录与总结当天的讨论或者其他有价值的信息。
  • 放一些参考资料,如网站链接、文档等。
  • 与其他同事协作,如将任务卡分给同事,让他(们)帮忙确认。
  • 作为长期的咨询方案库,以备后用。

Xmind:作为整理资料与思路的工具,主要用途

  • 总结看到的文章或者视频资料,将其整理为素材。
  • 展示方案,做一些初步方案时,方便讨论。
  • 建立知识图谱,例如自动化测试框架相关信息的总结,让自己的知识越来越系统化。
  • 利用Xmind的模版实现MECE、5Whys分析法,整理思路。

白板:作为咨询现场快速信息收集与展示工具,主要用途

  • 讲解某个系统或者观点。
  • 结合便利贴进行头脑风暴,快速收集并分析想法。

PPT/Keynote: 作为正式的方案交付件

结语

上述工具是ThoughtWorks软件咨询师日常工作中所使用工具及方法的一部分,针对不同的咨询场景还有很多不同工具。但是对于软件咨询师而言,工具只是招式,丰富的领域知识与过硬的技术能力才是内功,像金庸小说中讲到的那样,“无招胜有招”才是最高境界。


更多精彩洞见,请关注微信公众号:思特沃克

Share

成为改变的代言人

改变是困难的,不改变是致命的。—— William Pollard

最近几个月里, 我一直致力于深入理解ThoughtWorks希望带给客户的体验。在这个过程中,我发现了隐含在“咨询师”这个词下的全部特征,这也是普通开发人员和咨询师开发人员的本质区别。

“Consultant”只是一个有十个字母的简单单词。而在实践中,它有许多的含义。甚至还可能变得更加复杂。在ThoughtWorks,我们不仅是软件开发人员,我们中的许多人同时还要兼任测试人员、业务分析师、用户体验设计师,迭代经理,甚至是项目经理。这就是所谓的咨询师。

作为Dev咨询师,我们想要交付经过良好设计且功能完整的代码。作为QA咨询师,我们希望我们交付的代码质量卓越。作为BA咨询师,我们想要代码符合客户的期望和优先级要求。作为UX咨询师,我们想要保证满足用户需求并改进用户体验。作为IM咨询师,我们想要得到客户对产品功能的持续反馈,从而可以有条不紊地进行改进。作为PM咨询师,我们想要保证每个人开心地交付客户喜欢的东西,并完成客户的业务目标。

现在“咨询师”这个词遍地都是,如何理解它呢?作为一个咨询师,我想要做到什么?要回答这个问题,我需要更深入地思考一下ThoughtWorks的价值主张。我发现,ThoughtWorks不仅仅局限在软件交付上。虽然交付是维持的公司核心业务的重要部分,但是我们还想做的更多。我们想要重新定义软件开发方法;我们想要领导世界性的技术创新;我们不想客户只得到我们为他们编写的代码,也想让他们和我们在IT革命的路途上并肩战斗。

亲爱的读者朋友,这就是为什么我们需要咨询师。

咨询师还有许多有价值的特征,虽然这些特征和他们正式的“工作头衔”并不相关。就像我刚才提到的,它还有很多隐含的意义。通过一些调查研究后,我得到了七个词语来描述一个咨询师需要的基本技能。

  1. 责任。将客户的产品/项目视如己出的能力。把项目看作自己的投资,甚至是你自己的创业项目。试着去感受客户对项目完成的热烈期望。留心每一个小小的需求,就像你自己在支付费用一样。当然,项目最后完全属于客户。在此期间,我们应该付出全部努力和精力去帮助他们达成目标。
  2. 沟通。这对于我们达成目标是非常重要的。我们在大多数时间内会和客户肩并肩地工作,以交付一个创新的产品或服务。一个咨询师必须掌握交流的艺术。他们必须能够交流想法,诠释它们,并能捍卫自己的信念。
  3. 对业务领域的理解。作为咨询师,我们需要在产品设计上有影响力。对如何解决问题有独特的看法。帮助客户在他们的业务上取得创新和成功。为了达到这一点,我们需要理解客户的业务。也许我们还需要学习我们面对的特殊市场,阅读专业的书籍和文章,并和此领域的多位专家取得联系。
  4. 流程和方法论。遵循某种产品开发的流程,能够使参与产品开发的每个人保持一致。但问题在于可供选择的方法论太多了。一个咨询师需要知道其中所有的选项,并针对不同情况提出最佳的建议。我们应该用Scrum吗?或者用看板?如何才能帮助客户理解每个流程的优势并指出针对客户环境和需求的最佳流程?
  5. 引导。从产品开发一开始,会议就会是整个过程中的常事,通常由快速启动会议开始。会议由领域专家,投资人,用户,开发流程中的其他相关人员和项目组成员参加。咨询师的一个重要能力是帮助每个人表达他们的观点,并且不遗漏要点。引导包括但不局限于如下几方面:发布并严格执行会议计划,积极倾听,建立与投资人的共鸣,使用好的练习和行为管理工具帮助与会人员达到期望的结果,使用虚拟助手(草图,白板等)。
  6. 训练和指导。咨询师们会在很多时候发现自己需要在某个领域指导客户。有可能关于技术,例如技术类语言或框架培训。有可能关于业务,例如经理需要学习的新思想。影响并帮助其他人找到所需方案是咨询师需要具备的另一个重要能力。
  7. 技能。软技能是一系列与人际关系相关的态度。当两个以上的人一起工作时,除了完成工作相关的任务外,他们之间紧密的互动交流也需谨慎对待。这包括关心他人、在培训中保持耐心、知道如何处理冲突、提供开放的反馈、乐意接受对自己的反馈、适应当前的情况。

也许你已经是一个咨询师。如果是这样,这篇文章可以用来促使你思考你所做事情的重要性。正确的态度和适当的培训,可以让你成为一个能迅速适应周围的人和所面对的业务的全方位专家。

如果你不是咨询师,我想请你保持一个开放的心态。无论你在哪里工作,具有影响力和成为先锋的机会将会不断出现。希望这些影响会给你一些关于下一步计划的启发。我很确定这个世界会越来越需要各种专家兼咨询师。

Share

成为金牌咨询师的五个秘诀

在ThoughtWorks做了一年的咨询师之后,我看到很多同事在项目中脱颖而出,而那似乎和他们的技术背景以及在项目中所花的时间无关。我仰慕这些人,并试图去找出让他们表现出众的“秘方”。通过和他们交流,以及参加培训,我找到了5个让自己在项目中表现出色的秘诀,希望这些对你同样有用!

1. 明确项目目标

工作伊始,我身处于一个大家都必须遵循特定流程的环境里。一切都非常明确,比如需求的获取和分析、开发、测试和审批。那些项目的目标总是很清晰:完成软件交付并让客户感到满意。

但加入ThoughtWorks后,我发现ThoughtWorks的项目不仅仅只有一个目标。虽然并没有正式的定义,但如今我发现这些项目可分为三类:社会项目、内部项目和客户项目。社会项目很显然旨在为社会发展作贡献,内部项目和客户项目则有着一些有趣的差别。

对于客户项目,我们的目标同其他公司一样,是为了让客户满意。具体而言,每个项目都有各自不同的目标。为了帮助客户发展业务,我们可能需要构建框架,也可能需要培训客户的程序员。但殊途同归,我们的目标很简单:软件交付。

在内部项目中,除了以上那些,我们还需要在团队中传承开发文化。如果一个项目中有高级和初级开发人员,我们期望高级人员能够传授结对编程、代码质量、持续交付以及我们软件开发文化的其他方方面面。这个传授知识的过程很可能会延误交付日期,但它培养了团队的能力。

Julio1

2. 定位个人目标

一旦明确了项目的目标,第二个秘诀是定位你自己在项目内的个人目标。

不同的项目有着不同的目标;同样的,不同的人有着不同的目标。在内部项目中,你的目标可以有所不同,既可以是开发新功能,也可以是指导其他同事(比如教授代码质量的理念,如何给予良好的反馈,等等)。并不是说客户项目中不存在这样的机会(有时你甚至有机会去指导客户的开发人员!),但交付软件的压力可能会有一些沉重。

在我第一个项目中,作为初级开发人员,我的目标很明确:尽自己所能地吸收每个团队成员的知识技能!当然,项目的目标会随着项目进展而变化。当为一个远程客户工作的时候,我的目标在过程中发生了变化。在项目前期,我需要去见客户,和客户的开发人员结对编程,教他们一些我会的东西。当完成了这些以后,我的目标变成交付新功能,更高效地工作和致力于发展客户。

3. 明确实现个人目标的方法

这听起来可能有些重复,但明确目标和知道如何实现它们是有很大区别的。

我在项目中做的第一个story是负责在网站的表格里创建一些纵列。那时候我完全不会用前端框架AngularJS。于是我的目标确定了学习AngularJS!并且我知道如何去实现它。

我和师傅聊过怎么明确和实现自己的目标(如今我也与我的徒弟做同样的探讨)。通过这些交谈,我总结了几个很中肯的问题。第一个问题是:“为了实现这个目标,有哪些小步骤?”。通过回答这个问题(比如:找到一个好的AngularJS网络教程),实现一个曾经看起来很大的目标似乎变得容易了一些,不是么?

另一个常见的问题是:“如何衡量我的成长”。衡量成长速度是很主观的,尤其当你的目标涉及了其他人。但是,如果设置一些小的阶段性目标并在每一步进行衡量,每当这些目标实现的时候,你会更有动力。

第三个问题是:“这会影响到谁”,这就引出了下一个诀窍。

4. 当你实现自己目标的时候,谁会受到影响?

有时你能影响的只有自己,这并没有错。有时我们想要学习一个新的框架,提高自己的交流技巧,或者学一些函数式编程,我们无法预测这将如何影响他人。但事实是,即使我们有一个关于自身的目标(比如学习AngularJS),我们仍可以影响他人。

比如,我的同事设置了一个目标:重写项目整个代码库并运用函数式编程的理念来提升代码质量和扩展能力。当这个完成的时候,很多人因此受益:团队开始更高效地工作,客户为此感到满意,对团队更加信任。

Julio2

5. 实现目标的时候,不要忘了分享!

我关于目标的最后一个问题是,如何知道目标是否已经实现了。当问自己这个问题的时候,我同样明白了如何在完成自己份内的工作之余分享我的所学:比如,当能够在客户的开发人员面前做关于AngularJS的演讲时,我知道我的目标已经实现。

分享经验可使你的工作内容昭之于众。注意,我并不是让你变得傲慢,向别人炫耀你做了些什么!

在ThoughtWorks,我们有同他人分享知识的文化,比如 午餐分享会(lunch and learn)、薪火传承计划(coaching program)、升级计划(LevelUp)、ThoughtWorks大学,让大家一起成长。当你和他人分享你的成就时,你也成为了这方面的专家。你不仅仅是回答问题,也得到了更多成长的机会。

最重要的是,要感谢这个过程中的所有参与者,那些教你知识的人,那些完成story好让你有时间去学习的人。

Share