Introduction to Requirements Analysis: Talking about Architecture (5) The Growth Path of Architects

I have also been engaged in research and development for some years, and have done some architectural design work during this period, including the transformation of C# monomers into Java microservices, and the transformation of Python monomers into Java microservices. I also try to summarize some of them from the perspective of my own
experience Knowledge points, and at the same time describe how to grow into a qualified software architect, for reference only, welcome to discuss with me.

1. Definition of architect

As the name suggests, an architect refers to a person who is engaged in system architecture work in a company/team.
First of all, it must be clear that the architect mentioned in this article is not a position, but a role, that is, a person who is engaged in architecture work.

  • Every company, or even a company's different teams, have different perceptions of architects, and the definitions and responsibilities of architects are also different;
  • In every team, there are more or less people doing architectural work, such as the team main program and senior developers;

So it doesn't mean that your position is an architect, and you have reached the standard of an architect; similarly, your position is not an architect, but you may be the architect recognized by this team.
Points to pay attention to as an architect:
an architect cannot be separated from the existing development environment, the status quo of the project, the company's resource investment, etc., and cannot sit in a castle in the air and command the team to fight.

Architect Classification

According to the subdivisions of different fields, architects also have some subdivision definitions, which generally include:

  • Software architect: Responsible for designing and planning the overall architecture of the software system, covering requirements analysis, technology selection, domain division, application deployment, etc.;
  • Data architect: responsible for the design and planning of the data system, including data warehouse, data collection and governance, etc.;
  • Network architect: responsible for the design and planning of the overall network of the system, including Internet access, routing and switching, VPN and network security, etc.;
  • Cloud Architect: Currently, cloud computing is prevalent, responsible for the deployment and planning of cloud computing, including cloud platform selection, container management capabilities, virtualization, automation, etc.;
  • Security architect: Responsible for the security architecture planning of the software system, including global security policies, access control, vulnerability management, audit policies, etc.;
  • Front-end architect: generally refers to the browser application architect, responsible for the overall architecture design of the front-end application, including the front-end framework, technology stack, cross-browser compatibility and unified capability packaging, performance optimization, etc.;
  • Mobile application architect: generally refers to an Android/iOS application architect, responsible for the overall architecture design of mobile applications, including mobile security, technology stack, cross-platform compatibility, test program design, performance optimization, etc.;
  • Back-end architect: mainly responsible for the back-end architecture design of the application, including database design, API design, performance optimization, data security, etc.

The above subdivisions are not necessarily comprehensive, and the boundaries of many fields are actually not clear enough, such as:

  • Software architects generally cover the entire software system, and should have a certain understanding of various fields and have a certain focus (mostly on the back end)
  • Both front-end architects and back-end architects should standardize and review the API;
  • For example, software architects and data architects must pay attention to data security and cross-system message transmission protocols.

