我相信只有在团队例外和同意的情况下才应该做出软件决策。但大多数情况会有所不同。
您如何描述贵公司在软件开发周期中做出决策的方式?是民主吗?/ 是听写吗?/ 是无政府状态吗?
这是我从一位朋友那里听到的:“这不是民主,我是经理,我决定做什么”。
你怎么看?
我相信只有在团队例外和同意的情况下才应该做出软件决策。但大多数情况会有所不同。
您如何描述贵公司在软件开发周期中做出决策的方式?是民主吗?/ 是听写吗?/ 是无政府状态吗?
这是我从一位朋友那里听到的:“这不是民主,我是经理,我决定做什么”。
你怎么看?
团队决策很少能及时提供最佳结果。通常有很多方法可以解决问题 - 性能、质量、可维护性等可以发挥作用,以减少潜在的解决方案,在最佳环境中,具有最多经验和知识的领导做出最终决定(希望在收集来自团队)。所以,我同意应该有一个人来做决定并对结果负责——希望你处于一个让决策者承担责任并且根据技能和能力选择领导者的环境中——否则,未来将是黯淡和痛苦的……充其量是
这将取决于软件团队的规模、团队成员的敏感性以及代码库的成熟度。
我的上一个项目有大约 8 名团队成员同时处理代码,因此每项任务都非常细粒度,每个人只影响他们正在处理的少量代码,我们不断进行代码审查以确保我们的更改与项目的整体方案“契合”。
我目前的项目(在一家新公司)是我从头开始编写的一个应用程序,还没有人在使用它,所以我要成为独裁者并准确地决定事情的样子。我可以对代码进行广泛的更改,随意更改设计模式,重命名和重构令人作呕。在其他人必须进入代码之前,需要大量的自我控制才能确保代码对局外人有意义。但我的希望是,当我完成后,其他任何人都可以直接加入并接管。(否则我将永远维护此代码。)
必须有人做出最终决定。有时(经常)团队中的每个人都不会就某事达成一致。一个好的团队将有一个“止步于此”的人来处理没有达成共识或犹豫不决的决定。很多时候,我被要求成为那个人。我将大部分决策委托给我信任的团队领导,但有时,码头无法就方向达成一致。我已经为公司制定了架构指南并执行了它。我利用每个团队成员的意见、指导和我的判断来打破僵局。我不会说它是专制的,但它也不是一个完全的民主。
最坏的情况是,这是一种无政府状态。
在大型项目的规划阶段,我们与业务分析师坐下来进行一些问答环节,撰写规范草案,并与主题专家讨论业务需求的细节。然后,我们的团队草拟设计文档和流程的草稿。
在此后的某个时候,所有的地狱都破裂了。企业看到初始版本并突然意识到要么它没有说明它要求什么,要么我们没有说明他们要求什么,或者他们一开始就不知道他们要求什么。测试人员应该花在测试上的时间反而花在了开发人员的重构上,马虎。
最初是一个粗略但可能相对优雅的解决方案变成了一堆注释掉的代码,其中包含奇怪和不稳定的变通办法和填充程序,这挑战了每个人的能力,以防止自己的堆栈溢出关于在什么情况下适用什么变通办法的心理笔记代码。
时间被浪费了,人们感到压力很大,而且不可避免地会在测试中发现更多必须解决的问题。最终它会变得像《乐一通》中的东西,厨房用具、船桨、人和远洋班轮的大杂烩都堆叠在一起,不稳定地相互平衡(有点像那个花时间平衡岩石的奇怪艺术家相互叠加)。
关于你朋友的评论,我认为这种领导风格很好,只要那个人愿意与团队讨论。经理之所以是经理,部分原因是他们管理得很好(希望如此),如果他们的代码也很好,那是一种奖励,但如果不是,他们需要接受团队中比他们更精明的人的建议。如果做不到这一点,总会有一个后备立场,可以引用为“无论我工作聪明还是愚蠢,我得到的报酬都是一样的”。
我们的团队很小:一个办公室3个开发人员,隔壁办公室的老板。但即便如此,我想说大多数决定都是在整个团队之间讨论的,最终大的决定是由老板决定的。效果很好。但我认为根据团队规模以及决策对业务的重要性来调整决策过程是有意义的。在大多数情况下,小团队的决策更容易。
总结到目前为止的答案——对于任何团队来说,决策过程都必须在及时性和准确性之间取得平衡。任何团队需要:
决策过程必须反映团队和公司的需求。我在这里看到了相当多的变化,即使在同一家公司内也是如此。因素包括:
我个人认为,当人们觉得他们与决策有利害关系时,团队会更好地工作。当您坚信自己参与了现在陷入困境的重大决策时,投入 100% 的努力会容易得多。软件工程不是无人驾驶的工作,如果人们在不为决策负责的情况下步履维艰,他们只会做一半的工作,因为他们不会寻找决策中的缺陷或制定克服这些缺陷的计划。
我还认为,如果你不能让你的(可能是理性和聪明的)同事相信你的想法是好的,那么你可能错了。即使你是一切的管理者/建筑师/上帝。如果你不能承认你可能是错的,那么你就没有权力掌权。如果你不相信你的同龄人是理性和聪明的,那么是时候找一份新工作了。