作为软件架构师的我第一年学到的35件事


【编者的话】每一个程序员都应该有一个架构师的目标,Yohay Nahmany在成为架构师的路上经过自己的实践经验给出了35个建议,他在文中说,他非常希望在他成为架构师时能够知道这些,所以他希望他人能够吸取自己的教训,少走一些弯路。下面文档来自他在Medium上发表的网络日志。
1.jpeg


介绍

我曾在好几个初创小公司(不到 30 人)担任过软件架构师,那时我不得不快速提升自己以满足角色的需求。所以,我认为分享这段经历可能帮助像我一样有相似境遇的人。

这里有35件事,我非常希望有人能在我担任架构色之前教会我。


注意: 这篇文章有点长——如果你只阅读小标题,应该只需要几分钟。深度阅读可能需要10分钟。
架构师的角色可以产生巨大的影响。为了最大限度地发挥影响力,请专注于您对研发团队的真正附加值,而不是只推广当前流行的框架。

一般注意事项/评论


  • 首先软件架构师的角色没有明确的定义。你可以去挖掘信息,但事实是:你最有可能在学习、设计、编码和评审的过程中塑造这个角色。

  • 架构师负责软件开发周期的主要部分。下面的说明可以帮助你更好地掌握这个角色,它在公司/集团中的位置,以及这个角色如何影响他人。


招聘和用人

2.jpg


  • 将大部分时间将用于招聘、入职、指导和指导。正确选择团队成员和适当的指导将帮助您通过他人塑造您的愿景。例如:明智地选择新员工。如果他们和你一样热衷于某个概念,他们将帮助你在团队成员中以及整个组织内推广它。在指导他们时,确保你的设计决策是一致的。潜在的团队矛盾会降低团队的积极性。

  • 构建您的代码库,以便团队可以从中成长。您选择的架构将影响您当前的员工、他们的技能组合、他们的工作实践以及未来的招聘需求。

  • Mono-repo *Multi-repo***的选择。**如果你错过了过去几年围绕 mono-repo 的热议,将公司的整个代码库放入一个公司范围的单一存储库已经变得很普遍。这会有一些缺点,但从团队的角度来看,有一个巨大的内在优势:每个人都可以毫无障碍的立即学习和贡献代码。当存储库根据专业知识或知识领域划分时,共享代码和信息会变的困难,每个员工的贡献和能力都是“孤立的”,其他团队无法访问。

  • 分离部分代码库以供外部团队将来使用——例如,离岸团队。要实现这一点,请在您的核心组件和运营模块之间实现分离。示例:独立的运营领域,例如分析、报告、管理功能和第三方的 Web 应用程序。


构建设计

3.jpg


  • 通用构建之法 就像拼装宜家书桌、修高速公路、翻新厨房或重新设计完整的代码库,您需要将复杂的问题分解为小的、离散的任务

  • 一个好的设计可以通过许多参数来衡量,但是成功的关键是从一个良好的文档化过程开始,这个过程鼓励团队成员参与、贡献和突破界限——从第一天开始。 例如: 创建一个封装整个过程的简单设计文档。


技术和开发

4.jpg

  • 实现一致性的最佳方法是自动化关键流程。一旦流程自动化归结为“成功”和“失败”,项目管理就会大大简化。
  • 所有最佳实践都应该完全自动化,否则,它们可能经不起时间的考验。
  • 创建一个价值/成本计算器,并用它与公司管理层分享您的分析——这将帮助他们理解决策过程。例如,它可用于在供应商之间进行选择,比如提供开源解决方案的供应商与提供托管解决方案的供应商。
  • 编程语言、库和框架只是达到目的的一种手段。如果您希望人们跟随您而忽略“本月最佳”的炒作,您必须拥有自己强大的编程信念。这些信念将成为您在波涛汹涌的大海中航行时的指南针。示例:始终尝试基于对手头问题的全面理解来解决问题——而不是在讨论问题时调用特定的库名称。
  • 请记住,人们在谈论他们自己喜欢的库(lib)时往往会情绪化(甚至咄咄逼人)
  • 技术决策应始终与业务决策同步。例如:推出新产品应与公司支持该产品的能力充分协调。
  • 不要将您的技术工程师局限于纯粹的研发工作。与其他团队的合作将使每个人受益。示例:与人才招聘人员密切合作的工程师通常会对团队表现出更高的忠诚度,并且这种合作通常会带来更高质量的招聘。他们还可以帮助提高客户成功团队的绩效。
  • 最后,坚持您的信念,不要在可能降低产品质量的紧急新功能上妥协。


质量保护

  • 为会议记录、详细设计和联调过程创建模板。架构师的首要任务是调整团队的质量理念。理念应该反映你在软件设计、架构和开发中深信不疑的信念。什么事都不能碰运气。例子:决定什么应该测试,什么不应该测试。如何测试,如何测量。手动vs自动化。
  • 质量管理是一个持续的过程,涉及方法和效率改进。质量设计应反映产品生命周期的特征。例如:A/B 测试、发布前测试、生产过程中的质量控制测试、左移/右移方法。
  • 一个高质量的设计将以自动化测试、手动测试和代码质量监控的组合为特色。始终寻找附加值。示例:手动测试应进行调整以包括 UX 反馈。应鼓励 QA 团队提供有关各种学科的反馈。


影响力

您将花费大量时间说服您的同事、经理和团队成员接受您的议程、理念和决策,因此:
  • 学会成为一个“善于交际的人”,可以建立合作伙伴联盟来支持你的事业。
  • 您的推介技巧应该与连续创业者的技巧一样好。

  • 您的设计概念展示必须是一流的,才能有效地将新概念展示给广泛的受众。
    • 使用类比提高演讲更有说服力


一定要慎重选择你的类比,确保你没有因为给出人/组织/职业的负面例子而冒犯任何人。我强烈建议使用建筑领域类比——例如道路和建筑物。相似之处无处不在。

人们往往会批评新流程,但如果有一个记录良好的流程,每个人都了解对他们的期望,那么它就变得易于管理了。

示例: 假设您想在团队中引入一个结对编码流程,仅仅将任务分配给团队成员是失败的秘诀。相反,提供一个有据可查的流程描述,这将减少他们之间的摩擦,并让每个人都有机会发言并影响决策。

委派责任并以身作则。 展示如何完成工作,以及您如何使用您拥有的整套工具,并指导他们取得更好的结果。
提供有关委派任务的指导,直到不再需要为止

一开始可能有点不舒服,但在指导和独立之间取得适当的平衡,你的同事会让你成为比你梦想成为的更好的领导者。

工作流

  • 创建模板会让您的生活更轻松。示例:此处进行设计审查(链接至上部项目符号)
  • 模板可以托管在存储库上,公开相同的 CI/CD 管道、代码指南、安全性、审计和 linting
  • 可以为会议记录、设计概念和调试过程创建模板
  • 模板可用于探索新功能
  • 模板可用于准备工作面试。示例:没有正确/错误答案的问题池,但可以衡量理解的深度。预先准备好的技术问题,从团队的日常工作中收集任务


文化

  • 切勿在没有视频通话的情况下就 Slack/WhatsApp/即时消息进行争论
  • 保持谦逊感并控制自我——许多人际关系挑战等待着你
  • 与所有利益相关者进行开放式沟通对于您的团队和公司的蓬勃发展至关重要
  • 对变化持开放态度,对批评持开放态度,对学习持开放态度


**原文链接:35-things-i-learned-in-my-first-year-as-an-architect 翻译:张亚龙

0 个评论

要回复文章请先登录注册