Responsibilities of a Software Architect

  • 1. A comprehensive understanding of business requirements
    As an architect, the most important thing is to be proficient in business, and even required to become a domain expert. I said in the first lecture of the series: finding problems is more important than solving them
    . If you don’t understand the business, the designed architecture is useless. trusted.

  • 2. Ability to simplify and abstract problems
    This is the key ability for architects to design and develop high-quality software systems, which can help teams better understand business requirements and design and develop in complex environments.
    Take the user login system as an example:

    • The login problem can be simplified as: receiving the login type submitted by the user, receiving the credentials submitted by the user, and verifying whether the user credentials are valid.
    • It is abstracted as an interface and provides 3 methods:
      matchLoginType(HttpServletRequest request)whether the login type processed by the current class
      readCredential(HttpServletRequest request)reads the login credentials according to the login type
      validCredential(UserCredential info)verifies the login credentials
    • Add different implementations, such as account password login implementation, WeChat login implementation, LDAP login implementation, Token login implementation, etc.
    • As for the front-end display and user interaction methods, these are relatively unimportant details. It is enough to agree on standard front-end and back-end interface interaction rules.
  • 3. Propose suitable and feasible solutions within limited resources.
    Our resources such as software/hardware/manpower/time are limited, and architects must authorize these restrictions to seek optimal solutions under limited resources.
    For example: when the construction period is limited, the architect must be able to evaluate the actual business situation, dismantle modules/functions, and select the minimum function combination that meets the needs for priority design and implementation
    ; To conduct technology selection according to the situation, it is necessary to measure the smooth transition and personnel allocation capabilities with the least impact on the business.

  • 4. To meet business requirements and ensure system quality
    requires architects to correctly understand business requirements and output the non-functional requirements required by the system, including reliability, performance, fault tolerance, etc.;
    then design appropriate technical solutions and continue to track the process , to ensure quality.

  • 5. Scalability within a predictable period of time
    This is generally divided into two aspects:

    • Architects should have a deep understanding of requirements and be able to estimate changes in requirements within a certain period of time.
      For example, user login systems should not only design account and password logins, but should add WeChat scan code logins, Google identity logins, etc. according to the characteristics of user groups;
    • Architects should consider the scalability of the system, including horizontal expansion and vertical expansion, while taking into account cost and avoiding over-design:
      • Horizontal expansion: The system can quickly expand the capacity of nodes and disperse the load capacity of old nodes when the number of visits increases;
      • Vertical expansion: A single node of the system has sufficient expansion capabilities, such as CPU enhancement, memory increase, network bandwidth increase, etc.
  • 6. Continuous evolution within the life cycle of the system
    Architects continuously monitor, evaluate and iteratively improve the system according to the growth of the business.
    The ultimate goal is to continuously improve system reliability and throughput without affecting business growth.

Competency Requirements for Software Architects

As a suitable software architect, you should generally have the following abilities:

  • 1. Technical ability
    The architect must first be an excellent technician. It can be said that the architect who has not experienced sub-database sub-table is really not qualified. He should be:
    • Senior programmers:
      architects must have rich experience in program development, no matter what design patterns, HashMap principles, B+ trees, etc.;
      some core systems or general framework designs usually require architects to write and guide code ;
    • Multi-technical field knowledge:
      architects should have sufficient technical breadth to understand different technical field knowledge, such as understanding the front-end browser rendering process, client development technology stack, kafka sending and receiving principles, distributed related theories and some product implementations, containers and K8S, load balancing technology, etc., can propose appropriate technology selection, deployment scheme and implementation when facing specific problems;
    • Problem-solving experts and firefighters:
      Architects must have rich problem-solving experience and be able to solve many difficult and miscellaneous diseases that ordinary technicians cannot solve;
      have perfect problem-solving process experience, such as prioritizing the recovery of production accidents, and then performing fault location A complete set of solutions to solve;
    • Appropriate operation and maintenance engineers:
      Some urgent or special problems require online diagnosis by architects; when reappearing offline, corresponding services need to be deployed;
      architects should also have experience in deployment/operation and maintenance/monitoring of some common services, such as Centos, Windows, supervisor, crontab, redis, mysql, kafka, etc.;
      in addition, in some small and medium-sized teams, there are generally no full-time operation and maintenance personnel, and the architect is also responsible for operation and maintenance;
  • 2. Business analysis and abstract ability.
    Architects should have a deep understanding of industry knowledge. Only by making themselves experts in the field can they convert user needs into technical requirements more accurately and clearly. At the same time, architects should
    have abstract capabilities, that is, transform technical requirements into It is an abstract and specific architecture with good scalability;
    for example, a mall system can be abstracted as:
    login -> shopping cart -> order -> payment -> delivery and
    general authentication service, order service and payment service can be abstracted at the same time , inventory management services, and message transmission protocols between services, etc.;
    at the same time, when you see the product, you know that you need to design the classification table, SPU data table and SKU data table, and the evaluation of the product should be separated into an independent review service.
    Note: The six design principles are also applicable to software architecture design. Single responsibility, opening and closing principles, interface isolation, etc. should also be considered when dividing domain boundaries and module splitting.
  • 3. Management ability
    This point is relatively large. Generally speaking, architects should also have team management ability, including strong communication and understanding ability, project progress management and resource allocation ability, team collaboration and atmosphere motivation ability; the most important thing
    is Communication and comprehension skills, if you can't understand the questions raised by others, you can't express your thoughts clearly, you can't even find and define the problems clearly, let alone talk about follow-up actions.
    Another point I think is frankness. Team members communicate with each other every day. If they are not frank enough, members will easily perceive it, and they will be disgusted and dishonest. Many problems will not be exposed, which may eventually lead to project failure.
  • 4. Learning Ability
    Architects must have relatively good learning ability and adaptability, as well as strong foresight, and should often participate in various online and offline training or exchanges to understand and keep up with the ever-changing technology and industry development trends .
    At the same time, architects must also have good summarization and precipitation capabilities, including the summary of technical experience, the collation and output of technical specifications, the writing of operation and maintenance runbooks, and the output of training documents.

