在我作为软件工程师和软件架构师的过去 20 年的职业生涯中,我与各个领域和学科的软件工程师进行了许多对话。他们中的一些人是拥有 8 年或 10 年经验的高级工程师。他们中的许多人在职业生涯的早期就拥有 3 到 5 年的经验。其中一些是我的同事。有些是求职者。在某些时候,他们都以我一遍又一遍听到的同一个问题告终:
“我想成为一名解决方案架构师。有哪些资源可以进一步了解建筑?” — 许多软件工程师提出的问题。
好吧,他们问错了问题。如果您继续阅读,您就会知道为什么。此外,由于我的公司在撰写本文时正在招聘首席软件架构师,因此有必要解释一下什么是软件架构师以及如何成为一名软件架构师。
什么是软件架构?
首先什么是软件架构?正如软件架构师的标题所暗示的那样,我经常听到的一个常见类比是建筑物的建造。建筑建筑师创建建筑的蓝图。工程师们在物理上构建它并使其按照蓝图工作。我认为这在多个方面都是一个糟糕的类比。
建筑类比使人们过分关注系统的静态方面。在这方面,城市的创建是一个更好的类比,因为它既涉及道路、建筑物和桥梁等静态元素,也涉及交通流量和居住在城市中的人等动态元素。建筑师是提出城市设计、应该如何建造的计划以及如何将一切融合在一起的人。最后但并非最不重要的一点是,建筑师对城市的发展有一个愿景。但软件架构远不止这些。有时建筑师需要放大和缩小城市,以确保计划能够奏效。建筑师可能不太关心建筑物的室内设计,而决定在哪里放置红绿灯很重要。建筑师需要广泛的,同时,深厚的技术知识来构建通常与城市一样复杂的软件。架构师还需要向业务利益相关者传达一致的信息,而不需要所有技术细节才能成功。
建筑施工类比意味着建筑师是团队中最资深的人,他做出所有关键决策,预先制定设计规范,然后在实施过程中实施设计。起初,对很多人来说,成为房间里最有经验的人,达到技术资历的顶峰,这看起来很酷。让整个团队听从你的意见,听从你的命令和做出的决定,你可能会感觉很好。但仔细想想,这会给架构师做出正确决策的巨大压力,而这在项目的早期阶段通常不太可能。在敏捷团队中,这意味着开发团队不是自组织的,架构师是阻碍团队变得敏捷的障碍。架构师从团队中夺走了所有所有权。谁愿意在高压下处于这样的位置?
软件架构的作用
软件架构可以被视为位于业务目标和支持业务实现这些目标的软件系统之间的核心。
软件架构用于满足业务目标。它是根据要实现的业务目标设计的。然后根据设计实施软件系统,它应该符合这种设计。这应该是一个迭代过程。正如我之前提到的,在项目的早期阶段通常不可能做出正确的决定。最好的决定是你还不必做出的决定。架构师会为实现创建足够的设计以满足业务需求。这会关闭反馈循环,因为您可能在敏捷和 DevOps 实践中看到过类似的东西。这里的想法是,随着世界的变化,业务需求也在变化。软件架构应该支持业务随着需求的发展而采用变化。
软件架构“-ilities”
软件架构是如此具有挑战性的主题,以至于您必须设计一个同时满足所有业务需求和所有质量属性的系统。这几乎不可能仅靠一个人来完成。这通常是架构师和领域专家团队合作的结果。
软件架构不仅仅是图表、方框和线条。让我们以质量属性之一安全性为例。仅通过查看带有连接到某些框的一些线的高级设计图,我可能无法看到任何安全问题。我什至不知道这个设计是否真的有效。它是保护系统的代码。因此,架构师编写代码并与开发团队密切合作非常重要。或者,它也可能适用于能够阅读代码并经常与开发团队沟通的架构师。这就是我在城市设计类比中提到的软件架构师放大和缩小设计时发生的情况。如果架构师不与开发团队交谈,也不编码,
什么是软件架构师?
从历史上看,软件架构师是在纸上草拟逻辑流程规范并将其交给另一个团队(称为打孔器)的团队,以生产打孔卡并使软件工作。
随着技术的进步,我们不再需要这样的过程,软件架构师的定义也变得不那么明确了。在现代 IT 中,软件架构师不是一个头衔或等级,因为他们不会在一夜之间给你最高的软件开发权限。它与 Scrum 团队中的任何其他角色一样是一个角色。我认为软件架构师是最有趣的角色。与医生、土木工程师、心理学家、社会工作者或会计师不同,您无法通过单一培训课程获得软件架构师资格。事实上,世界上几乎没有一所大学提供软件架构学位。软件架构师需要对几乎所有内容有广泛而深入的了解,才能实现上一节中提到的目标。
软件架构师做什么?和谁一起做?
正如我之前所说,软件架构位于业务目标和满足它们的软件系统之间。软件架构师将业务与说不同语言、不同想法和不同关注点的开发团队联系起来。多层管理和开发团队孤岛只会让沟通变得更糟。拥有专业知识并掌握相关信息的软件工程师不是决策者,而管理团队中的那些人是没有相关信息的决策者,这种情况并不少见。软件架构师连接公司各个层级,掌控技术细节,解决相互冲突的权衡并推动组织前进。
相反,当人们在某些组织中拥有软件架构师的头衔,但他们只停留在企业阶梯的顶端或只放大图片时,他们就会脱离现实。正如乔尔·斯波尔斯基(Joel Spolsky)所说,这些人被称为建筑宇航员,他们没有贡献,也没有生产力。许多大型组织似乎能够负担得起很多!
软件架构师的技能和获得这些技能的方法
多样的体验
几乎所有事情的多样化经验对于软件架构师的角色至关重要。它让您知道何时在公司阶梯上爬升和爬下,以及放大和缩小图片时要查看的内容。当某些架构设计应用于不同的上下文时,您还将观察到模式。在 10 多家公司工作后,我最终在一家咨询公司Zuhlke工作,在那里我不再需要换工作来获得广泛的经验。我获得了来自几乎无限行业的项目,包括金融科技、保险科技、物流、制造、奢侈品时装、初创企业,而且名单还在继续。
领域知识
对某些业务领域的深入了解对于软件架构师的成功至关重要,因为您不仅要知道它是什么,还要知道将要或可能是什么以及为什么。客户经常来找软件架构师,要求向他们展示业务领导者在做什么以及如何做。领域知识还可以帮助软件架构师说一种业务通用的语言,这反过来又帮助他们在公司阶梯上爬上爬下,将管理层与开发团队联系起来。
人际交往能力
软件架构师也是一个很好的沟通者。许多优秀的高级软件工程师发现很难晋升为软件架构师,因为他们没有在听力、口头和书面沟通、促进、冲突管理、演示、谈判和说服等技能方面证明自己。工作所需的确切技能类型取决于您工作的特定公司环境。
技术能力
没有一个单一的大学学位可以让你成为一名软件架构师。您需要学习有关软件工程所有领域的所有知识,包括软件设计、编码、质量保证、DevOps、性能工程、软件安全、项目管理、软件支持等。这些技能对于创建满足软件架构“-ilities”的解决方案至关重要。在与开发团队中的专家交谈时,软件架构师可以更好地理解相关信息,因为他们在这些领域获得了实践经验。
在作为开发团队成员的典型工作中,我可以从事各种领域的工作,包括后端、前端和 DevOps。这让我能够以第一人称的视角了解幕后发生的事情,并使我能够与我的团队保持近距离的距离。
业务和发展过程
业务流程描述了组织的业务运营,并定义了通常没有明确说明为软件项目需求的业务需求。软件架构师应该知道,或者至少知道向谁询问业务流程的相关信息。通过向一个行业的组织提供解决方案,软件架构师需要数年时间才能成为领域专家的情况并不少见。
了解技术流程、软件开发生命周期和最佳实践的重要性与了解业务流程一样重要。这是因为软件架构师通常在确保业务和开发过程之间的一致性方面发挥着关键作用,这是迭代交付和现实项目规划所必需的。
领导
到现在为止,您应该对软件架构师如何拥有所有知识并掌握所有这些技能感到惊讶。好吧,答案是,他们没有!一个人不可能拥有这一切。打造出色的产品需要一支有能力的专家团队。成功的软件架构师通常是有效的领导者,他们的团队中有优秀的成员,并让他们成长为比个人更大的东西。
软件架构师通常被视为团队的代表。他们在领导、管理和协调业务方面与技术方面付出了巨大的努力。虽然人们通常认为领导者只在前面领导,但有时在一个项目中需要所有五种领导风格。
您准备好通过成为软件架构师来提升您的职业生涯了吗?现在是投资的最佳时机!
【更多阅读:禅与计算机程序设计艺术】
What it takes to become a software architect?
I had many conversations with software engineers in various domains and disciplines during the past 20 years of my career as a software engineer and software architect. Some of them were senior engineers having 8 or 10 years of experience. Many of them were early in their career having 3 to 5 years of experience. Some of them were my colleagues. Some were job candidates. At some point, they all ended up with the same question that I heard over and over again:
“I want to become a solution architect. What are the resources to learn more about architecture?” — A question asked by many Software Engineers.
Well, they were asking the wrong question. You will know why if you read on. Also, since my company is hiring Lead Software Architects as of this writing, it is worth explaining what a Software Architect is and how to become one.
What is Software Architecture?
What is software architecture in the first place? As the Software Architect title implies, a common analogy that I often hear is the construction of a building. The building architect creates the blueprint of the building. The engineers build it physically and make it work according to the blueprint. I would argue that this is a poor analogy in multiple ways.
The building analogy makes people focus too much on the static aspects of the system. The creation of a city is a better analogy in this regard since it involves both static elements like roads, buildings and bridges, and dynamic elements like traffic flows and people living in the city. The architect is the person who comes up with the design of the city, the plan of how it should be built, and how everything is going to fit together. Last but not least, the architect has a vision of how the city would evolve. But software architecture is more than that. Sometimes the architect needs to zoom in and out of the city making sure that the plan would work. The architect probably won’t care much about the interior design of a building while it is important to decide where to put a traffic light. An architect would need broad and, at the same time, deep technical knowledge to build software that is often as complex as a city. The architect would also need to communicate a consistent message to the business stakeholders without all the technical details to be successful.
The building construction analogy implies that the architect is the most senior person in a team who makes all the critical decisions, creates the design specifications upfront and later enforces the design during implementation. At first, it looks cool to a lot of people to become the most experienced person in the room, reaching the top of technical seniority. It might make you feel good to have the entire team listen to you, following the orders you give and the decisions you make. But when you think about it, this gives the architect so much pressure on making the right decisions, which is often not quite possible at such an early stage of a project. In an Agile team, it means that the development team are not self-organised and the architect is an obstacle preventing the team from becoming agile. The architect takes all the ownership away from the team. Who would like to be in such a position under high pressure?
Role of Software Architecture
Software architecture can be seen as the centrepiece sitting between the business goals and the software system that supports the business to meet these goals.
Role of Software Architecture
Software architecture is used to satisfy business goals. It is designed based on the business goals to be achieved. A software system is then being implemented according to the design and it should conform to such design. This should be an iterative process. As I mentioned earlier, it is often not possible to make the right decisions at the early stage of a project. The best decision is the decision you don’t have to make, yet. An architect would create just enough design for implementation to satisfy business needs. This closes the feedback loop as you might have seen something similar in Agile and DevOps practices. The idea here is that as the world changes, so do the business requirements. The software architecture should support the business to adopt changes by evolving with the requirements.
Software Architecture “-ilities”
Software architecture is such a challenging topic that you have to design a system that satisfies all the business requirements and all the quality attributes at the same time. This would be near impossible to be accomplished by just one person. Often this is the result of the collaboration of a team of architects and domain experts.
Common software architecture quality attributes
Software architecture is not just diagrams, boxes and lines. Let’s look at one of the quality attributes, security, as an example. I probably won’t be able to see any security issues by just looking at the high-level design diagram with some lines connecting to some boxes. I won’t even know if the design really works at all. It is the code that secures the system. Therefore, it is important that the architect writes code and works closely with the development team. Alternatively, it might also work for architects who can read code and communicates often with the development team. That’s what happens when a Software Architect zooms in and out of the design as I mentioned in the city design analogy. If an architect doesn’t talk to the development team and also doesn’t code, they decouple themselves from reality and the architecture they produce won’t be practical.
What is a Software Architect?
Historically, Software Architects are the team who sketched logic flow specification on paper and handed it to another team, called punchers, to produce punched cards and make the software work.
Source: Wikimedia Commons
With the advance in technologies, we no longer need such a process and the definition of Software Architects has become less well defined. In modern IT, Software Architect is not a title or a rank since they won’t give you the highest software development authority overnight. It is a role just like any other role in a Scrum team. I would argue that Software Architect is the most interesting role. Unlike doctors, civil engineers, psychologists, social workers, or accountants, you don’t earn a Software Architect qualification with a single course of training. In fact, almost none of the universities in the world offer a degree in Software Architecture. A Software Architect needs a broad, and at the same time, deep knowledge of almost everything in order to accomplish the goals mentioned in the previous section. So what does a Software Architect do with these skills and knowledge?
https://dilbert.com/strip/2008-03-04
What does a Software Architect do and with whom?
As I said earlier, software architecture sits between the business goals and the software system that satisfies them. The Software Architect connects the businesses with the development teams who speak different languages, think differently, and have different concerns. With multiple layers of management and development team silos, it only makes communication worse. It is not uncommon that Software Engineers who have the expertise and hold the relevant information are not the decision-makers, and those people in the management team are the decision makers without the relevant information. The Software Architect plays a critical role in climbing up and down the corporate ladder and zooming in and out of the technical details in order to resolve conflicting trade-offs and drive the organisation forward.
An astronaut — Photograph by NASA
In contrast, when people have the title of Software Architect in some organisations but they only stay at the top of the corporate ladder or they only zoom in on the picture, they decouple themselves from reality. As Joel Spolsky said, these people are called Architecture Astronauts who don’t contribute and are unproductive. Many large organisations seem to be able to afford a lot of them!
Skills of a Software Architect and ways to acquire them
Diverse experience
A diverse experience in just almost everything is critical to the role of a Software Architect. It lets you know when to climb up and down the corporate ladder and what to look at when you zoom in and out of the picture. You will also observe patterns when certain architectural designs are applied in different contexts. After having worked for over 10 companies, I ended up working for Zuhlke, a consulting company, where I no longer needed to change jobs to gain a wide spectrum of experience. I am offered projects from an essentially unlimited range of industries including FinTech, InsurTech, logistics, manufacturing, luxury fashions, start-ups, and the list goes on.
Domain knowledge
Deep knowledge of certain business domains is crucial to the success of a Software Architect because you have to know not only what it is, but also what will be or could be and why. The clients often come to the Software Architect and ask to show them what and how the business leaders are doing. Domain knowledge also helps Software Architects to speak a language common to the business, which in turn helps them climb up and down the corporate ladder connecting the management with the development team.
Interpersonal skills
A Software Architect is also a great communicator. Many great Senior Software Engineers find it difficult to get promoted to Software Architects as they haven’t proved themselves with skills such as listening, verbal and written communications, facilitation, conflict management, presentation, negotiation and persuasion. The exact types of skills required for the job depend on the specific company environment you are working for.
At my company, I’m offered the opportunities to practice these skills in safe environments such as the ones we called “Zuhlke Day” and “Zuhlke Camp”. My employer also offered me formalised training in these areas. Lastly, the constructive feedback culture of the company has supported the growth of many individuals.
Zuhlke Asia Camp 2019 @ Legacy Yen Tu, Vietnam
Technical skills
There isn’t a single university degree that qualifies you as a Software Architect. You need to learn everything you can about all areas of software engineering including software design, coding, quality assurance, DevOps, performance engineering, software security, project management, software support, and so on. These skills are crucial to creating solutions that satisfy software architecture “-ilities”. When talking to the experts in a development team, a Software Architect understands better the relevant information because they have gained hands-on experience in these areas.
In a typical day of work as a development team member, I can work on areas of all kinds including backend, frontend, and DevOps. This gives me a first-person view of what’s going on behind the scene and enables me to keep a close distance from my teams.
Business and development processes
Business processes describe the business operations of an organisation and define business requirements that are usually not stated clearly as software project requirements. The Software Architect is expected to know, or at least to know whom to ask for, the relevant information of the business processes. It is not uncommon to see that it takes a Software Architect years to become a domain expert by delivering solutions to organisations from one industry.
Understanding the importance of technical processes, software development lifecycle and best practices is as important as knowing business processes. This is because the Software Architect usually has a critical role in ensuring the alignment between the business and the development processes, which is required for having iterative deliverables and realistic project planning.
Leadership
By now, you should be amazed how Software Architects have all the knowledge and mastered all these skills. Well, the answer is, they don’t! It is simply not possible for one person to have all that. It takes a team of capable experts to build great products. Successful Software Architects are often effective leaders in having great members in their team and growing them to become something bigger than individuals.
Software Architects are often seen as the representative of a team. They put great effort into leading, managing, and aligning the business side with the technical side. While people often think that leaders only lead in front, sometimes it takes all five leadership styles in one project. The leadership training my company offered taught just that.
Are you ready to level up your career by becoming a Software Architect? Now is the best time to invest!
About the author
Alan Tai is a Principal Software Architect from Zuhlke, a premium global consulting company delivering top-quality solutions to our business partners. If this article makes sense to you and you would like to join me in solving challenging problems with our technical excellence, here are the current openings at my Hong Kong office:
Senior/Lead Fullstack Engineer (Java Backend + Flutter Frontend)
Senior/Lead Fullstack Engineer (Java Backend + React Frontend)