我有一个亨希,一旦人们看到了软件的经济潜力,他们就开始寻找“扩展它”的方式,我们还没有停止搜索。
有些关于软件的东西,使其与其他工艺品不同。很久以前,我读到了“弗雷德里克布鲁克斯的”神话月份“,我认为他称之为意外的复杂性。我们如何找到方法来组织围绕这么多其他创意学科的工作,但写软件仍然很难?
我的意思是什么?需要自己的事情可能是在某种方式成为企业数月或数年的工程的过程中要做的几天。对于企业,我的意思是可以具有50个软件工程师的初创公司。但我也看到了更糟糕的程度。
一家公司的一位高级领导者曾告诉我,所有的大公司都像这样运作,大的公司“可以把它拉下来”。随着“像这样的”我的意思是中央项目管理,迁移项目需要数月的时间,而没有明显的客户影响。我得到的心理形象是拿破仑在一些山上绕着他的部队洗牌。他需要有骑兵,但首先他必须在河流上移动那个单位,但之前可能发生三个其他单位需要移动,等等。当然,它可以完成(如Twitter陷入困境,但它几乎没有好玩,也不看起来很好地利用每个人的时间和金钱。
有趣的是,我一直在想着军方,但这只是思想工作的方式,对吗?我们已经看到了许多其他隐喻,用于组织在规模上写软件的工作。有瀑布,一种自上而下的方法,由工程项目启发。布鲁克斯本人建议外科医生的团队作为一个更好的比喻。敏捷软件开发没有明确的隐喻,除了它基本上是一群人(“上述过程!”)。不要问安全。
我发现自己回到电影业务,因为它也是一项活动,它也具有高度的创造力,而且还有很多专业化(任何人真正知道“最好的男孩抓住”吗?)。他们还有几十年来搞定,所以也许这可能是软件开发的缺失。
现在,关于软件开发是如此特别?不知何故,它似乎是一个有益于在一次思想中所做的很多的活动(如这种漫画所示)。不知何故,你面前的代码只是冰山一角的发生了很多心理表达的事情,似乎甚至给出了最好的意图,你有时需要改变它并重写整件事(除非你必须,否则不要这样做。至少是快速做到的)。
一旦你开始涉及多个人,你就可以尝试将它们所有工作都与同一心理表现(如配对编程)一起工作,或者您需要对责任领域介绍一些限制,因此每个人都可以介意自己的业务,或者至少独立工作。
我读过很长时间的另一本书是克里斯托弗亚历山大的“关于综合形式的笔记”,如果我记得正确,其中一个主要见解是,只要你需要为许多限制设计一个系统,就可以了如果你一次拍出一件问题(我当然可以释放),则令人征调。所以这是一个好主意,对吗?!
问题是,通过将问题分解为部分,严重限制了解决方案空间。如果你做错了,那么正确的解决方案取决于两个不同的部分,如果以孤立的方式看出可能没有意义的东西。
对于某些类型的程序(例如WebServices),我们找到了如何构建它们以使工作更轻松的方式,但是通常在编写一个软件系统时,它会为启动电源并将您移动到Decacorn域中时,您可能只会弄清楚半途而废通过最好的方法是,如果你没有勇气清洁到那样,那么你实际上最终会有一个(精神)的劳动,没有监督,这意味着软件架构师,计划经理,以及频繁的办理登机手续。
每次决定谁在团队内部工作时都会发生这种情况,也发生在团队中的哪些工作,而且一旦您在公司中定义团队。这将对您写的软件具有非常实际的影响,也称为康威的法律。通过Skelton和Pais(DanielTrümper推荐给我)的“团队拓扑”书籍采取了这一见解,并通过在您希望系统看起来像的方式设计团队来应用“反向Conway Sereuver”。但仍然需要知道这应该是怎么样的。
敏捷软件开发提出了强大的策略,这是为了写出将工作的最简单的事情,然后重构(这意味着清理)不断地代码。有书(我很久以前读了一本书,我现在意识到是“由Martin Fowler重构)谈论重构,但这些是较小的变化,如他们所属的课程中的移动字段(我简化!)
此时,我对我来说变得非常清楚,“在比例下写软件”不是努力或意志的问题。单独使用“速度快速和打破东西”将帮助您实现(和是的,我知道他们将其改为“快速移动稳定基础设施”)。我们结构软件和团队的方式非常真实,并将限制任何单一工程师或团队可以与所做的工作量有所关系。
隐喻,我发现自己回到了一个城市,我首先通过灰色和vander wal阅读了“关联公司”书中。城市是显着的,因为它们往往很老。即使他们已经重建并改造了几十年历,并且不断变化,它们几乎看起来不朽。
城市可以被认为是人类活动的平台。他们提供道路,电力,建筑物,商店空间等基本基础设施,您可以租用,现在是互联网。这些基础设施中的一些是非常缓慢的(如道路),而其他部分则更加灵活,就像公寓或商店的使用方式一样。
如果软件是以相同的方式建造的?如果我们的业务的核心部分会像街道,那么所有那些新的东西都是我们可以在顶部建立的东西,实验,如果它不起作用,撕下它?我已经看到了一些来自内部的电子商务公司,而他们的系统是能够处理每秒数千笔交易的技术,但它不觉得这一点,但应用程序和网站就是非常深入的纠缠如此休息。即使您想要,您也无法创建一个全新的应用程序或网站。
相反,如果我们以我们建立我们的软件的方式建立了我们的城市,您需要通过特殊的车库进入商店,并通过屋顶出口来散步到另一个自定义建筑物从废物容器到达结账。有些窗户只是涂上画作,因为它们是MVP。
我们正试图与平台团队合作,与提供商品服务的城市电力公司的平台团队合作,以便不是每个人都需要在地下室运行自己的柴油发电机。这是一个很好的第一步。但通常,平台团队正在努力满足“客户”(如后端服务和数据科学家的部署基础设施),并且我们通过利用平台团队来删除激励措施来为客户提供正确强制的。
城市也是显着的,因为中央控制只有有限。如果他们看到市场并关闭他们没有足够的业务,商店会开放。相比之下,大多数公司都以更自然的方式运行,导致错误或没有正确的决定。
至少,在公司内建立一个新的项目应该比从头开始的开始,但我的亨希是许多公司都失败了。
正如你现在所能实现的那样,我只有指针,没有答案。我们仍然不在那里。也许在50年内,我们找到了正确的角色,正确的建筑物团队的正确方法,以及架构软件“城市”的正确方法,这是有趣的。
直到那时,我的建议是看看结构并问自己,你的“系统”中的任何一个“单位”都有多么难以完成。跨责任领域的一切都增加了复杂性。团队拓扑书致以结束于结束的团队,这完全拥有要解决的问题,由平台团队和管理一款非常复杂的技术的团队支持。
对于那些需要以流水线时尚合作的团队,一定要查看整个系统,以确定瓶颈并专注于改善它们。这是Eliyahu Goldratt的“限制理论”背后的核心观点。您需要限制正在进行的工作,以便与您的瓶颈相匹配,其他一切都是忙碌的工作。
也许甚至有另一种方法,探讨人们更有效地合作的方式。我简要提到了上面的一对编程,我必须承认我历史上相信它无法完成,或者只有少数人互相认识并弄清楚彼此反弹的方式。
具有讽刺意味的是,在我的经验中,只是弹跳彼此的想法,这不是这效果很好的方式。你最终可能会让他们的想法扔进戒指中,只是为了别人找到它的错。在最糟糕的情况下,这可以变成最多,谁是最聪明的竞争。
除非你照顾每个人都对这个问题有不同的理解,除非对这个问题不同,否则没有专注于信息收集和建设性的创造力。我最近开始阅读更多关于设计思维方法,例如,头脑风暴都可以收集信息并产生新的想法。我发现这些事情在联合问题解决方面令人惊讶地有效。
在任何情况下,我们绝对没有弄清楚如何在规模上写软件,但我也宁愿不相信这只是每个人的方式。