These abilities basically require continuous learning and exercise, such as abstract ability, which means long-term demand analysis, division of domain boundaries, and comparison with similar project designs to find out the shortcomings of your own design and carry out learning and reconstruction.
It must be remembered that technology is not everything. Many scenarios can be solved through demand optimization instead of complex technical solutions. I will give some examples later in the article.

Here is a Geek Time Architect Skill Map, you can refer to:
This picture will always be reported by CSDN as a violation of the picture, you can search for yourself:
Geek Time Architect Skill Map

Share 2 more from https://roadmap.sh/ : front-end capability roadmap and back-end capability
insert image description hereroadmap—insert image description here

2. How to grow

Share a picture:
insert image description here
The above picture is from "Pattern" by Mr. Wu Jun , you can read it carefully:

  • Baseline: The engineering knowledge you master varies from person to person, for example, experts have a high baseline and novices have a low baseline; the
    first thing we need to do is to position ourselves, find our own baseline, and continue to learn to improve our baseline .
    Many inventions made by civilian scientists in their lifetime are not recognized because their baseline is lower than the baseline of this era, and they directly use their old knowledge instead of learning.
  • Limits: Restricted by physics, the environment, and even personal cognition, the achievable limits, such as the speed of light, the maximum number of connections of a single machine, the maximum throughput of a single machine, etc.; when we are learning and improving, we must clarify the limits of this direction to avoid
    ineffectiveness toss
  • Ladder: The path and method to the limit, you need to learn to gain knowledge or explore the method that suits you by yourself.
    Note: Limited by each person's personal cognition, different resources, and whether the exploration method is effective, fewer and fewer people can reach the limit, so the ladder is convergent.

So, to sum up, there is no shortcut to how to keep yourself growing:

  • Keep learning and improve your baseline
    Many times, the epiphany you think is just the basic skills of others. by: Liu Run
  • Practice, continuous practice, induction, summary, comprehension
    Don't think you don't have time, in the 5-minute business school recommended book, there is a special section teaching you time management, just listen to it for 5 minutes.

Combining theory and practice, we know that there are two kinds of knowledge:
1. What others tell you or what you learn in books is theory;
2. What you experience yourself is practice;
only theory is easy to forget; only practice; You don't know what to promote.

My experience:
1. For the pits that I have stepped on, I need to review the game to understand why the problem occurred and what the essential reason is.
2. For the pits that others have stepped on, I will try to step on it in the test environment to deepen the impression and explore the essence

Finally, I would like to share a learning problem I saw on Zhihu, which is very interesting:
Someone in Zhihu asked a question: The ancients had a good policy, a middle policy and a low policy, why did many people choose the low policy?
A high praise answer said so. Taking learning as an example, there are three strategies:

  • The best policy: a rigorous study plan, hanging on the beam, and dancing with the sound of the chicken;
    obviously, it is too difficult, and few people can do it;
  • Medium strategy: loose study plan, read a book a week/month;
    this medium strategy is not bad, many people will choose, even make time planning, but the execution process is easy to be interrupted, what mobile phone misses me so much, take a look on Douyin , have a drink with friends, it won't last for 1 or 2 months
  • Bad policy: Random study, learn as soon as you think of it
    Most people choose this, including me, knowledge fragmentation is very serious, and it is easy to forget

