本文探讨了Lambda不同的运作方式,强调了观察、迭代、简化等原则在工程实践中的重要性。文章论述了如何在解决问题时建立良好的沟通文化,重视可观测性,并提出敏捷开发和过程管理的有效策略,以提升团队的协作与生产力。
我们经常听到 Lambda 的运作方式与其他公司不同。与我们合作的许多人称赞我们交付的速度和质量。我们将这一切归功于一套任何人都可以应用的原则,可能会使其他人受益。可以总结为:观察、迭代、简化,与代码保持密切关系,无论是在其静态形式还是动态形式,并在正确的时机融入流程,以满足工程需求而非管理需求。让我们分解一下:
我们提倡一种文化,让工程师可以感受到将事物投入生产和将他们的技能应用于有趣挑战的快乐。
工程就是在给定成本/收益权衡下应用知识来解决问题。你无法解决看不到的问题。看到就是测量。利用你的工具诊断问题,制定成功的指标,然后在应用解决方案后再次测量。
将可观察性构建到你的系统中。你看到的越早,你就能越早对变化的需求和变化的指标做出反应。
这同样适用于性能工程。优化只有在变成需求之前并在测量之前时是过早的(因此是有害的)。
在你感知-行动循环中频繁迭代以缩短反馈。
一旦识别出一个问题,就要公开讨论。当然,如何与其他人沟通在与人交流时非常重要,但如果框架正确,技术讨论不应冒犯任何人,因为任何技术解决方案的优点或缺点仅反映其自身,而不是实施它的人或群体的价值。
问题(或解决方案)越早沟通和讨论,最终的解决方案就会越好,风险和成本就会越低。
“骄傲并不是羞耻的对立面,而是其源头。真正的谦卑是对羞耻的唯一解药。”
如果有一个我们不断重复且可以在任何情况下应用的口号,那就是 KISS,保持简单,傻瓜。
关于这个已经有很多的书写,在其他许多明智的反思中也有所体现,例如乔·阿姆斯特朗的著名引述 “先让它工作,然后让它美观,如果你真的、真的必须,让它快速。90% 的时间,如果你使其美观,它将已经很快。因此,真正的,只需让它美观!”;或在 Python 之禅的一些理念中:
美观胜于丑陋。
显式胜于隐式。
简单胜于复杂。
复杂胜于复杂化。
扁平胜于嵌套。
稀疏胜于密集。
可读性重要。
这些一般性的格言有时可能看起来像陈词滥调或同义反复。它们的价值在于时刻牢记并问自己“这在这个上下文中如何适用?”
代码库应该在所有目标环境中轻松、干净地构建。项目的新成员应该能够毫无障碍地进行设置。以拥有最新的自述文件而自豪,让人们可以跟随,并让你的代码在他们的机器上迅速运行。尽可能多地进行开源。将你的代码放到世界上。
开发者应该对基础设施进行亲身实践,而不仅仅是熟悉通常的开发工具,还要了解将其投入生产的管道和代码。你的管道应该干净,并具备可观察性和可调试性,和产品代码一样。
在绝对需要之前不要进行泛化。重复代码两到三次是可以的。解决你需要解决的问题,不要纠缠于如何抽象或泛化解决方案,只需以最简单的方式完成它。泛化和抽象随着时间自然产生。
大多数新挑战性项目通常有两个不同的阶段:
事情刚刚开始。正在解决的问题尚未得到很好的理解,存在很多不确定性;有些人对问题了解得刚好足够,以意识到这是一个困难的任务,但又不够去解决它。这造成了很多对事情应如何进行以及最佳前进方式的焦虑;无休止的争论交替进行,毫无进展。有时一些知识比什么都不知道更糟糕。
度过这个阶段需要认识到你并不完全知道如何做事情,这是正常的;你必须通过试错来弄明白。这时的口号是 快速前进,尝试,快速失败,弄明白。
在这个阶段引入大量流程是适得其反的,当你甚至不确定自己在构建的是什么时,你无法制作甘特图并制定截止日期。这样做只会减缓你的进度,或者把你引向错误的方向。
这个阶段的士气也非常重要;人们担心项目可能不会成功,问题不可解决。如果长时间没有任何更新或进展,他们就会感到泄气。解药是快速编码一些执行最终所需基本行为的东西,并且每过一周应该扩展和改进功能。不要在创造大量仍然无法执行基本功能的代码的情况下让周数过去。展示定期更新,快速合并更改并进行尝试,定期部署以及拥有快速反馈循环对于让人们保持兴奋和专注是至关重要的。
经过几周的工作,项目开始成型,问题得到了更好的理解,解决方案也正在顺利实现。人们开始在项目周围发展一种共同的词汇,他们知道接下来需要解决的问题是什么以及如何去做。焦虑逐渐消退。
在这个阶段,有两件事情变得重要:
解决这些问题(尤其是第一个问题)需要引入 流程。记录下所有剩余任务,制作甘特图,定义里程碑并相应地分配工作,此时都是必要的。主要障碍不再是那么多不确定性,而是正确的规划和执行。
随着项目持续成型和发展,合并新更改变得越来越困难;其复杂性使你无法知道每一个细节。此外,破坏事物的成本在开发时间和生产中的潜在费用上都更高。因此,全面的测试和代码审查变得至关重要。
流程是一个 成熟 项目的标志。它是非常重要的,但在必要之前不应引入。
大多数项目经历这些阶段不止一次。通常,每当项目获得涉及具有挑战性任务的新需求时,其中一部分必须回到实验阶段。
这里的关键是 不确定性。当你发现某项任务困难并且人们花费过多时间争论如何解决,而始终未尝试(因害怕打破事物或做出错误选择)时,你需要回到第一个阶段。这并不意味着将所有流程抛弃;从事其他常规任务的人员可以照常工作。只是应对这一新挑战的部分团队需要改变其方法。
在众多无尽的流程管理工具和图表中,我们发现最有用的是甘特图。
以下是我们在项目需要时制作甘特图的过程大纲。
- 原文链接: blog.lambdaclass.com/lam...
- 登链社区 AI 助手,为大家转译优秀英文文章,如有翻译不通的地方,还请包涵~
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!