Original source: http://www.agiledon.com/post/2010/10/113.html
This is when I was in Shanghai this year to participate in the Asia-Pacific Software Development team Management Annual Meeting, INFOQ to my interview content (I think that Mandarin is OK, listen to the video, I think my mandarin is really bad.) And at the beginning of the interview, I can see that I'm a little nervous. Video link: Zhang Yicheng on how to evaluate the merits and demerits of architecture
Hello, I am now in the Asia Pacific Software Development Team management Annual meeting, sitting next to me is "Software Design Essentials and model" author Zhang Yicheng. Zhang Yicheng hello.
How are you doing.
Can you tell us about yourself first?
My name Zhang Yicheng, is Masbo (Msup) 's gold medal lecturer, mainly responsible for the architecture and design of training and consulting work. In the first half of this year, I just finished my second edition of the book. At present, from the reader's feedback, the book's situation is still relatively satisfactory. My experience in development and design architecture, about 10 years, has been in ZTE, Hewlett-Packard and China Soft International work, held a position also has ordinary developers, software development engineers, architects, project managers, technical director, in the technology of many roles I have served, mainly in. NET direction has some experience, is the 2006 to 2010 consecutive four years of Microsoft's MVP. At the same time, I am mainly based on architecture and design has mastered a certain knowledge, but also willing to share with you a structure and design this piece, I have some experience, thank you.
So what do you think of the role of the architect? Because architects include a lot of responsibilities, what do you think is his main responsibility, and what is the most important of all.
When it comes to architects, technically speaking, it should be a very high level. We all know that this architecture of software is introduced from the inside of architecture, we call it architecture architecture, architect is architect. As for the construction industry, architects are relatively architects of architecture. However, in the software industry, it is very different from the construction industry, and from the perspective of our industry, the general architect may break it down into business architects, system architects, software architects. So on the whole, I can make an analogy, for example, the project is sitting in a car, the project manager is the driver, then the architect, his duty should be to specify the driving route of the car, to ensure that the car during the entire journey without any problems, and to be able to reach our target position without hindrance, I think the architect should grasp the whole technology, the direction of the project, the direction of driving.
Then his duties, first of all from the technical aspects, to be very satisfied with customer needs. At the same time, in terms of non-functional requirements, can also meet the requirements of such a solution.
Second, he is going to build a good bridge between the business and the technician. In Japan's outsourcing development, the architect is sometimes called Bridge, bridges Engineer, it means the equivalent of the architecture, technology and business to build a bridge of communication, how to the business needs to understand the analysis, to get our domain model. At the same time, the results obtained by this analysis are designed by the model. After design, it is implemented by our developers, which is the second aspect.
The third aspect should be a technology leader, which is responsible for the technical issues that arise in the project, and our developers should first get better guidance from the architect.
The fourth one should be as a planner, just like our entire reform and opening up has a plan, a few steps away, a few steps away, such a plan. So for architects, it's more about the big picture than the details, especially for product development, where product development is a plan for a product line, and this overall planning, I think, is an important part of the architect's role.
You also mentioned the different roles of architects and project managers, and how to weigh the responsibilities between architects and project managers in a good team.
First of all, different development teams, different development cycles, choose different software development lifecycles, may be in terms of responsibility, their relationship is somewhat different. From traditional software development management, such as waterfall, iterative, RUP, these aspects of the organizational structure is relatively not a parallel structure, there is a hierarchy of this relationship. But in this kind of team, the project manager and the architect should be two different relationships, on the one hand is a subordinate relationship, that is to say, the architect is responsible for the project manager, the project manager is responsible for arranging some of the architect's work, this is a relationship.
But another more important relationship is that architects and project managers should be a partner relationship, and that is the relationship of cooperation. Because the project manager is responsible for the whole project management of this piece, he is more concerned about how to complete the project progress, scheduling, task tracking, and customer coordination. Architects are the technical and business aspects of analysis, so the two of them at this level, should be a parallel to this relationship. But in many agile teams, the division of this role is not very clear. For example, in scrum, Scrum Master is the equivalent of our traditional so-called Project manager, but his authority for management has been weakened a lot, and more is the role of guidance and coordination. At the same time, Scrum Master is primarily responsible for bringing our team together to make the scrum team work better. So in this team there is no such thing as an architect, so maybe every team member might become an architect. In such a case, according to my previous projects, if we were too reinforcing the role of this architect, it would probably hurt our entire team. Like this, we need each team member to play their own self-empowerment, in a parallel way, in terms of design, more in a collaborative way, rather than in a managed way, which is an understanding of mine.
Did you say that there would be some damage, too much emphasis on the damage done by architects?
Because before, I had a project at Hewlett-Packard, we were implementing scrum, but we had a traditional, because in the company, the implementation of scrum is also the first time, everyone has no experience. We were a team member, in terms of development capabilities and experience, and there was a certain lack of it, so I was the architect of the whole team. But in scrum, there was no such role, but because of the special circumstances of our team, we added this role. The results later led to what, is our team, each team member of this initiative, enthusiasm has a certain impact, he will have a dependency on the architect, feel that there are any problems will go to me, there is a technical grasp is not good, and even from the needs of the poor grasp, will come to me, This will cause us to not form a team. I think that in this regard, it may have some impact, in fact, it is also in the agile, some small companies in China, or from some large companies to promote the emergence of a barrier of a big problem, is that our team members, in the ability to be able to reach everyone is complete enough to complete the business analysis, design, Finally the code implements some tests. In the macroscopic sense, many people do not have this bigger picture. Therefore, there are many shortcomings in the framework, which is one of my experience.
Many architects have been transformed from programmers, in the process of transformation, you think which elements are more important, which are more difficult to grasp, how to deal with the pain of transformation.
This is really a problem, I also have a lot of programmers have just stepped into the industry has communicated, first I asked their ideals, if the choice of technology this piece, their ideal is the architect. This problem in our industry is very prominent, I have just entered the industry with a number of developers have communicated, I asked their ideals, what to do in the future, some want to do management, some want to do technology. So those developers who want to do the technology, they all aspire to the role of this architect, it should be said that the architect is really standing in the technology this piece is the highest level. But how they become architects, in this process, what they should do, how to go in this direction, in fact, they are very confused. As a matter of fact, we know that many architects in our industry now, especially those who do the technology, are coming up with a lot of steps from developers.
But in this process, some people fall down, some people have been to become an ordinary developer, or software engineer, did not embark on such a level. The reason is that the architect needs the ability and the ability of the developer to have a difference, we ask the architect to have the ability to achieve, this is not the same as the building, building can directly cultivate an architect, but in our industry, it is not possible to cultivate an architect from the college, It is necessary to accumulate a lot of experience and to have some coding skills. Is that the architect must understand the implementation, but if you stay on to achieve this level, it is impossible to become a qualified architect, because the architect grasps more is the big picture thing, is a higher level, the abstract aspect knowledge.
How to become an architect, need to cultivate themselves in this sense, the first training, is from the industry this piece, because to do our software industry, depending on the domain, the domain model may not be the same, business process is different, business rules are not the same. So if you are not clear about the business rules and business processes in this industry, it is difficult to get a good theoretical model, and it is difficult to get a good structure, so from the industry, we should consciously cultivate this ability. Is that you can focus on some of the industries your company is engaged in, such as the financial industry, or the manufacturing industry, or the insurance industry, telecommunications, communications, the industry, to have this ability, you have to have a sense of accumulation. Rather than to be immersed in writing code, but consciously to participate in some of the requirements of this piece of understanding and analysis, which I think the first one.
The second is to master some of the ability to improve their own abstraction, improve their modeling capabilities. Because the architect needs to have the largest and strongest ability, is able to from a lot of complex needs, from many details to achieve, can go to abstract a common thing, can from different places, can find the common place, that is, the so-called commonality and variability of such an analysis, They have a very good grasp of the ability in this respect. Then this aspect of the ability to grasp the abstraction, but also to form a model, the formation of a domain model, analysis model, design model, through this model of the way to express it, I think to have consciousness to accumulate this ability.
Third, I think there should be a conscious, forward-looking understanding of this knowledge, whether from the network, including like we INFOQ also has a framework of the zone, architecture zone has a lot of excellent articles, are the first-class architects at home and abroad to write some articles, you can consciously see these aspects of the article, Or read some good books. Then develop your ability to structure this piece from this aspect.
Fourth I think there is a communication, consciously improve the communication, why many developers did not become architects in the end, because many of their technical staff may be more introverted, biased toward research, inclined to deal with the machine, and neglected to deal with people. And the architect, as I said just now, architect is a bridge between the business and the implementation of the technical staff, the bridge on the one hand, from the point of view of writing, document to collaborate, communication, on the other hand is the verbal aspects of communication, and our developers in this aspect is still deficient. So I think that the developers have to finally grow into an architect, the first you have to set goals, set up, you have to consciously go in this direction to develop, to develop these capabilities of architects. Based on a number of projects, effective, timely to summarize the experience of these projects, or to learn in a timely manner, because you may be a developer, but in your project team, there must be an architect like this role exists, then you can consciously to this architect to learn, Or from his place to get some things, programs, you learn to think, to think, so I feel slowly from experience to accumulate, from the technology to accumulate, from the ability to improve, slowly I think, give you a good opportunity, will be able to become a qualified, and to the best architect.
Which of the points you have just said is more difficult to grasp. For a programmer, the more difficult the opposite is specific.
Difficulty should be the ability to abstract and bigger picture. Because we ask the developer for the ability to specifically implement the capabilities, grasp the details, an implementation of an algorithm, and then a business process, how he does it, or a technology, no matter what language, or platform, a technology, such as security, or write a Web Service, or write a rights management. In this piece, their ability is very strong, but how to extract it to higher abstract ability and bigger picture this piece, I think many developers are relatively deficient.
Did you mention the impact of technology and business on architects, and architects need to be technical experts? Or does he need to be a business expert? Why.
First of all, from a technical point of view, for architects my view is first to be dedicated, and then Bo. Is the first one, you have to go deep to understand what you are good at a certain framework, a platform, must be dedicated. I say that the so-called special, not to know that every detail of it is very clear, but to the internal principle of the very clear, so that even if you encounter a new problem, you can also be able to quickly solve. Because the architect in the foundation of this piece, to establish the authority of the technology, if you design the model you do not know, I say for example, you do not understand the communication protocol, how you do the architecture design, how you can grasp it, so it must be dedicated.
However, there is a very important thing is to Bo, because we do the architecture, software, not necessarily, has been doing projects will only use a platform, only with a technology, and now the project, in fact, there is a development, multi-lingual, multi-platform coexistence of such a development, many projects we have seen this trend. So if you only know a technology, only drilling a frame, drilling only one platform, then when you need to integrate multiple systems, you may be helpless, so be sure to Bo. So Bo means that because of software, no matter what platform, no matter what the framework, no matter what language, in fact, its principle is interlinked. Because you are specialized, so you to its language, principle, the mechanism of the platform is very clear, you need to quickly master other technology, is very easy. But there is a difference, you need to grasp its different places, but you can also learn from each other, you can use another technology to the advantage of the technology you are using the defects, so this is my thinking of the technology.
And from the business, you have to be an expert in the industry, of course, the best, but the human energy is limited. In general we have two situations, one is that if the architect, he has been doing only one direction, that is, he has been doing the car manufacturing this piece, he may accumulate with experience, slowly, he may become a car industry experts. But in fact this is rare, and many architects may face another new project, such as you used to make a car, and now you do finance, what do you do. So our general practice is that if a large company, a large team, we will have specialized field experts, by the domain experts to take charge of the business this piece, or by the customer to take charge of the business this piece. But our architects also have to have a certain understanding of the business, at least you have to clarify some industry terminology so that you can communicate with your clients and domain experts without any problems, so I don't think that every architect has to be a business expert, but at least before you do this architecture, You have to understand this business and understand the industry.
Let's talk about how to evaluate the pros and cons of the architecture, and whether there are any quantitative or qualitative indicators that are actually available. How did you evaluate the system architecture in the previous project?
This question I think, should say is also a problem. We also see a lot of projects, including a lot of great architects, the development team is also very good, the company is also very good, but failed, there are many reasons, the architecture of this piece is actually a crucial. Architecture in general I think from the functional requirements and non-functional requirements, can be divided into these two aspects.
From the aspect of functional requirements, how to measure the architect is successful, is good, in fact, is very simple, is to meet the function, to meet customer needs. Then we can use some methods, such as demand matrix, tracking these aspects with demand, or through the prototype of these angles to communicate with customers, through the customer side to understand whether our architecture solution to meet the requirements of functional requirements. Then we can make use of some methods, such as driving the design, or by force these ways to drive, the domain pattern, that is, the so-called business model, to build it.
From the non-functional requirements, is actually a problem of the architecture, the mention of security aspects, performance, scalability, scalability, the requirements are many. For example, we now know that like *******, FaceBook, their business is very simple, like ******* is very simple, I follow you, and then you follow me, the business is very simple. But as a ******* architect is demanding, the highest possible performance, security stability in this piece, because the number of people to access, so the performance of this piece how to measure, you need to have some metrics, such as response time. In the industry there are many common methods to solve this non-functional requirements, such as from a performance perspective, generally using the cache, in the case of hardware can not be improved, the most important thing is to take advantage of the cache, whether it is a normal cache, or distributed buffering. The other is to consider scalability, by clustering the way to increase the way the server to improve this performance. These things, we are in the framework of the time, I think in the early days should be considered good.
And I think there is another way, is to each functional, non-functional factors, in the trade-off or evaluation of the structure is appropriate, you can expand its factors, such as the original customer only want to be able to bear 100,000 people at the same time on-line, you can enlarge it, you enlarge to 1 million people, When the number of people on the line reaches 1 million, this architecture will not be a problem, in such a way, is to magnify a factor to measure your architecture. Another pre-done research, pre-made architecture, architecture this piece I can do first, first make a prototype out, the prototype of the structure, we pass some testing means, through the stress test, some of the testing methods, to weigh the structure of the problem #
as you just said, a system that ends up being a bottleneck for some non-functional because it's like security, scalability, what the architect does at this stage.
It should be said that this time the architect plays the role of firefighters, firefighters, in fact, to do the problem behind, itself from the role of view, it is the architect's question, you did not consider before, such as we do a health care project, before you do not consider, the network disconnected situation, how to deal with this situation, For example, suddenly the network is broken, let the system stop, so that it can not support this disconnection, offline this way, if not considered, there must be a problem. So first of all, the 1th, in fact, I have just said, the first thing to consider to these issues, we all said to consider the future, in terms of function, to consider the future is very difficult, can not today to consider the future many years after the changes in functionality, agile this angle is so to analyze, we only said today to do things. But from the non-functional requirements, you can think about the future, consider the future in terms of performance, security, scalability, scalability, and his requirements, so you have to consider first.
If you think about these things in advance, then there will be less likelihood of problems later, but if they do appear, then what happens. There is no other way to do this at this time, only the experience of the architect. In addition, architects should not be too complacent, or too confident, feel ashamed, to turn to others, in fact, architects do not all understand, such as hardware, network, security, there will be specialized network experts, hardware experts and security experts, we call infrastructure, infrastructure and architects, You as the main architect of this project, the major project has a team of architects, small projects you can go to seek help, looking for other companies or other people in our company, to seek help, solve this problem as soon as possible. In the event of this problem, the first to find the cause, find its crux, and then the solution of the proposed, you can according to your experience, but also to seek help, as soon as possible to solve the problem. I think a lot of architects are face concept, I am a very good person, I am leader, how I went to seek other people's help. But the fact is that every architect has his short board.
does the architect need to be involved in the daily coding work?
I came to feel the need.
How the architect will keep the technology sharp.
I think this is just a question you mentioned, that is, need not coding, I think the coding can also improve his technical acumen. But this code, my understanding is that the architecture is best to write some coding, the first best is to write the overall solution of the general coding, rather than to pick up the specific algorithm, some details of the implementation, such as I can even write a framework of things out, and then specific implementation by the developer to fill, In addition, the more difficult things, you can code to solve. And from an object-oriented point of view, you can write some base classes or abstract classes to extract something in common. How to stay sharp, first coding this angle, we have to temper at any time, I know like many of our world-class, like Kent Beck, Martin Fowler These people, they are still writing code every day, is to improve this ability, if long-term do not write, It is possible to actually do the project when you encounter a problem that requires you to write, you can not write it.
Finally, for the many developers interested in growing up as architects, do you have any better guidance and advice can help you to grow quickly and efficiently, of course, detours are essential, how to avoid less detours.
The first is, to recognize themselves, say what your specialty is, your character, you have to have a full understanding, if you do in the coordination of capacity, organizational skills, oral expression ability, communication skills, abstract ability you can not reach, you may choose another path. Instead of thinking that the architect is good, you have to do, in fact, there are many roles in this industry is very good, go to the end to become experts can also be able to get a good career, the first to recognize their own, the second to recognize the goal, recognize yourself, you also have to recognize the goal, your goal is what. And your goal has a short and long term goal, what do you do in the last year, three years, five years you want to reach a height, this is the second one.
Third, to find a suitable method, because each person's ability is different, the specialty is different, the learning method may be different, then your method is what you want to find. For example, you can read more about the source code, read some open-source projects, or you can read more books, do more projects, you can find some relevant documents on the Internet, these are some good learning methods, like I now keep reading some articles on the web every day, or reading books, special books, is some very first-class, fighting in the front line of the architect, write some of the summary of experience. Some things may not be able to touch the project we do at all, but in future projects may encounter, if you also hope that in the future when you encounter problems when you go to find, then there will be a big problem, so this is I said the third to find their own way of learning.
The last one, I think the most important thing is that the foundation is the key, do not be ambitious, not all of a sudden I want to become an architect, good, I now go to object-oriented thinking I do not know, design patterns I do not understand, well, I'm going to do the architecture mode, I go to do architecture research, I go to analyze the whole implementation of these architectures, you have no way to master, so you have to be grounded first to the most critical, the most basic things first mastered, like I just said to first post-blog. First of all the research is very good, and do not hold a thought, said I know the line, to know it, and do not know why, so there will be a lot of problems, we have to study it thoroughly. Include like now, take C # This language, you may think this language you are very clear, but in fact this C # inside, involves the framework, such as how to run the PC garbage collection mechanism, how to manage the memory, how to deal with the multi-threading, concurrency is how to solve, There are a lot of things to go deep into the analysis, rather than blindly know C # syntax is enough, these five points for developers is a more important, should be said to be more important one ability.
Well, thank you very much for receiving our interview.