3. Recommended books

technical field

These three books are really boring to read. You can read them once to get an impression, practice for a while, and read them again when you come back.
insert image description here

non-technical field

At the same time, we should not only focus on the technical field, but also pay attention to some knowledge outside the technical field;
especially strongly recommend Liu Run's 5-minute business school, which is an audio series, each audio is about 5 minutes, covering business knowledge, products Innovation, self-management, team management, performance improvement and other aspects of knowledge,
some people do not think highly of him on Zhihu, but for me in the technical field, a lot of knowledge is almost enlightening, and naturally it is also for me It has provided great help for my growth and work, and I strongly recommend learning.
insert image description here

4. Extended information

Here are two certification exams for architects. Students who are interested in improving their architectural capabilities can try it. The
content involved in certification is relatively comprehensive and can improve personal abilities as a whole, so don't hold it It is quite OK to study for the purpose of the exam, or even just study without the exam.

TOGAF certification

TOGAF is the abbreviation of The Open Group Architecture Framework. It is developed by The Open Group and is being updated continuously. The Open Group is a non-profit technology industry alliance.
The Open Group defines TOGAF as "the global standard for enterprise architecture," which provides a set of methodologies and best management practices.
TOGAF has been used by 80% of Forbes 50 companies, and has been highly recognized and actively promoted by leading international IT companies such as HP, IBM, Kingdee, Oracle, and SAP. In the practice of Chinese enterprise architecture, the TOGAF approval rate exceeds 50%.
TOGAF Official Introduction: https://www.opengroup.org/togaf
Baidu Encyclopedia Introduction: https://baike.baidu.com/item/TOGAF/9832356

A brief overview of the competency model for TOGAF certification is as follows:

  • 1. General skills: leadership, teamwork, interpersonal communication, eloquence, writing, logical analysis, stakeholder management, risk management;

  • 2. Business skills and methods: business cases, business scenarios, organizational structure, business processes, strategic planning, budget management, strategic vision, business indicators, business culture, legacy investments, business functions;

  • 3. Enterprise architecture skills: business process design, role design, organizational structure design, data design, application design, system integration, IT industry standards, service design, architectural principle design, view and perspective design, building block design, solution modeling , benefit analysis, business interaction, system behavior, project management;

  • 4. Program and project management skills: program management, project management, managing business change, change management, value management;

  • 5. General IT knowledge and skills: IT application development methods and tools, programming language, agent application, information consumption application, information provision application, storage management, network, Web-based service, information technology infrastructure, asset management, service level agreement, systems, commercial off-the-shelf, enterprise continuum, migration planning, management tools, infrastructure;

  • 6. IT skills: software engineering, security, system and network management, transaction processing, location and directory, user interface, international operation, data exchange, data management, graphics and images, operating system services, network services, communication infrastructure;

  • 7. Legal environment: contract law, data protection law, procurement law, fraud, commercial law

System Architecture Designer for Soft Examination

System architect is an advanced certification of computer technology and software professional technical qualifications, refer to the official introduction: https://www.ruankao.org.cn/platform/details?code=03_03

Its examination requirements:
(1) master the basic knowledge of computer hardware, software and network;
(2) be familiar with the information system development process;
(3) understand information system development standards and common information technology standards;
(4) be familiar with mainstream middleware and Application server platform;
(5) Master the basic technology of software system modeling and system architecture design;
(6) Proficient in information security technology, security strategy, and security management knowledge;
(7) Understand the basis of laws and regulations related to informatization and information technology (8 )
Understand the user's industry characteristics, and construct a suitable system design according to the industry characteristics;
(9) Master the basic knowledge of applied mathematics;
(10) Proficiency in reading and correctly understanding English literature in related fields

It can be seen that there is still a lot to know.

epilogue

The five chapters of Architecture Talk come to an end here.
In the following articles, I will list some cases of demand analysis that I have experienced, as well as the technical design solutions we adopt.

Guess you like

Origin blog.csdn.net/youbl/article/details/131515254